繁体   English   中英

由Process.Start()调用的MSBuild在VS2010和VS2013之间的行为有所不同吗?

[英]MSBuild called by Process.Start() behaving differently between VS2010 and VS2013?

我同时安装了VS2010和VS2013,并且正在尝试运行通过调用MSBuild( C:\\WINDOWS\\Microsoft.NET\\Framework64\\v4.0.30319 )来编译.net 4.0解决方案的程序。

作为记录,执行此操作的代码如下所示:

var processStartInfo = new ProcessStartInfo
            {
                FileName = pathToMSBuild,
                Arguments = "C:\path\to\mySolution.sln /nr:false",
                CreateNoWindow = true,
                UseShellExecute = false
            };
            var process = Process.Start(processStartInfo);
            process.WaitForExit();

我检查了.sln,其中包含.vcxproj和.csproj文件,并且这些文件仅包含对ToolsVersion=4.0引用。

当我在VS2010中执行程序时(或打开cmd.exe并自己运行MSBuild命令),它可以正常工作并编译解决方案。 但是,当我使用VS2013运行相同的程序时,我从MSBuild中收到以下错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis\Micros
oft.CodeAnalysis.targets(214,5): error MSB4175: The task factory "CodeTaskFacto
ry" could not be loaded from the assembly "C:\WINDOWS\Microsoft.NET\Framework64
\v4.0.30319\Microsoft.Build.Tasks.v12.0.dll". Could not load file or assembly '
file:///C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Build.Tasks.v
12.0.dll' or one of its dependencies. The system cannot find the file specified
. [C:\...\solution\myProject.vcxproj]

我在msdn上找到了这个答案 ,实际上为我解决了这个问题-在注释掉了该文件中的有问题的行之后,我可以从VS2013成功调用MSBuild。 但是我不明白为什么这很重要,因为我以为我正在运行v4.0 MSBuild来编译ToolsVersion=4.0的项目。

大概这是由于我使用VS2013运行/调试程序时设置了一些环境变量吗? 我在互联网上找不到任何详细信息。 请有人可以解释这是怎么回事吗?

您可以尝试将/ v:diag开关添加到参数中。 这将导致msbuild在将输出详细程度设置为诊断的情况下运行。 这将在每次调用开始时向您显示env vars的状态和应用程序域,并可能帮助您识别差异。

注意-完成后将其删除,因为它将大大减慢构建过程。

问题

错误是无法加载文件或程序集并且系统找不到指定的文件.. .vcxproj

故障排除

打开ProcessMonitor并运行构建过程,直到抛出错误。 当跟踪失败时停止跟踪,并检查ProcMon(Filemon)日志以查看MSBuild在何处查找其找不到的.vcxproj或.xyz文件/程序集。 解决!!

将文件放在期望找到的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM