【问题标题】:MSBuild calling incorrect version of csc.exeMSBuild 调用不正确的 csc.exe 版本
【发布时间】:2010-08-18 09:07:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: msbuild continuous-integration csc


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 路径中没有任何内容。如果我在服务器上运行 msbuild 它运行良好。那里的某个地方有一个线索。嗯,我猜它要么是 teamcity 要么是 nant,毕竟不是 msbuild。
      【解决方案3】:

      你可以通过声明直接指出你想在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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2011-07-12
        • 2011-02-12
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        相关资源
        最近更新 更多