1

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 を確認しましたが、オーバーライドが見つかりませんでした。ソリューションをクリーンアップして再構築しましたが、問題は解決しません。ここで何が問題なのですか?

4

2 に答える 2

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 が古いバージョンを要求したため、Enterprise Library はバージョン 2.0.414.0 に対してビルドされていました。

于 2013-09-15T12:49:48.670 に答える
1

プロジェクト内の何かがまだ古い DLL を参照しています。

fuslogvw を有効にして (手順についてはhttp://msdn.microsoft.com/en-us/library/e74a18c4.aspxを参照)、ログを確認しましたか? これは通常、参照の問題をかなり迅速に取り上げます。

参照が修正できないもの (所有していない別の DLL など) であることがわかった場合は、バインディング リダイレクトの設定を検討できます。

于 2013-09-15T09:07:40.890 に答える