#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 .