从命令行覆盖目标框架

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

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

 <Project ToolsVersion="4.0" ... 

 v2.0 

我想知道是否

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

我特别想通过命令行实现这一点,而不是修改项目文件。

目前我正在做这样的事情

 msbuild myproj.csproj /p:Configuration=Release 

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

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

因此,覆盖proj文件中的值以及ToolsVersion。

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

Microsoft(R)Build Engine版本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说明
ToolSetVersion