【发布时间】:2015-06-25 12:49:25
【问题描述】:
我同时安装了 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 上找到了 this answer,它实际上为我解决了这个问题 - 在从该文件中注释掉有问题的行之后,我可以从 VS2013 成功调用 MSBuild。但我不明白为什么这是相关的,因为我认为我正在运行 v4.0 MSBuild 来编译带有 ToolsVersion=4.0 的项目。
这大概是由于我在使用 VS2013 运行/调试程序时设置了一些环境变量?我在互联网上找不到任何详细信息。请问有人能解释一下这里发生了什么吗?
【问题讨论】:
-
路径错误,Microsoft.Build.Tasks.v12.0.dll 不在该目录下。不要通过复制文件来解决问题,这只会产生两个问题。
-
好点@HansPassant .. 我给了 OP 功劳,因为我不够牛仔复制文件?我希望我下面的规范点能引导 OP 深入挖掘
-
我确实不够牛仔,无法复制文件,但不幸的是仍然被你们的两个 cmets 弄糊涂了。我可以看到缺少 Microsoft.Build.Tasks.v12.0.dll 但我想我真正的问题是为什么我在 VS2010 中运行我的程序时它没有抱怨这个?
标签: c# visual-studio-2010 visual-studio-2012 visual-studio-2013 msbuild