从命令行覆盖目标框架

Kev*_*oyd 20 c# msbuild

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

我看到项目xml文件很2 tags有意思

<Project ToolsVersion="4.0" ... 
Run Code Online (Sandbox Code Playgroud)

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

我想知道是否

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

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

目前我正在做这样的事情

msbuild myproj.csproj /p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)

ren*_*ene 19

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

msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5
Run Code Online (Sandbox Code Playgroud)

因此,覆盖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和多个系统平台

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

Framework35Version = v3.5
FrameworkDir = c:\ Windows\Microsoft.NET\Framework\
FrameworkDIR32 = c:\ Windows\Microsoft.NET\Framework\
FrameworkVersion = v4.0.30319
FrameworkVersion32 = v4.0.30319

ToolSet说明
ToolSetVersion