web-dev-qa-db-ja.com

タイプ「IUnityContainer」は、参照されていないアセンブリで定義されています

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>

しかし、それはうまくいかないようです。

助言がありますか?

22
Ken Smith

まあ、これはおそらく今ではおそらく不要ですが、問題は明らかにUnity 3.5.1406と関係があり、プルダウンされてUnity 4.0に置き換えられたようです。また、数年間更新されていない、明らかにサポートされていない古いUnity.WebApiライブラリを置き換え、明らかにサポートされている新しいUnity.AspNet.WebApiライブラリに置き換えました。 「Unity WebApi」を検索すると、リストの上部にある古いライブラリが返され、新しいライブラリが最初のページの下部に隠れてしまうため、NuGetでは少し注意が必要です。

そのすべての間で、私が見つけた問題なしで、それは今機能します。

12
Ken Smith

これは、Unity 3.5.1から4.0.1にアップグレードする方法に関する、より更新された回答かもしれません。

タイプ「IUnityContainer」は、参照されていないアセンブリで定義されています。アセンブリ「Microsoft.Practices.Unity、Version = 3.5.0.0、Culture = neutral、PublicKeyToken = 31bf3856ad364e35」への参照を追加する必要があります。

パッケージマネージャーコンソールまたはNuGetを介して:

  • Unity.Mvc4をアンインストールします
  • Unity.WebAPIをアンインストールします
  • 更新パッケージUnity
  • Install-Package Unity.Mvc(注:今回はパッケージ名に数字がありません)
  • インストールパッケージUnity.AspNet.WebApi

コード:

  • Bootstrapper.csからApp_Start/UnityConfig.csにcontainer.RegisterTypesをコピーしました
  • プロジェクトからBootstrapper.csを除外する
  • ビルドして実行
23
Robert Koch

グローバルupdate-packageを実行しているときにこれをヒットしました。

install-package Unity -version 3.5.1404を介してUnityバージョンをロールバックすると解決しました。

7
user326608

Unityだけでなく、Unity.AspNet.WebApiバージョン3.5.1406にも必ずアップグレードする必要があります。これを行うと、エラーはなくなります。

6

今朝も同じ問題が発生し、Unity.WebAPIとともにUnity v4.0をアンインストールすることになりました。 Unityのv3.5.1405-preleaseをインストールしてから、Unity.WebAPIを再インストールしました。

3
JamesIngold

アセンブリリダイレクトが機能しない理由は、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

3

2013年4月にUnity 3であったUnity Containerの最新リリースを追跡し、それを参考文献に追加しました。 Googleドライブ上のPDF に行ったすべての手順の詳細へのリンクがあります。

2
Radu Bartan