Невозможно загрузить эталонную сборку для выполнения из проекта веб-сайта

Использование .NET 4.6.2 и более старого проекта веб-сайта (не веб-приложения). Если я очищаю каталог BIN, а затем создаю и запускаю, он работает, но иногда после нескольких сборок и запусков возникает эта ошибка.

Server Error in '/' Application.
Cannot load a reference assembly for execution.
....
[BadImageFormatException: Cannot load a reference assembly for execution.]
[BadImageFormatException: Could not load file or assembly 'netfx.force.conflicts' or 
one of its dependencies. Reference assemblies should not be loaded for execution.  
They can only be loaded in the Reflection-only loader context.
(Exception from HRESULT: 0x80131058)]
....

Есть ли какой-нибудь способ заставить проекты веб-сайтов работать правильно, когда библиотеки, которые они используют, начинают использовать netstandard 2.0?

Кроме того, кажется, что это перенаправление привязки сборки необходимо для его запуска, но nuget добавляет перенаправление в более старую версию 4.1.1.0. Любые предложения о том, как исправить это, кроме ручного редактирования этой строки после большинства обновлений nuget?

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a"
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
  </dependentAssembly>

Уйдут ли все эти проблемы, если проект будет перенесен в проект веб-приложения?


person Ian Mercer    schedule 30.08.2017    source источник
comment
вы, вероятно, уже знаете это, но я просто скажу, что видел это, когда пытался использовать 32-битную dll на машине x64. Я не думаю, что это исчезнет при преобразовании веб-сайта в тип проекта веб-приложения.   -  person TrevorBrooks    schedule 30.08.2017
comment
Йен, тебе еще что-нибудь удалось? У меня такая же проблема с использованием той же настройки, что и у вас: Стандартная библиотека .NET в 4.6.2 ASP.NET Web Api.   -  person Adam Scharp    schedule 02.10.2017
comment
@AdamScharp Пока не повезло, по-прежнему удаляю каталог bin вручную каждый раз, когда это происходит. В этом случае проблема с версией RunTime связана с MongoDB.   -  person Ian Mercer    schedule 02.10.2017
comment
Вам нужно закрыть Visual Studio, чтобы / перед удалением каталога bin?   -  person Scott Fraley    schedule 03.10.2017
comment
Краткий ответ: нет. Во всяком случае, не с сообществом VS2017.   -  person Scott Fraley    schedule 03.10.2017
comment
@IanMercer Я решил проблему, удалив папку bin в папке своего веб-проекта. У меня есть стандартная библиотека VS2017 + .NET 2.02 + .NET 4.6.1   -  person Adamy    schedule 12.04.2018


Ответы (2)


Вы пытаетесь загрузить неуправляемую библиотеку динамической компоновки или исполняемый файл (например, системную DLL Windows), как для сборки .NET Framework. В следующем примере это показано с помощью метода Assembly.LoadFile для загрузки Kernel32.dll.

Copy
// Windows DLL (non-.NET assembly)
string filePath = Environment.ExpandEnvironmentVariables("%windir%");
if (! filePath.Trim().EndsWith(@"\"))
   filePath += @"\";
filePath += @"System32\Kernel32.dll";

try {
   Assembly assem = Assembly.LoadFile(filePath);
}
catch (BadImageFormatException e) {
   Console.WriteLine("Unable to load {0}.", filePath);
   Console.WriteLine(e.Message.Substring(0,
                     e.Message.IndexOf(".") + 1));
}
// The example displays an error message like the following:
//       Unable to load C:\WINDOWS\System32\Kernel32.dll.
//       The module was expected to contain an assembly manifest.
person Nadeem Taj    schedule 24.07.2020

Да, вы можете преобразовать веб-сайт в веб-приложение:

снимок экрана

Если вы не видите эту конфигурацию - возможно, у вас проблема с названиями классов, например:

/Directory/Index.aspx.cs

/Directory2/Index.aspx.cs

person Elizaveta Golenok    schedule 10.01.2018
comment
Я знаю, что можешь, но вопрос не в этом. - person Ian Mercer; 11.01.2018