2012-06-21 2 views
3

Я испытываю тот же вопрос, сообщил здесь: "Bad binary signature" in ASP.NET MVC application«Bad бинарная сигнатура» в приложении ASP.NET MVC

Сайт ASP.Net MVC отлично работает на локальном компьютере, но при развертывании с использованием комбинации aspnet_compiler , aspnet_merge и MSDeploy, загружая любую страницу не удастся со следующей ошибкой:

System.BadImageFormatException Bad binary signature. (Exception from HRESULT: 0x80131192)

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

Моя проблема заключается в том, что использование правильной версии aspnet_merge, похоже, не устраняет проблему.

Веб-приложение предназначено для использования .Net 4.0 64-бит. Путь aspnet_merge используется: "C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ aspnet_merge.exe"

[EDIT]

Местный DEV является:

  • VS2010 SP1
  • Кассини
  • VS11 Бета и .Net 4.5 установлены

Пути сборки:

  • C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
  • C: \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \
+0

Поиск работы на локальном компьютере (Cassini, IIS 7.5, IIS Express?) Является ли ваша локальная машина IIS 64-разрядной? У вас есть .Net 4.5, установленный на вашей dev-машине? – RickAndMSFT

+0

Я добавил дополнительную информацию в описание проблемы –

ответ

2

У меня также возникла аналогичная проблема с использованием проекта веб-развертывания, чтобы предварительно скомпилировать проект веб-сайта ASP.NET в VS2010 (.NET 4.0).

Все работало отлично, пока я не установил VS2012 (который устанавливает .NET 4.5 - я полагаю, что связано), который начал давать мне:

System.BadImageFormatException: Bad binary signature. (Exception from HRESULT: 0x80131192)

После некоторых отладки и изолированных тестов я отслеживаемых вопрос вниз к лямбда, передаваемому между веб-сайтом .NET 4.0 и другим проектом .NET 3.5.

Метод определен в проекте 3.5 была подпись, как это:

public IEnumberable<T> ExecuteAsEnumerable(Func<IDataReader, T> func) 
{ 
    //.. 
} 

, который используется на веб-сайте 4.0 в поглотителе собственности, в результате ошибки при сливались с помощью aspnet_merge:

public IList<MyObject> MyListOfItems 
{ 
    get 
    { 
    return _myListOfItems ?? (_myListOfItems = new SomeQueryBuilder() 
     //.build statement 
     .ExecuteAsEnumerable(reader => new MyObject(reader)) 
     .ToArray()); 
    } 
} 

В моем тестовом примере я воссоздал ExecuteAsEnumerable как другой именованный метод расширения внутри веб-сайта 4.0, предварительно скомпилированный, и он сработал. После проверки «Целевой .NET Framework» проекта и реализации его было 3,5 (я раньше этого не понимал), я переключил все на 4.0, и все снова работало.

Что-то явно изменилось в обновлении .NET 4.5 (это было обновление более 4.0). В моем случае я мог бы перекомпилировать данный проект - я не уверен, что у всех будет такая роскошь (это правильное слово?).

Надеюсь, что это поможет.

+0

Можете ли вы отправить образец примера для примера, описанного выше, на [email protected] – Anand

+0

@Anand: я отправил письмо и включил образец проекта. –

+0

получил репродуцирован. Посмотрите на это завтра утром. Благодарим за воспроизведение. Очень признателен. – Anand

0

Я тоже столкнулся с этим исключением. Насколько я могу судить, это была не проблема версии aspnet_merge, ни проблема с целевой структурой. Это, однако, на старшем проект недавно обновленный до MVC 5.

Я имел этот код в представлении Razor:

var companies = users.Select(u => u.Company).DistinctBy(c => c.Id) 
          .OrderBy(c => c.Id == CurrentUser.Company.Id ? 0 : 1) 
          .ThenBy(c => c.Name); 

Он использует Linq и DistinctBy для библиотеки MoreLinq. Поскольку это все равно не должно быть в представлении, я переместил его в контроллер, и исключение исчезло.

Смежные вопросы