无法从Unity 2.0迁移到Unity 2.1.505.0

时间:2013-09-15 08:46:15

标签: asp.net .net unity-container

我有一个使用Unity 2.0编写的应用程序,我正在尝试迁移到版本2.1.505.0。我将项目中的引用更改为指向与较新版本对应的DLL。当我构建解决方案时,它会很好。但是,当我尝试运行该应用程序时,它给了我一个FileNotfoundException:

Stack Trace: 

[FileLoadException: Could not load file or assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   InsightsService.WebApi.WebApiApplication.Application_Start() in E:\tfs\DisplayApps\Services\InsightsBps\Dev\source\InsightsService.WebApi\Global.asax.cs:30

[HttpException (0x80004005): Could not load file or assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12863325
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): Could not load file or assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12880068
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12721257

我检查了web.config并找不到任何覆盖。我甚至清理了解决方案并重建了它,但问题仍然存在。这可能有什么问题?

2 个答案:

答案 0 :(得分:4)

您可以使用AssemblyBinding确保在请求旧版本时使用新版本的Unity。在您的配置文件中,它应该可以正常工作

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Practices.Unity"
                        publicKeyToken="31bf3856ad364e35"
                       />
      <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->
      <bindingRedirect oldVersion="2.0.414.0"
                       newVersion="2.1.505.0"/>
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Practices.Unity.Interception"
                        publicKeyToken="31bf3856ad364e35"
                       />
      <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->
      <bindingRedirect oldVersion="2.0.414.0"
                       newVersion="2.1.505.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

当我更新到新的Unity版本时,我遇到了同样的问题,但我使用的企业库请求了旧版本,因为Enterprise Library是针对2.0.414.0版本构建的。

答案 1 :(得分:1)

项目中的

Something 仍在引用旧的DLL。

您是否尝试过打开fuslogvw(请参阅http://msdn.microsoft.com/en-us/library/e74a18c4.aspx获取说明)并查看它的日志记录?这通常很快就会引起参考问题。

如果您发现引用是无法修复的(例如,您不拥有的另一个DLL),则可以查看设置绑定重定向。