22

我想从命令行构建一个c#项目(.csproj),msbuild并希望以 .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
4

1 回答 1

23

您需要 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 文档:

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

您还可以检查 Environment vars 以获取安装的框架版本: 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

工具集说明
ToolSetVersion

于 2012-08-17T10:01:18.303 回答