我有一个使用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并找不到任何覆盖。我甚至清理了解决方案并重建了它,但问题仍然存在。这可能有什么问题?
答案 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),则可以查看设置绑定重定向。