我编写了一个使用Microsoft.Build.Evaluation构建* .csproj和* .vcxproj的c#程序。如果我从Visual Studio 12中编译并运行它,它在两种项目类型上都很有效。但是如果我直接运行exe(在Visual Studio之外),我会得到下面的示例错误消息。仅对vcx项目发生错误; c#项目继续建立得很好
问题:为什么我收到此错误?为什么我的程序在从VS12内部运行时对C#和vcx项目都能正常工作,但是失败了,但只有vcx项目才能在VS12之外运行?
请不要因为我没有使用MSBuild.exe而惩罚我。我的命令是使用Microsoft.Build.Evaluation以编程方式构建C#和vcx项目。
代码:
using Microsoft.Build.Evaluation;
...
Project proj = new Project("MyCppProject.vcxproj");
proj.Build(logger);
运行时错误:
Building MyCppProject
Project "MyCppProject.vcxproj" (default targets):
VCMessage:
ERROR C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(518,5): Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected.
Done building project "MyCppProject" -- FAILED.
答案 0 :(得分:0)
Visual Studio维护平台工具集列表,支持您当前正在运行的Visual Studio版本,例如我的机器上有VS 2008,2010和2012
现在假设我安装了具有平台工具集版本V120的Visual Studio 2013。会发生什么,是项目以格式(vcproj,vcxproj,vcxproj.filter.user文件)将其保存在相应的XML文件中。
现在VS 2012并不知道这个价值因此在VS 2012中打开时会抱怨。
同样适用于在VS 2010中打开VS 2012项目,与您的情况一样,等等。
要解决此问题,请在notepad ++中打开解决方案文件。 进行这两项更改 1)替换
格式版本12.00
带
格式版本11.00
2)替换
Visual Studio 2012
带
Visual Studio 2010
然后在visual studio中再次打开文件并重建解决方案。
答案 1 :(得分:0)
一种解决方案是在加载和构建项目之前强制Visual Studio版本作为环境变量:
using Microsoft.Build.Evaluation;
...
Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
Project proj = new Project("MyCppProject.vcxproj");
proj.Build(logger);