2010-08-18 54 views
2

我正在使用團隊城市調用nant腳本,目前這個nant腳本非常簡單,只能在解決方案中的單個項目上調用msbuild任務。MSBuild調用csc.exe的不正確版本

構建失敗,它看起來像msbuild 3.5被調用,但它不正確地調用.net 2.0文件夾中的csc.exe。由於我們使用.net 3.5語言功能,編譯失敗。

查看csproj文件,ToolsVersion和TargetFrameworkVersion都設置爲使用3.5。什麼會導致msbuild選擇錯誤版本的csc.exe?

回答

1

你是否有2.0版本的csc直接在你的路徑中,也許?

當您從Visual Studio 2008命令提示符運行msbuild時會發生什麼?

+0

沒有什麼路徑。如果我在服務器上運行msbuild,它運行良好。那裏有線索。嗯,我想這不是團隊城市就是南極城市,畢竟不是msbuild。 – ilivewithian 2010-08-18 09:25:41

0

可以直接點你想通過聲明的惡性腳本中使用它的MSBuild:

<!-- Initial path to use MSBuild from .NET Framework 3.5 --> 
<property name="MSBuildApp" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" /> 

,然後通過執行的MSBuild編譯:

<exec failonerror="true" program="${MSBuildApp}" verbose="true"> 
     <arg value="${SlnDir}\${SlnFile}" /> 
     <arg value="/t:Rebuild" /> 
     <arg value="/p:Configuration=${SlnConfig}" /> 
    </exec> 

或者你可以指向正確的.NET框架運行NANT腳本時的版本:

nant CreateYouProjectTask -t:net-3.5 -buildfile:BuildYourProject.build

6

MSBuild使用任務,目標和工具的工具集來構建應用程序。通常,MSBuild工具集包括microsoft.common.tasks文件,microsoft.common.targets文件以及編譯器(如csc.exe和vbc.exe)。爲確保MSBuild調用正確的C#編譯器(csc.exe),請在項目文件的Project元素的ToolsVersion屬性中指定Toolset。 以下示例指定應該使用MSBuild 4.0工具集構建項目。

<Project ToolsVersion="4.0" ... </Project>

有關的ToolsVersion屬性的詳細信息可以在這裏找到: http://msdn.microsoft.com/en-us/library/78f4aasd.aspx