Не удалось загрузить тип из-за ошибки сборки - PullRequest
96 голосов
/ 24 сентября 2008

Я написал следующий простой тест, пытаясь изучить свободный интерфейс Касла Виндзора:

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, я получаю:

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

и что он определенно содержит Castle.MicroKernel.Registration.IRegistration

Что может происходить?

Я должен отметить, что двоичные файлы взяты из последней сборки Castle , хотя я никогда не работал с nant, поэтому я не стал перекомпилировать из исходного кода и просто взял файлы в каталоге bin , Я также должен отметить, что мой проект компилируется без проблем.

Ответы [ 24 ]

1 голос
/ 23 мая 2012

Это обычно происходит, когда у вас есть одна версия сборки, развернутая в GAC, но она не была обновлена ​​новыми классами, которые вы, возможно, добавили в сборку в вашей IDE. Поэтому убедитесь, что сборка в GAC обновлена ​​с учетом изменений, которые вы могли внести в свой проект.

например. если у вас есть библиотека классов общего пользования, и в этой библиотеке классов у вас есть тип Common.ClassA и разверните его в GAC со строгим именем. Вы приходите позже и добавляете другой тип с именем Common.ClassB и запускаете свой код в IDE без предварительного развертывания изменений, внесенных в GAC Common, с недавно добавленным типом Common.ClassB.

1 голос
/ 20 мая 2015

Добавление вашей DLL в GAC (глобальный кеш сборок)

Командная строка Visual Studio => Запуск от имени администратора

gacutil / i "путь к файлу dll"

Вы можете увидеть добавленную сборку C: \ Windows \ system32 \

Это также решит проблему отсутствия DLL или «Не удалось загрузить файл или сборку» в задаче сценария служб SSIS

1 голос
/ 09 марта 2015

Я получил ту же ошибку после обновления указанной DLL в исполняемом проекте на рабочем столе. Проблема была в том, что упомянутые здесь люди связывали старую ссылку и ее легко исправить, но здесь она не упоминалась, поэтому я подумал, что это может сэкономить время других людей.

В любом случае, я обновил dll A и получил ошибку от другой dll, на которую ссылаются, давайте назовем его здесь B, где dll A имеет ссылку на dll B.

Обновление dll B исправило проблему.

0 голосов
/ 03 апреля 2015

Я только что решил эту проблему, запустив команду iisreset из командной строки ... Всегда первое, что я делаю, когда получаю такие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...