.Net Build服务器测试失败,因为无法找到依赖关系

时间:2017-01-26 20:32:17

标签: asp.net asp.net-mvc jenkins msbuild msbuild-4.0

我正在为.Net应用程序构建Jenkins构建服务器。它基于ASP.Net MVC 5,并通过NUnit进行测试。

我的一个测试项目构建服务器上的所有测试的错误。

  

1)SetUp错误:project.Test.Area.Test_Name

     

SetUp:System.IO.FileLoadException:无法加载文件或程序集&System; Web.Mvc,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

     

在project.Test..Area.SetUp()

我的所有项目和测试项目都引用System.Web.Mvc 5.2.3.0,测试项目甚至不使用System.Web.Mvc命名空间。 System.Web.Mvc命名空间设置为复制本地,并包含在NuGet包管理器中。

我假设它可能是另一个依赖项,它本身依赖于MVC 5.1.0.0,但由于我的项目不依赖于该版本,Jenkins没有理由在我的本地系统已经拥有它时获取它来自其他项目。

各种app.config和web.config文件也都为MVC指定了5.2.3。

有没有办法找出导致问题的依赖项,或者我应该找到一种在构建服务器上安装MVC 5.1.0.0的方法?

编辑:我在Mvc 5.1.2

中找到了对此转换的引用

SRC \包\ Microsoft.AspNet.Mvc.5.1.2 \内容\ Web.config.install.xdt:

28        <dependentAssembly xdt:Transform="Insert">
29          <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"  />
30:         <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
31        </dependentAssembly>
32      </assemblyBinding>

看起来那个变换应该是将旧的5.1.0版本转换为5.1.2.0并且还没有正确更新吗?

编辑2 :不,改变不影响任何事情,我无法找到项目中引用5.1.0的其他任何地方。

1 个答案:

答案 0 :(得分:1)

无赖。一个人讨厌这种事情。我之前尝试过的事情:

  • 是否在构建计算机上安装了Visual Studio,因此MVC 5安装在一些愚蠢的地方,如C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \或C:\ Program Files \ MSBuild \ Microsoft或C :\ Program Files \ Microsoft.NET或特别是:

    C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET Web Stack 5

msbuild可能会找到它吗?或

gacutil -l | grep Mvc

(这让我感到惊讶:我发现了MVC 4)。

  • 您可以从构建计算机上的命令行手动运行msbuild吗?如果是这样,那么您可以使用/verbosity:stupidlyhigh运行抱歉,我的意思是/verbosity:detailed,并希望在msbuild项目/目标文件中看到完全行失败?

或者至少在运行msbuild之前从命令行确认依赖的程序集是你期望的那样?

  • 或者深入了解构建计算机上packages文件夹的实际内容,以确认Microsoft.AspNet.Mvc目录是否包含您期望的版本?

请注意,其他依赖于MVC5 的软件包可能会从NuGet中提取其他版本,这使得它最后会被复制到bin文件夹中。您通常使用AssemblyBindingRedirect中的[web|app].config(s)来解决此问题。

  • 有人在6个月前检查过任何dll或bin目录或NuGet包目录到TFS吗?在这种情况下,dll将全部以只读方式签出,这意味着它们可能无法通过构建或Nuget还原进行正确覆盖/更新。