我正在使用team city调用一个nant脚本,目前这个nant脚本非常简单,只在解决方案中的单个项目上调用msbuild任务。
构建失败,看起来正在调用msbuild 3.5,但是它从.net 2.0文件夹中错误地调用了csc.exe。由于我们使用的是.net 3.5语言功能,因此编译失败。
查看csproj文件,ToolsVersion和TargetFrameworkVersion都设置为使用3.5。什么会导致msbuild选择错误版本的csc.exe?
答案 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