.Net Standard 2.0 с .Net Framework 4.8 — Не удалось загрузить файл или сборку System.Security.Principal.Windows.Безопасность.Принципал.Windows, версия = 4.1.1.0

#iis #.net-standard-2.0 #.net-framework-4.8

#iis #.net-standard-2.0 #.net-4.8

Вопрос:

Я работаю над приложением ASP, написанным на .Net Framework 4.8, работающим в IIS на Windows Server 2012 R2. Я создал пакет NuGet, который представляет собой библиотеку .Net Standard 2.0, и все это успешно работает на моем локальном компьютере с помощью отладки Visual Studio.

После развертывания на сервере (заменил существующую папку bin на новую, включая все новые файлы) Теперь я получаю эту ошибку.

 Could not load file or assembly 'System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
 

Я использую самую последнюю версию инструментов сборки MS, последние обновления Windows, доступные для сервера, и как приложение .Net Framework, так и библиотека .Net Standard используют версию 5 System.Безопасность.Принципал.Windows, несмотря на то, что говорится в этом сообщении об ошибке.

Я убедился, что все функции Windows, связанные с IIS, включены на сервере так же, как и на моей машине разработки. Я перестроил как приложение, так и библиотеку. Я полностью удалил и переустановил систему.Безопасность.Принципал.Пакет Windows NuGet из обоих. Я попытался установить это в файле csproj для приложения:

 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType
 

Я также попытался установить это в csproj:

 <PropertyGroup>
    <!--- ... -->
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
    <!--- ... -->
</PropertyGroup>  
 

До сих пор ничего не получалось. Я не понимаю, почему это вообще проблема, учитывая, что она безупречно работала на моем локальном компьютере.

Есть предложения? Решения, приведенные для других подобных проблем при переполнении стека, не сработали для меня.

Комментарии:

1. Используете ли вы packages.config пакеты for NuGet? Сначала необходимо преобразовать ссылки на пакеты в файлах проекта.

2. Перезапустите пул приложений в IIS. и убедитесь, что сборка использует правильную .NET Framework (64-разрядную или 32-разрядную).

Ответ №1:

Решением этой проблемы было установить пакет NuGet как в проект приложения, так и в проект библиотеки, в частности Microsoft.Net.Compilers , который служит для создания проекта с использованием компиляторов C # и Visual Basic, содержащихся в пакете, в отличие от версии, установленной с MSBuild.

Хотя этот пакет теперь устарел, это была правильная версия для использования, учитывая, что приложение запущено с использованием .Net Framework, а не .Net Core 2.1 .