MSBuild没有针对正确的汇编?

时间:2011-06-16 10:16:22

标签: .net msbuild build

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

  

错误CS1061:'System.Web.UI.HtmlControls.HtmlForm'不包含'Action'的定义,也没有扩展方法'Action'接受'System.Web.UI.HtmlControls.HtmlForm'类型的第一个参数可以找到(你错过了使用指令或程序集引用吗?)

旧构建服务器上的所有代码仍在编译中,而新构建服务器虽然不是完全匹配,但配置与旧版本类似。

我能解决这个错误的唯一原因是用于编译的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方法。我不知道这样的事情会发生什么,但我将不得不理顺这台服务器上的框架。

2 个答案:

答案 0 :(得分:1)

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

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

我想也许有人在新机器上错过了SP。令我感到惊讶的是,这些构建数字之间的类会有任何显着差异。

答案 1 :(得分:0)

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