【问题标题】:MSBuild not targeting right assembly?MSBuild 没有针对正确的程序集?
【发布时间】:2011-06-16 10:16:21
【问题描述】:

我们正在使用 CruiseControl.Net 和 MSBuild 设置新的构建服务器。经过相当多的工作后,它大部分都在工作,除了一个项目(七个项目中的一个)拒绝在 MSBuild 下构建的一个问题。这是错误:

错误 CS1061:“System.Web.UI.HtmlControls.HtmlForm”不包含“Action”的定义,并且没有扩展方法“Action”接受“System.Web.UI.HtmlControls.HtmlForm”类型的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)

所有代码在旧构建服务器上仍然可以正常编译,新构建服务器虽然不完全匹配,但配置与旧服务器类似。

我能想到这个错误的唯一原因是用于编译的 System.Web.dll 是 v1.1,而不是 v2.0,因为 Action 方法不在 v1.1 框架中.

我不确定为什么这个我们在旧版本服务器上从未见过的错误会出现在新服务器上。我什至不确定如何深入了解可能的原因。我尝试使用 /toolsversion:3.5 参数集运行 MSBuild。我已将详细级别设置为最高级别运行,然后将输出与旧的构建服务器进行比较,但没有任何东西指出原因(至少,对我来说没有什么是显而易见的)。

在此之前构建了几个项目,并且没有一个失败,即使它们都使用更新版本的框架 (3.5)。这是唯一引用 System.Web.HtmlControls 的项目。

有没有人遇到过类似的问题?任何人都可以就如何最好地尝试找出 MSBuild 问题的根源提供任何帮助/提示吗?

更新 两台服务器之间的 .sln 和 .csproj 文件是相同的。我在 .csproj 文件中注意到的一件事是 System.Web 参考没有框架要求:

<Reference Include="System.Web" />

我将尝试在此引用中添加<RequiredTargetFramework>,看看是否会有所不同。

更新 2 将 csproj 文件中的引用更新为以下内容: <Reference Include="System.Web"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference>

似乎没有用。下一步,下载 SDK,以便我可以在 System.Web 上使用 ILDASM 来查看我的框架安装是否有问题(具体来说,我的 v2.0 框架中的 system.web.dll 是否有该方法)。

更新 3 问题似乎出在 v2.0.5072 框架文件夹中的 system.web.dll 上。它确实没有在 HtmlForm 类上有 Action 方法。我不知道怎么会发生这样的事情,但我将不得不理顺这台服务器上的框架。

【问题讨论】:

  • 如果您查看有效和无效的 .csproj 或 .vbproj 文件的文本,它们代表参考的方式是否相同?是否有不同的提示路径?

标签: .net msbuild build


【解决方案1】:

这不是 MSBuild ... 它是新机器上的 2.0 框架。 system.web.dll 在两台机器上只是略有不同:

当前机器:System.Web.dll 版本 = 2.0.50727.3618 新机:System.Web.dll版本=2.0.50727.1433

我想也许这里有人错过了较新机器上的 SP。不过,我很惊讶这些内部版本号之间的类会有任何显着差异。

【讨论】:

    【解决方案2】:

    在您的项目引用下,检查对 System.Web 的引用是否指向 DLL 的 v2 版本,而不是 v1.1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多