【问题标题】:MSBuild 4 fails to build VS2008 csproj due to 1 compiler warning由于 1 个编译器警告,MSBuild 4 无法构建 VS2008 csproj
【发布时间】:2011-02-11 07:32:05
【问题描述】:

我们有一个针对 .NET 3.5 的 VS2008 CS DLL 项目。使用 MSBuild 3.5 时,它可以在我们的 CI 服务器上成功构建。

当 CI 升级到使用 MSBuild 4.0 时,由于 1 条警告消息,同一项目无法构建:

c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1418,9): 警告 MSB3283:找不到包装器 类型库“ADODB”的程序集。

MSBuild 3.5 不会出现警告,我很惊讶它会导致 Build FAILED。我们没有将项目设置为将警告视为错误。

我们所有其他项目都使用任一版本的 MSBuild 成功构建。

【问题讨论】:

  • 您为什么将 v3.5 Microsoft.Common.targets 与 MSBuild 4.0 一起使用?
  • 我相信这是由于 .csproj 文件中的版本 -- Project ToolsVersion="3.5"

标签: c# msbuild .net-4.0 build-automation compiler-warnings


【解决方案1】:

尝试删除 msbuild(和 csproj)文件中的任何硬连线工具版本,或将它们设置为 ToolsVersion="4.0"。

阅读:http://msdn.microsoft.com/en-us/library/bb383796.aspx 以更好地理解属性的重要性。 由于您希望以 3.5 为目标,因此请通过检查您的 csproj 中的 TargetFrameworkVersion 来确保正确设置了目标框架版本。

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

如果您将 ToolsVersion 设置为 4.0,任何想要构建项目的机器都将依赖于 4.0 框架(具有 4.0 msbuild),即使您的目标是 3.5。

如果您的目标是 3.5,并且您的项目是 VS2008,则无需使用 msbuild 4.0 而不是 msbuild 3.5(它们可以和平共处)。仅使用 3.5 msbuild 将是更简单的解决方案。

【讨论】:

  • 这听起来很合理,我阅读了您提供的链接。我在构建文件和 csproj 文件中进行了更改。但是错误还是一样的,只是现在.NET Framework v4.0.30319已经出现了。虽然我们的目标是 3.5,并且项目目前是 VS2008(即将升级——这应该可以解决这个问题),但对于 CruiseControl.NET,您可以在 ccnet.config 文件中设置 MSBuild 的版本,即所有项目的全局版本。由于我们有 VS2010 项目在 CC.NET 下运行,因此需要 v4.0。
  • 是否有可能让您的主要 CI 构建脚本产生一个 msbuild 3.5 并通过产生的 msbuild 构建 2008/3.5 项目?生成可以通过“exec”msbuild 任务完成。
  • 这听起来是一个值得尝试的想法。会回来报告的。
【解决方案2】:

这是一个 ClickOnce 问题。从列表中删除该依赖项。

顺便说一句,这个错误也存在于 VS2008 中,但似乎没有为你触发。

【讨论】:

  • 我们没有使用 ClickOnce,所以我不明白这怎么可能是 ClickOnce 问题?我在寻找什么依赖项?
  • @David White:ADODB,IIRC 在我的情况下它包含在 Report Viewer 中,但其他东西可能“需要”它。 ClickOnce 为我们犯了这个错误,但问题可能更早。确保项目文件中没有 ClickOnce 设置(或仅在项目文件文本中搜索 ADODB 参考)。
【解决方案3】:

错误消息并没有说明全部情况。我们开发机器上的 ADODB 程序集加载到 GAC 中。在 CI 构建机器上情况并非如此。

对 ADODB 的引用仅由 C# 项目中的 TLBIMP 预构建任务放入我们的 C# 项目中(以及对 MSXML 和 VBA dll 的引用)。后面的 DLL 包含在我们的源代码存储库中,因此可以在 CI 构建过程中找到。 ADODB 不是。但是,我们还发现我们可以安全地从 C# 项目中删除所有添加的引用,包括对 ADODB.DLL 的引用。

这解决了问题。 (感谢您的建议——他们让我一直在思考,直到我们到达那里。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多