1. ホーム
  2. .net

[解決済み] アセンブリから型を読み込めなかったエラー

2022-01-30 08:38:51

質問

Castle WindsorのFluent Interfaceを学ぶために、次のような簡単なテストを書きました。

using NUnit.Framework;
using Castle.Windsor;
using System.Collections;
using Castle.MicroKernel.Registration;

namespace WindsorSample {
    public class MyComponent : IMyComponent {
        public MyComponent(int start_at) {
            this.Value = start_at;
        }
        public int Value { get; private set; }
    } 
    public interface IMyComponent {
        int Value { get; }
    }

    [TestFixture]
    public class ConcreteImplFixture {
        [Test]
        public void ResolvingConcreteImplShouldInitialiseValue() {
            IWindsorContainer container = new WindsorContainer();
            container.Register(Component.For<IMyComponent>().ImplementedBy<MyComponent>().Parameters(Parameter.ForKey("start_at").Eq("1")));
            IMyComponent resolvedComp = container.Resolve<IMyComponent>();
            Assert.AreEqual(resolvedComp.Value, 1); 
        }
    }
}

TestDriven.NETでテストを実行すると、以下のエラーが発生します。

System.TypeLoadException : Could not load type 'Castle.MicroKernel.Registration.IRegistration' from assembly 'Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc'.
at WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue()

NUnitのGUIでテストを実行すると、次のようになります。

WindsorSample.ConcreteImplFixture.ResolvingConcreteImplShouldInitialiseValue:
System.IO.FileNotFoundException : Could not load file or assembly 'Castle.Windsor, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The system cannot find the file specified.

Reflectorで参照しているアセンブリを開くと、その情報が表示されます。

Castle.MicroKernel, Version=1.0.3.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc

を確実に含んでいること。 城.MicroKernel.Registration.IRegistration

何が起こっているのでしょうか?

なお、バイナリの取得は Castleの最新ビルド しかし、私はnantを使ったことがないので、わざわざソースから再コンパイルせず、binディレクトリにあるファイルだけを取り込みました。 また、私のプロジェクトは問題なくコンパイルできることも指摘しておきます。

解決方法は?

グローバルアセンブリキャッシュ(GAC)、または読み込まれていると思われるアセンブリを上書きしている可能性がある場所にアセンブリがありませんか? これは通常、不正なアセンブリが読み込まれた結果です。私の場合は、通常GACにあるものがbin/Debugにあるバージョンを上書きしていることを意味します。