MSBuild调用了错误版本的csc.exe

4
我正在使用TeamCity来调用一个nant脚本,目前这个nant脚本非常简单,只在解决方案中的单个项目上调用一个msbuild任务。
构建失败了,看起来是调用了msbuild 3.5版本,但错误地从.net 2.0文件夹中调用csc.exe。由于我们使用了.net 3.5语言特性,因此编译失败了。
查看csproj文件,ToolsVersion和TargetFrameworkVersion都设置为使用3.5版本。是什么导致了msbuild选择错误版本的csc.exe呢?
3个回答

8
MSBuild使用任务、目标和工具的工具集来构建应用程序。通常,MSBuild工具集包括一个microsoft.common.tasks文件、一个microsoft.common.targets文件以及诸如csc.exe和vbc.exe之类的编译器。为确保MSBuild调用正确的C#编译器(csc.exe),请在项目文件中的Project元素上指定ToolsVersion属性中的Toolset。 以下示例指定该项目应使用MSBuild 4.0 Toolset进行构建。 有关ToolsVersion属性的更多信息可以在此处找到: http://msdn.microsoft.com/en-us/library/78f4aasd.aspx

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 Framework 版本:

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


0
你的路径中直接有csc 2.0版本吗?
当你从Visual Studio 2008命令提示符中运行msbuild时会发生什么?

路径中没有任何内容。如果我在服务器上运行msbuild,它可以正常运行。这里面有一个线索。嗯,我猜这可能是teamcity或nant而不是msbuild。 - ilivewithian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接