Msbuild 为什么我的构建应用程序在VS12之外运行时失败(即部署时)?

Msbuild 为什么我的构建应用程序在VS12之外运行时失败(即部署时)?,msbuild,Msbuild,我已经编写了一个c程序,它使用Microsoft.Build.Evaluation构建*.csproj和*.vcxproj。如果我从VisualStudio12内部编译并运行它,它对这两种项目类型都非常有效。但是如果我直接在VisualStudio外部运行exe,我会得到下面的示例错误消息。该错误仅适用于vcx项目;c项目继续建设良好 问题:为什么我会出现这个错误?为什么我的程序在VS12内运行时对C和vcx项目都能正常工作,但在VS12外运行时失败,但仅对vcx项目有效 请不要因为我没有使用M

我已经编写了一个c程序,它使用Microsoft.Build.Evaluation构建*.csproj和*.vcxproj。如果我从VisualStudio12内部编译并运行它,它对这两种项目类型都非常有效。但是如果我直接在VisualStudio外部运行exe,我会得到下面的示例错误消息。该错误仅适用于vcx项目;c项目继续建设良好

问题:为什么我会出现这个错误?为什么我的程序在VS12内运行时对C和vcx项目都能正常工作,但在VS12外运行时失败,但仅对vcx项目有效

请不要因为我没有使用MSBuild.exe而责怪我。我的任务是使用Microsoft.build.Evaluation以编程方式构建C和vcx项目

代码:

运行时错误:


Visual studio维护您当前运行的Visual studio版本支持的平台工具集列表,例如在我的机器上,我有VS 2008、2010和2012

现在假设当我安装Visual Studio 2013时,它有一个V120的平台工具集版本。发生的情况是,项目以vcproj、vcxproj、vcxproj.filter.user文件的格式将其保存在相应的XML文件中

现在VS 2012不知道该值,所以在VS 2012中打开时会发出抱怨

类似地,在VS 2010中打开VS 2012项目,如您的案例等

解决方案: 要解决此问题,请在记事本++中打开解决方案文件。 做这两个改变 1更换

格式版本12.00

格式版本11.00

2更换

Visual Studio 2012

VisualStudio2010


然后在visual studio中再次打开文件并重新生成解决方案。

一种解决方案是在加载和生成项目之前强制将visual studio版本作为环境变量:

using Microsoft.Build.Evaluation;
...

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
Project proj = new Project("MyCppProject.vcxproj");
proj.Build(logger);

谢谢你编辑我的问题。看起来好多了。非常感谢甘尼什花时间回复。不幸的是,我不知道如何利用你的见解来解决这个问题。我需要进行哪些代码更改,以便我的应用程序在VS12之外启动时生成vcx项目?@oden,我已将解决方案与我以前的答案一起添加。我应该编辑1我尝试生成的目标的解决方案文件,还是编辑2我进行生成的应用程序的解决方案文件?如果1,那么我就沉没了,因为我不能改变我正在建立的目标。我只能做两件事。请澄清我应该编辑哪个解决方案文件好吗?谢谢。这就解决了问题!我如何给信用?我点击回答你的问题吗?不知道,我从来没有问过一个问题:至少我接受了你的好答案,我非常真诚地感谢你。
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.
using Microsoft.Build.Evaluation;
...

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
Project proj = new Project("MyCppProject.vcxproj");
proj.Build(logger);