Не удалось загрузить файл или сборку 'StructureMap, версия = 2.5.3.0 - PullRequest
4 голосов
/ 10 июля 2011

Я работаю над проектом и решил использовать StructureMap в качестве IoC, но всякий раз, когда мы пытаемся загрузить проект (кстати, MVC 3), мы получаем эту ошибку:

Couldне загружать файл или сборку 'StructureMap, версия = 2.5.3.0, культура = нейтральная, PublicKeyToken = e60ad81abae3c223' или одна из ее зависимостей.Системе не удается найти указанный файл.

В Global.asax у меня есть этот код для инициализации StructureMap

ObjectFactory.Initialize(
    x =>
    {
        x.ForRequestedType<IUnitOfWorkFactory>()
            .TheDefaultIsConcreteType<EFUnitOfWorkFactory>()
            .CacheBy(InstanceScope.HttpContext);

        x.ForRequestedType(typeof(IRepository<>))
            .CacheBy(InstanceScope.HttpContext)
            .TheDefaultIsConcreteType(typeof(GenericRepository<>));

    });

и иметь StructureMap в папке lib, которую я добавил в основной MVCприложение.Даже при удалении всех ссылок, которые я могу найти, я все равно получаю эту ошибку.

Для записи это папка lib в структуре MVC3

enter image description here

И я добавляю ссылку на StructureMap.dll (которая, как ни странно, является версией 2.6.1, но ошибка говорит о версии 2.5.3.0

). Забыл упомянуть, что у меня есть фабрика контроллеров для StructueMap.Вот код для фабрики контроллеров:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            return (controllerType == null) ? null : ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }
    }
}

А вот как я использую его в Global.asax.cs

ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());

РЕДАКТИРОВАТЬ: Я установил StructureMapс NuGet и по-прежнему получают ту же ошибку, хотя NuGet установил другую версию (2.6 вместо 2.5), но все равно получает ошибку 2.5. Поэтому я собираюсь предложить вознаграждение любому, кто может помочь мне решить эту проблему

РЕДАКТИРОВАНИЕ 2 Я удалил, а затем переустановил Visual Studio и Entity Framework, когда я пытаюсь добавить POCO, я получаю эту ошибку enter image description here

Кто-нибудь знает, как решить эту проблему?

РЕДАКТИРОВАТЬ 3: Я удалил CTP, используя технику, расположенную здесь , я удалил CTP и версию 4.1, затем следовал указанным инструкциям и предоставленной ссылке, а когда я следовал инструкциям, я получаю это сообщение об ошибке enter image description here.Это достигло критической массы, и мой работодатель очень расстраивается из-за меня, потому что я не могу решить сообщение об ошибке выше.Кто-нибудь получил какие-нибудь ответы для меня?

РЕДАКТИРОВАТЬ 4: Работает локально с IIS 7.5 Express, теперь нужно, чтобы он работал на живом сервере.Забавно то, что я использую StructureMap 2.6.2, но ошибка (по какой-то причине) ищет 2.5.3.Я искал и искал, пытаясь найти ссылку на StructureMap 2.5.3.

РЕДАКТИРОВАТЬ 5: Работает идеально локально, но та же ошибка на живом сайте.Я работаю удаленно, и мы используем SVN для контроля исходного кода, а другой разработчик работает удаленно, но мой код никогда не поступает в производство, и, конечно, у меня нет доступа к живому сайту

Ответы [ 5 ]

3 голосов
/ 16 июля 2011

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

Трудно понять, какие из ваших ссылок зависят от StructureMap, особенно от старой версии. Можете ли вы обновить свой вопрос, чтобы включить скриншот ваших ссылок (а не только папку lib)? Или, что еще лучше, часть файла .csproj, в которой отображаются ссылки и, если им требуется конкретная версия? Я бы безжалостно прочесывал этот раздел в любых ссылочных проектах.

И, в соответствии с тем, что сказали здесь другие, я бы удалил структуру lib из вашего решения и по возможности установил пакеты через NuGet.

ОБНОВЛЕНИЕ: Если вы не можете отследить ссылку, указывающую на жесткую версию StructureMap, попробуйте выполнить перенаправление версии сборки, описанное здесь: http://msdn.microsoft.com/en-us/library/7wd6ex19(v=VS.100).aspx

2 голосов
/ 12 июля 2011

Звучит так, как будто ваш проект компилируется в среде профиля клиента. Проверьте свойства проекта в раскрывающемся списке Target Framework, затем спросите MS, почему они сделали Client Profile по умолчанию в vs2010:)

1 голос
/ 13 июля 2011

DLL-файлы попадают в вашу папку вывода сборки?Номер версии может быть красная сельдь.Например, DLL-библиотека AutoMock могла быть построена против другой версии, но если она не имеет строгого имени, все будет работать просто отлично, если она не сможет найти StructureMap.DLL вообще .В этот момент он будет жаловаться, и для полноты, он упомянет идеальный номер версии, который он ожидает увидеть.

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

Поэтому убедитесь, что:

EITHER один экземплярDLL в виде файла решения в одном проекте помечается как «содержимое» или «копия в выходной каталог»

ИЛИ ваши ссылки помечены как «копия локальная»

НО НЕ и то, и другое.

0 голосов
/ 21 июля 2011

Перейдите в обозреватель решений, щелкните правой кнопкой мыши свое решение, выберите Configuration Manager и убедитесь, что все проекты создаются.

0 голосов
/ 19 июля 2011

Как упоминал @Darin, я думаю, что у вас есть другая DLL, ссылающаяся на старую версию.

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

...