不要记下downvote,直到你没有完全阅读它。 但是同一个标题存在很多问题,它们都没有工作,我想解决我的具体问题。请帮忙。
我正在使用C#4.0 Asp.Net应用程序, 在按钮上的网页上单击我想创建一个exe。 所以我使用 devenv.exe ,但它挂在 process.waitforexit 命令上。
这是有效的,超过7个monnths,但在两天之前突然停止工作。 它也在localhost上工作,在服务器上发布后它无法正常工作。 代码在
之下System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\devenv.exe";
process.StartInfo.Arguments = @"D:\ProjFolder\xxx.sln /rebuild";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
OutputMsg = "";
if (!process.Start())
{
OutputMsg = "failed.</br>";
OutputMsg += process.StandardError.ReadToEnd();
HttpContext.Current.Response.Write(OutputMsg);
return false;
}
// Some people said that this is buffer problem, you should release it by reading
// output, i used "ReadToEnd" that is not working, so trying this again, and also it
// is not working
//while (!process.StandardOutput.EndOfStream)
//{
//string outputmsg = process.StandardOutput.ReadLine();
//HttpContext.Current.Response.Write(outputmsg);
//}
//string output = process.StandardOutput.ReadToEnd();
process.WaitForExit(60000);
if (process.HasExited)
{
OutputMsg = "Succeeded.";
HttpContext.Current.Response.Write(OutputMsg);
}
else
{
OutputMsg = "Process not completed properly.";
process.Kill();
HttpContext.Current.Response.Write(OutputMsg);
return false;
}
答案 0 :(得分:1)
正如@Damien_The_Unbeliever所说,我尝试了 MSBuild.Exe ,并且效果很好。 现在还没有认识到为什么devenv.exe停止工作。
然而,msbuild.exe运行良好。
注意:MSBuild.exe可以通过命令提示符使用,并通过编码编译项目,我们可以使用这个命令行实用程序。
msbuild.exe位于以下位置,请关注版本
C:\Windows\Microsoft.Net\Framework\v2.0.50727\MSBuild.exe
C:\Windows\Microsoft.Net\Framework\v3.5\MSBuild.exe
C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe
目标项目/解决方案框架版本和msbuild.exe版本应该相同。
如果有人需要有关msbuild.exe的帮助,此链接可能过于使用http://msdn.microsoft.com/en-us/library/ms164311%28v=vs.90%29.aspx 它包含整个命令行参数文档
Thanx @Damien_The_Unbeliever提示。
答案 1 :(得分:0)
如果它在2天前工作,并且你没有更改任何东西给你的代码,那么看看arround权限,可能是因某些原因改变了服务器上的权限。
其他方式,如果在(asp.net应用程序或.exe)的代码上发生某些更改,请先退后一步(取消上次更改),如果有效则再试一次,如果有,然后深入了解你的变化,问题就在那里。
关于进程超时的问题,它不应超过http请求超时(默认设置为20秒)。