经过多天的测试,我最终解决了自己的问题。我仍然没有直接解决我原来的问题,但只是编译.bat中的命令是一个有效的解决方案。
"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" PAUSE
暂停使终端保持打开状态,如果不需要则将其删除。我用它来测试,所以我可以看到输出,并确保我的命令正常工作。
try { ProcessStartInfo processStart = new ProcessStartInfo("Cmd.exe") { UseShellExecute = false, RedirectStandardInput = true, //shows output in VS Arguments = @"/k C:\DacPacs\runcmd.bat" }; Process process = new Process() { StartInfo = processStart }; process.Start(); } catch (Exception e) { Console.WriteLine(e.Message); }
ProcessStartInfo(@“C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ Microsoft \ SQLDB \ DAC \ 140 \ SqlPackage.exe”如何,而不是指定ProcessStartInfo(“cmd.exe”) )?
或者,您也可以直接使用Microsoft.SqlServer.Dac API。 NuGet包在这里: https://www.nuget.org/packages/Microsoft.SqlServer.DacFx.x64
只需在作为字符串一部分的引号前加一个反斜杠,你就可以开始了
startInfo.Arguments = "This \" is ok";
最后
还行吧
将是参数