我正在为.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的其他任何地方。
答案 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)。
/verbosity:stupidlyhigh
运行抱歉,我的意思是/verbosity:detailed
,并希望在msbuild项目/目标文件中看到完全行失败?或者至少在运行msbuild之前从命令行确认依赖的程序集是你期望的那样?
请注意,其他依赖于MVC5 的软件包可能会从NuGet中提取其他版本,这使得它最后会被复制到bin文件夹中。您通常使用AssemblyBindingRedirect
中的[web|app].config(s)
来解决此问题。