2012-08-17 167 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