MSBuild调用错误的csc.exe版本

时间:2010-08-18 09:07:39

标签: msbuild continuous-integration csc

我正在使用team city调用一个nant脚本,目前这个nant脚本非常简单,只在解决方案中的单个项目上调用msbuild任务。

构建失败,看起来正在调用msbuild 3.5,但是它从.net 2.0文件夹中错误地调用了csc.exe。由于我们使用的是.net 3.5语言功能,因此编译失败。

查看csproj文件,ToolsVersion和TargetFrameworkVersion都设置为使用3.5。什么会导致msbuild选择错误版本的csc.exe?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您的路径中是否有直接使用2.0版本的csc?

从Visual Studio 2008命令提示符运行msbuild时会发生什么?

答案 2 :(得分:0)

您可以通过声明:

直接指出要在nant脚本中使用的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>

或者,您可以在运行NANT脚本时指向正确的.NET框架版本:

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