从命令行覆盖目标框架

时间:2012-08-17 09:48:14

标签: c# msbuild

我想使用c#从命令行构建一个msbuild项目(.csproj),并希望以.Net2.0运行时为目标。

我看到项目xml文件中有2 tags感兴趣的

<Project ToolsVersion="4.0" ... 

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

我想知道是否

  • ToolsVersion 4.0可以为.Net2.0运行时生成兼容代码吗?
  • 我可以通过命令行从项目文件覆盖目标框架标记(/ToolsVersion命令行开关是否实现此目的?

我特别希望通过命令行实现此目的,而不是修改项目文件。

目前我正在做这样的事情

msbuild myproj.csproj /p:Configuration=Release

1 个答案:

答案 0 :(得分:17)

您需要msbuild的命令行参数才能使其正常工作:

msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5

首先覆盖proj文件中的值以及ToolsVersion。

要找出默认使用的msbuild版本,请启动Visual Studio命令提示符(可在“开始”菜单&gt; Microsoft Visual Studio 2010&gt; Visual Studio工具中找到)并键入msbuild。 输出的第一行将保留您的BuidEngineversion:

  

Microsoft(R)Build Engine Version 4.0.30319.1

来自msdn doc:

  

MSBuild使用一组工具,包括任务,目标和工具来构建   应用。通常,MSBuild工具集包括一个   microsoft.common.tasks文件,microsoft.common.targets文件,和   编译器,如csc.exe和vbc.exe。大多数工具集都可以用来   将应用程序编译到多个.NET Framework版本   和多个系统平台

您还可以检查环境变量以获取已安装框架的版本: Visual Studio命令提示符中的set F为我提供了以下结果:

  

Framework35Version = V3.5
  FrameworkDir = C:\ WINDOWS \ Microsoft.NET \框架\
  FrameworkDIR32 = C:\ WINDOWS \ Microsoft.NET \框架\
  FrameworkVersion = v4.0.30319
  FrameworkVersion32 = v4.0.30319

ToolSet Explanation
ToolSetVersion