Не удалось загрузить тип из-за ошибки сборки - 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 ]

118 голосов
/ 24 апреля 2009

Если у вас есть один проект, ссылающийся на другой проект (например, тип «Приложение Windows», ссылающийся на «Библиотеку классов»), и оба имеют одинаковое имя сборки, вы получите эту ошибку. Вы можете строго назвать имя проекта, на который указывает ссылка, или (что еще лучше) переименовать сборку проекта, на который имеется ссылка (на вкладке «Приложение» свойств проекта в VS).

93 голосов
/ 24 сентября 2008

Является ли сборка в глобальном кэше сборок (GAC) или в каком-либо другом месте, где, по вашему мнению, загружается сборка? Обычно это результат загрузки неправильной сборки, для меня это означает, что у меня обычно есть что-то в GAC, переопределяющее версию, которую я имею в bin / Debug.

16 голосов
/ 28 марта 2010

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

В итоге у меня была старая ссылка на класс (HttpHandler) в web.config, который больше не использовался (и больше не был действительной ссылкой). По какой-то причине он был проигнорирован во время работы в Studio (или, может быть, у меня этот класс все еще доступен в моей настройке dev?), И поэтому я получил эту ошибку только после попытки развертывания в IIS. Я искал имя сборки в web.config, удалил ссылку на неиспользуемый обработчик, затем эта ошибка ушла, и все отлично работает. Надеюсь, это поможет кому-то еще.

10 голосов
/ 11 мая 2014

У меня была такая же проблема, и для меня это не имело никакого отношения к пространству имен или именам проектов.

Но, как намекнули несколько пользователей, это связано со старой сборкой, на которую все еще ссылаются.

Рекомендую удалить все «bin» / бинарные папки всех проектов и пересобрать все решение. Это вымывало любые потенциально устаревшие сборки и после этого MEF экспортировал все мои плагины без проблем.

8 голосов
/ 27 октября 2011

Я получал эту ошибку, и ничего не нашел в StackOverflow или где-либо еще, чтобы решить ее, но ответ bmoeskau на этот вопрос указал мне верное направление для исправления, которое еще не упоминалось в качестве ответа. Мой ответ не имеет прямого отношения к исходному вопросу, но я публикую его здесь, исходя из предположения, что кто-то, имеющий эту проблему, найдет путь здесь через поиск в Google или что-то подобное (например, я через месяц, когда это снова кусает меня , arg!).

Моя сборка находится в GAC, поэтому теоретически доступна только одна версия сборки. За исключением IIS тщательно кэширует старую версию и выдает мне эту ошибку. Я только что изменил, перестроил и переустановил сборку в GAC. Одним из возможных решений является использование диспетчера задач для уничтожения w3wp.exe . Это заставляет IIS перечитать сборку из GAC: проблема решена.

3 голосов
/ 24 сентября 2008

Версия = 1.0.3.0 обозначает Castle RC3, однако свободный интерфейс был разработан через несколько месяцев после выпуска RC3. Таким образом, похоже, у вас есть проблемы с версиями. Может быть, у вас есть зарегистрированный в GAC Castle RC3, и он использует его ...

3 голосов
/ 07 декабря 2014

Если эта ошибка вызвана изменением пространства имен, убедитесь, что папка этого проекта переименована в то же имя, и закройте VS.NET Отредактируйте проект, который имеет проблему с Блокнотом и замените там узлы

"RootNamespace> New_Name_Of_Folder_Of_Your_Project_Namespace" RootNamespace> "AssemblyName> New_Name_Of_Folder_Of_Your_Project_Namespace" AssemblyName>

3 голосов
/ 21 апреля 2016

Удаление моего файла .pdb для DLL решило эту проблему для меня. Я предполагаю, что это как-то связано с тем, что DLL была создана с использованием ILMerge.

3 голосов
/ 21 апреля 2016

Когда я сталкиваюсь с такой проблемой, я нахожу инструмент FUSLOGVW очень полезным. Он проверяет информацию о привязке сборки и регистрирует ее для вас. Иногда библиотеки отсутствуют, иногда в GAC загружаются разные версии. Иногда платформа библиотек, на которые ссылаются, вызывает проблемы. Этот инструмент позволяет понять, как разрешаются привязки зависимостей, и это действительно может помочь вам исследовать / отладить вашу проблему.

Программа просмотра журнала Fusion / fuslogvw / Программа просмотра журнала привязки сборки. Проверить больше / скачать здесь: http://msdn.microsoft.com/en-us/library/e74a18c4.aspx.

3 голосов
/ 08 мая 2009

Время от времени я получаю это, и всегда было плохо иметь сборку в GAC

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