ASP.NET MVC/WebApiプロジェクトをMicrosoft.Practices.Unity 3.5.1404から3.5.1406にアップグレードしました(nuget経由、リリース直後)。その後、このコンパイルエラーが発生します。
エラーCS0012タイプ「IUnityContainer」は、参照されていないアセンブリで定義されています。アセンブリ「Microsoft.Practices.Unity、Version = 3.0.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」への参照を追加する必要があります。
次のような行で:
GlobalConfiguration.Configuration.DependencyResolver =
new Unity.WebApi.UnityDependencyResolver(container);
もちろん、3.0.0.0ではなく、3.5.1.0を参照しています。したがって、私の仮定はUnity.WebApi
アセンブリは、以前のバージョンのMicrosoft.Practices.Unity
アセンブリ。理論的には、次のようにアセンブリリダイレクトで修正する必要があります。
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.1.0" newVersion="3.5.1.0" />
</dependentAssembly>
しかし、それはうまくいかないようです。
助言がありますか?
まあ、これはおそらく今ではおそらく不要ですが、問題は明らかにUnity 3.5.1406と関係があり、プルダウンされてUnity 4.0に置き換えられたようです。また、数年間更新されていない、明らかにサポートされていない古いUnity.WebApiライブラリを置き換え、明らかにサポートされている新しいUnity.AspNet.WebApiライブラリに置き換えました。 「Unity WebApi」を検索すると、リストの上部にある古いライブラリが返され、新しいライブラリが最初のページの下部に隠れてしまうため、NuGetでは少し注意が必要です。
そのすべての間で、私が見つけた問題なしで、それは今機能します。
これは、Unity 3.5.1から4.0.1にアップグレードする方法に関する、より更新された回答かもしれません。
タイプ「IUnityContainer」は、参照されていないアセンブリで定義されています。アセンブリ「Microsoft.Practices.Unity、Version = 3.5.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」への参照を追加する必要があります。
パッケージマネージャーコンソールまたはNuGetを介して:
コード:
グローバルupdate-package
を実行しているときにこれをヒットしました。
install-package Unity -version 3.5.1404
を介してUnityバージョンをロールバックすると解決しました。
Unityだけでなく、Unity.AspNet.WebApiバージョン3.5.1406にも必ずアップグレードする必要があります。これを行うと、エラーはなくなります。
今朝も同じ問題が発生し、Unity.WebAPIとともにUnity v4.0をアンインストールすることになりました。 Unityのv3.5.1405-preleaseをインストールしてから、Unity.WebAPIを再インストールしました。
アセンブリリダイレクトが機能しない理由は、Microsoft.Practices.Unity PublicKeyTokenの変更である可能性があります。 Unity.3.5.1404.0とUnity.4.0.0の間で、PublicKeyTokenが31bf3856ad364e35からに変わったことを読みました6d32ff45e0ccc69f。 3.5.1406ではすでに変更されているのでしょうか?参照: https://github.com/unitycontainer/unity/issues/15
2013年4月にUnity 3であったUnity Container
の最新リリースを追跡し、それを参考文献に追加しました。 Googleドライブ上のPDF に行ったすべての手順の詳細へのリンクがあります。