MSBuild调用错误版本的csc.exe

MSBuild调用错误版本的csc.exe,msbuild,continuous-integration,csc,Msbuild,Continuous Integration,Csc,我正在使用TeamCity调用nant脚本,目前该nant脚本非常简单,只在解决方案中的单个项目上调用msbuild任务 生成失败,似乎正在调用msbuild 3.5,但它从.net 2.0文件夹错误地调用了csc.exe。由于我们使用的是.NET3.5语言功能,因此编译失败 查看csproj文件,ToolsVersion和TargetFrameworkVersion都设置为使用3.5。是什么导致msbuild选择错误的csc.exe版本?您的路径中是否直接有csc的2.0版本 从Visual

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

生成失败,似乎正在调用msbuild 3.5,但它从.net 2.0文件夹错误地调用了csc.exe。由于我们使用的是.NET3.5语言功能,因此编译失败


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

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


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

您可以通过声明以下内容直接指出要在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

MSBuild使用任务、目标和工具的工具集来构建应用程序。通常,MSBuild工具集包括microsoft.common.tasks文件、microsoft.common.targets文件以及诸如csc.exe和vbc.exe之类的编译器。要确保MSBuild调用正确的C#编译器(csc.exe),请在项目文件中项目元素的ToolsVersion属性中指定工具集。 以下示例指定应使用MSBuild 4.0工具集生成项目


路径中没有任何内容。如果在服务器上运行msbuild,它将正常运行。那里的某个地方有线索。嗯,我猜是teamcity还是nant,而不是msbuild。