none
Ошибка при добавлении библиотеки к проекту MVC 3 RRS feed

  • Вопрос

  • Добрый день! Никак не могу разобраться, даже поиск на стековерфлау не помог((( 

    Есть MVC 3 проект. Часть кода этого сайта была вынесена в отдельную библиотеку, обычную библиотеку классов. 

    Библиотека подписана, токенкей получен.

    В references ссылка на библиотеку добавлена. Пробовал даже добавлять пути в настройках проекта. 

    В Web.config прописал строчку:

    <add assembly="mylibrary, Version=1.0.0.0, Culture=neutral,  PublicKeyToken=77e56f025543ae25"/>

    Дело вот в чем: когда я публикую проект на IIS, то все работает. Проблемы возникают при попытке отладить, то есть просто запустить проект из студии в некотором браузере. 

    Получаю вот это:

    Невозможно загрузить файл или сборку "mylibrary" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат. 
     Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 

     Сведения об исключении: System.BadImageFormatException: Невозможно загрузить файл или сборку "mylibrary" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат.

    Ошибка источника: 
     Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений. 


    Трассировка загрузки сборки: Следующая информация может быть полезна при выяснении причин сбоя при загрузке сборки 'mylibrary'.

    === Информация о состоянии предварительной привязки ===
    Журнал: DisplayName = mylibrary
     (Partial)
    WRN: Для сборки была указана информация о частичной привязке:
    WRN: Имя сборки: mylibrary| Идентификатор домена: 2
    WRN: Частичная привязка осуществляется в том случае, если предоставлена только часть отображаемого имени сборки.
    WRN: Это может привести к загрузке редактором связей неверной сборки.
    WRN: Рекомендуется предоставить полное текстовое удостоверение для сборки,
    WRN: состоящей из простого имени, версии, культуры и маркера открытого ключа.
    WRN: Дополнительные сведения и типичные решения для данной неполадки см. в техническом описании по ссылке http://go.microsoft.com/fwlink/?LinkId=109270.
    Журнал: Appbase = file:///D:/projects/ap_projects/ap/
    Журнал: Initial PrivatePath = D:\projects\ap_projects\ap\bin
    Вызов сборки: (Unknown).
    ===
    Журнал: данная привязка начинается в контексте загрузки default.
    Журнал: используется файл конфигурации приложения: D:\projects\ap_projects\ap\web.config.
    Журнал: используется файл конфигурации главного узла: C:\Users\...\Documents\IISExpress\config\aspnet.config
    Журнал: используется файл конфигурации компьютера из C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
    Журнал: политика в данный момент не применяется к ссылке (личная, пользовательская, частичная привязка сборки или привязка по местоположению).
    Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/2f8f524c/8423de4e/mylibrary.DLL.
    Журнал: попытка загрузки нового URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/2f8f524c/8423de4e/bicycles/mylibrary.DLL.
    Журнал: попытка загрузки нового URL file:///D:/projects/ap_projects/ap/bin/mylibrary.DLL.
    Ошибка: не удалось завершить установку сборки (hr = 0x8007000b). Проверка прекращена.

    Что я делаю не так? Заранее благодарен!

    13 марта 2013 г. 15:17

Ответы

  • Возможно у вас проблема в студии или  в винде. Попробуйте переустановить студию, если не поможет и винду. Так же просканируйте машину на наличие вирусов, используя хороший антивирус, если он не установлен.
    16 марта 2013 г. 19:25
    Модератор
  • Все. Проблема решена! Была путаница с архитектурой решения. Спасибо за помощь!
    • Помечено в качестве ответа YatajgaEditor 9 апреля 2013 г. 20:12
    9 апреля 2013 г. 19:53

Все ответы

  • А у вас исходный код вашей библиотеки есть, он в проекте? Или это просто "сухая" dll без символов отладки?
    13 марта 2013 г. 18:22
    Модератор
  • Да, этот код я пишу=) Он находится в одном солюшене с проектом, к которому я его линкую. 

    Причем, потом она будет прилинкована к еще двум вэб-проектам. 

    13 марта 2013 г. 19:20
  • Прочтите данную статью до конца, посмотрите может у вас один из перечисленных факторов присутствует. Если нет, будем разбираться дальше.
    13 марта 2013 г. 19:43
    Модератор
  • Так... Отвечаю на статью по пунктам:

    1) Весь проект (солюшн) использует .NET 4

    2) Не, проект под .Net. 

    3) Сборка происходит или Release x64 или Debug x64.

    4) Нет, сборка не имеет компонентов разных версий дотнета, ибо пару недель назад ее код был скопирован из основного проекта, где все работало. 

    5) Но исключение имеет тот же номер: 0x8007000B

    6) Пишу на VS2012, Win7.


    • Изменено kotfantazer 14 марта 2013 г. 12:20
    14 марта 2013 г. 12:19
  • У меня возникли какие-то проблемы с VS2012 =) Сперва на всех cshtml страницах появилась такая ошибка:

    @model geoap.Models.partner

    /*

    Ошибка 2 Не удается обнаружить один или несколько типов, необходимых для компиляции динамического выражения. Возможно, отсутствует ссылка. d:\projects\ap_projects\ap\Views\Partner\CreatePage1.cshtml

    */

     @Html.RadioButtonFor(model => model.hot_offer_type, 0)

    /*

    Ошибка 3 Аргументы-типы для метода "System.Web.Mvc.Html.InputExtensions.RadioButtonFor<TModel,TProperty>(System.Web.Mvc.HtmlHelper<TModel>, System.Linq.Expressions.Expression<System.Func<TModel,TProperty>>, object)" не должны определяться по использованию. Попытайтесь явно определить аргументы-типы. d:\projects\ap_projects\ap\Views\Partner\CreatePage1.cshtml

    */

    Причем, эта ошибка возникла сама собой, я ничего не обновлял и не менял никаких настроек. До этого, дня два назад, все работало. 

    А только что студия упала вот с такой информацией (упала, когда я полез в настройки в раздел Текстовый редактор->IntelliSense):

     Сигнатура проблемы:
      Имя события проблемы: CLR20r3
      Сигнатура проблемы 01: devenv.exe
      Сигнатура проблемы 02: 11.0.51106.1
      Сигнатура проблемы 03: 5098c6d7
      Сигнатура проблемы 04: System.Core
      Сигнатура проблемы 05: 4.0.30319.17929
      Сигнатура проблемы 06: 4ffa5c69
      Сигнатура проблемы 07: 1341
      Сигнатура проблемы 08: 10a
      Сигнатура проблемы 09: System.TimeoutException
      Версия ОС: 6.1.7601.2.1.0.256.1
      Код языка: 1049
      Дополнительные сведения 1: 0a9e
      Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
      Дополнительные сведения 3: 0a9e
      Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789

    Буду благодарен за помощь! 

    16 марта 2013 г. 8:34
  • Возможно у вас проблема в студии или  в винде. Попробуйте переустановить студию, если не поможет и винду. Так же просканируйте машину на наличие вирусов, используя хороший антивирус, если он не установлен.
    16 марта 2013 г. 19:25
    Модератор
  • В дополнение к ответу выше - если устанавливали в Visual Studio какие-либо дополнения - попробуйте их отключить. Проверьте на чистой Visual Studio, возможно даже лучше на новом проекте.

    Для связи [mail]

    19 марта 2013 г. 9:36
    Модератор
  • В проекте стоит Entity Framework 5.0.0, jQuery, Modernizr.2.6.2. 

    NuGet последней версии. Для студии установлено Обновление 1.

    Проект до этого год разрабатывался на 2010 студии. Там проблем не было. 

    Первое падение 2012 студии было при открытии этого проекта. Студия его конвертировала, но при движении мышки (или щелчке) над обозревателем решения, падала.  Потом, после установки Обновления 1, проект открылся и все заработало. 

    Вот теперь возникла описанная выше проблема. Буду смотреть и думать, может и найду причину неисправности.

    И еще... Win7 и студия работают в виртуальной машине Proxmox.
    • Изменено kotfantazer 19 марта 2013 г. 16:08
    19 марта 2013 г. 16:05
  • "И еще... Win7 и студия работают в виртуальной машине Proxmox." - очень может быть, что из-за этого.
    19 марта 2013 г. 18:01
    Модератор
  • Решил протестировать на обычной машине, и столкнулся с неразрешимыми проблемами. 

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

    Как это решается? У меня есть только один вариант, может вы мне подскажете что-то более верное. 

    Я могу перенести код библиотеки в отдельный контроль версий, чтобы ребята из команды ее не собирали, а поставлять им эту библиотеку в виде бинарной сборки. Для release и debug. Не уверен, что это верное решение. 



    • Изменено kotfantazer 26 марта 2013 г. 8:09
    26 марта 2013 г. 8:08
  • У меня возникает подозрение, что я просто как-то не так сделал библиотеку или как-то не так ее подключаю. 
    27 марта 2013 г. 14:26
  • "что не может импортировать ключ, которым библиотека подписана" - о каком ключе идёт речь? Вы хотите сделать сборку публичной подписав её и поместив в GAC?
    27 марта 2013 г. 15:07
    Модератор
  • Нет, сборка будет использоваться только внутри команды. Дальше нашего IIS она не убежит. И лежать она будет в папке bin директории сайта. 

    Насколько я понимаю, для подключения библиотеки нужно в Web.config прописал строчку:

    <add assembly="mylibrary, Version=1.0.0.0, Culture=neutral,  PublicKeyToken=77e56f025543ae25"/>

    Для получения PublicKeyToken библиотеку нужно подписать на вкладке "Подписывание" в настройках проекта. Или я не прав? 

    Вероятно, я нашел в сети не то руководство по созданию библиотеки классов... 


    • Изменено kotfantazer 27 марта 2013 г. 16:17
    27 марта 2013 г. 16:17
  • На обычной машине собрать проект удалось. Я отключил подписывание. С этим теперь все замечательно. 

    Но осталась проблема: "Невозможно загрузить файл или сборку  или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат." - в точности, как описано выше. Сборка имеет x64 формат, как и требуется. Из-за чего еще могут возникать такие проблемы? 

    Спасибо за помощь! 


    • Изменено kotfantazer 27 марта 2013 г. 16:31
    27 марта 2013 г. 16:31
  • А где запускается программа, в IIS? Вы точно уверены, что она 64 битная, возможно всё наоборот, попробуйте изменить

    27 марта 2013 г. 18:24
    Модератор
  • Нет, в ИИС проблем с запуском нет. Там она работает. 

    Проблемы возникают при запуске приложения для отладки. Тогда возникает вышеописанная проблема. 

    27 марта 2013 г. 19:57
  • Я убедился. При сборке 32 выдается предупреждение, что не соответствует данной платформе. При этом в ИИС все работает, а вот в любом отладочном вэб-сервере не хочет. Я уж и пути все поменял, чтобы проект собирался в одну папку bin/ без вложенных папок. Эффекта не дало=( Аналогично, не работает any cpu. Проблема сохраняется при работе на обычной машине, а не на виртуальной. 
    2 апреля 2013 г. 11:39
  • Все. Проблема решена! Была путаница с архитектурой решения. Спасибо за помощь!
    • Помечено в качестве ответа YatajgaEditor 9 апреля 2013 г. 20:12
    9 апреля 2013 г. 19:53