2

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

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

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

4

3 回答 3

6

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

<Project ToolsVersion="4.0" ... </Project>

可以在此处找到有关 ToolsVersion 属性的更多信息:http: //msdn.microsoft.com/en-us/library/78f4aasd.aspx

于 2012-09-20T18:51:52.560 回答
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 框架版本:

南特 CreateYouProjectTask -t:net-3.5 -buildfile:BuildYourProject.build

于 2010-08-20T11:31:35.153 回答
0

也许你的路径中直接有 2.0 版本的 csc 吗?

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

于 2010-08-18T09:11:11.047 回答