2012-08-17 86 views
16

我想从命令行使用msbuild构建c#项目(.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 

回答

15

您需要的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 Tools中找到)并键入msbuild。 输出的第一行会牵着你的BuidEngineversion:

微软(R)构建引擎版本4.0.30319.1

从MSDN文档:

的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 \框架\
FrameworkDIR32 = C:\ WINDOWS \ Microsoft.NET \帧work \
FrameworkVersion = v4.0.30319
FrameworkVersion32 = v4.0。30319

ToolSet Explanation
ToolSetVersion

+0

如果toolsversion被设置为4.0将上运行时2.0所得到的组件运行? – 2012-08-17 10:03:49

+0

是的,它只会显示msbuild用于为请求的框架生成程序集的工具(目标/编译器等) – rene 2012-08-17 10:12:11

+0

我看到我在文件夹v2.0,v3.0和v4中各有一个msbuild.exe一个.0哪一个最好用 – 2012-08-17 10:17:41