Visual StudioでSQLpackage.exeプロンプトを実行して、自動化プロセスを支援しようとしています。私はコマンドプロンプトで文字列をテストし、正常に実行されます。私はVS17を介してそれを実行すると私は開く/閉じると何も起こらないプロンプトを取得します。この仕事をするために私は何ができますか?ただ、明確化のためVisual Studioで、引用符付きの引数を使用してCMD.exeプロンプトを実行します。
、私は次のようになり、コマンドラインで使用したい文字列:コンソールに出力
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage" /a:PUBLISH /sf:"C:\targetdacpac.dacpac" /tsn:"(local)\SQL2016" /tdn:"DBtargpath"
そして、私の文字列を使用して:
Console.WriteLine(@"""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage"" /a:PUBLISH /sf:""C:\targetdacpac.dacpac"" /tsn:""(local)\SQL2016"" /tdn:""DBtargpath""");
返信:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage" /a:PUBLISH /sf:"C:\targetdacpac.dacpac" /tsn:"(local)\SQL2016" /tdn:"DBtargpath"
私のコードは以下に添付されています。私はVSを介してコマンドライン引数を実行することにあまり慣れていませんが、私は非常に多くの文字列リテラルが含まれているので、私のケースは非常にユニークであることを知るために十分な研究を行ってきました。
System.Diagnostics.Process process = new System.Diagnostics.Process();
try {
ProcessStartInfo startInfo = new ProcessStartInfo("CMD.EXE");
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.Arguments = @"""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage"" /a:PUBLISH /sf:""C:\targetdacpac.dacpac"" /tsn:""(local)\SQL2016"" /tdn:""DBtargpath""";
Process.Start(startInfo);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
EDIT:ファイルパスのスペースのためにエラーが発生しているようです。複数の文字列リテラルを送信すると、正しく動作しません。私は掘り続けます。
@記号で文字列リテラルを使用している場合は、正しい文字列が使用されます。なぜ端末が何もしないのか分かりません。私は格納されている文字列と正しいものを出力しました。引用符の前にスラッシュを置くと、@を取り除く必要があります。私は両方の方法を正直に試しました。多分、私はどこかでうんざりしました。 – Stephen