【发布时间】:2017-01-26 20:32:16
【问题描述】:
我正在为 .Net 应用程序构建 Jenkins 构建服务器。它基于 ASP.Net MVC 5,并通过 NUnit 进行测试。
我的一个测试项目在构建服务器上的所有测试都出错。
1) 设置错误: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\packages\Microsoft.AspNet.Mvc.5.1.2\Content\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 的其他任何地方。
【问题讨论】:
-
您是否查看了构建服务器并确保 System.Web.Mvc.dll 在运行单元测试时位于正确的位置?
-
构建服务器正确获取 System.Web.Mvc 5.2.3 和显然是 5.1.2 并将它们设置在 src\ 目录旁边的它自己的 lib\ 目录中。但是,这些是服务器上仅有的两个版本。似乎没有什么明确告诉 NuGet 安装 5.1.0,但似乎有些东西想要使用它。 5.2.3 也被复制到每个单独的项目文件夹中。
标签: asp.net asp.net-mvc jenkins msbuild msbuild-4.0