MSBuild 调用错误版本的 csc.exe
我正在使用 team city 调用 nant 脚本,目前这个 nant 脚本非常简单,仅在解决方案中的单个项目上调用 msbuild 任务。
构建失败,看起来正在调用 msbuild 3.5,但它错误地从 .net 2.0 文件夹中调用 csc.exe。由于我们使用 .net 3.5 语言功能,因此编译失败。
查看 csproj 文件,ToolsVersion 和 TargetFrameworkVersion 均设置为使用 3.5。是什么导致 msbuild 选择错误版本的 csc.exe?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的路径中是否直接有 2.0 版本的 csc?
从 Visual Studio 2008 命令提示符运行
msbuild
时会发生什么?Do you have the 2.0 version of csc directly in your path, perhaps?
What happens when you run
msbuild
from a Visual Studio 2008 Command Prompt?您可以通过声明直接指出要在 nant 脚本中使用哪个 msbuild:
然后通过 msbuild 执行构建:
或者您可以在运行 NANT 脚本时指向正确的 .NET 框架版本:
nant CreateYouProjectTask -t:net-3.5 -buildfile:BuildYourProject 。建造
You can directly point which msbuild you want to use in nant script by declaring:
And then execute build via msbuild:
Or you can point to proper .NET framework version when running NANT script:
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),请在项目文件中 Project 元素的 ToolsVersion 属性中指定工具集。
以下示例指定应使用 MSBuild 4.0 工具集生成项目。
有关 ToolsVersion 属性的更多信息可以在此处找到:
http://msdn.microsoft.com/en-us/library/78f4aasd.aspx
MSBuild uses a Toolset of tasks, targets, and tools to build an application. Typically, a MSBuild Toolset includes a microsoft.common.tasks file, a microsoft.common.targets file, and compilers such as csc.exe and vbc.exe. To ensure MSBuild invokes the correct C# compiler (csc.exe), specify the Toolset in the ToolsVersion attribute on the Project element in the project file.
The following example specifies that the project should be built by using the MSBuild 4.0 Toolset.
<Project ToolsVersion="4.0" ... </Project>
More information pertaining to the ToolsVersion attribute can be found here:
http://msdn.microsoft.com/en-us/library/78f4aasd.aspx