.Net Standard 2.0 with .Net Framework 4.8 - 无法加载文件或程序集 System.Security.Principal.Windows,版本=4.1.1.0

.Net Standard 2.0 with .Net Framework 4.8 - Could not load file or assembly System.Security.Principal.Windows, Version=4.1.1.0

我正在开发一个 ASP 应用程序,它是用 .Net Framework 4.8 编写的,运行 在 Windows Server 2012 R2 上的 IIS 上。我已经创建了一个 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 Build Tools 的最新版本,可用于服务器的最新 Windows 更新,以及 .Net Framework 应用程序和 .Net Standard库正在使用 System.Security.Principal.Windows 的第 5 版,尽管此错误消息是这么说的。

我已确保所有与 IIS 相关的 Windows 功能都在服务器上启用,就像它们在我的开发机器上一样。我已经重建了应用程序和库。我已经完全卸载并重新安装了两者的 System.Security.Principal.Windows NuGet 包。我已经尝试在应用程序的 csproj 文件中设置它:

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

我也试过在 csproj 中设置这个:

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

到目前为止没有任何效果。我不清楚为什么这会成为一个问题,因为它在我的本地机器上运行完美。

有什么建议吗? Stack Overflow 上针对其他类似问题给出的解决方案对我没有用。

这个问题的解决方案是在应用程序项目和库项目上安装一个 NuGet 包,特别是 Microsoft.Net.Compilers,它用于使用包含在中的 C# 和 Visual Basic 编译器来构建项目包,而不是随 MSBuild 安装的版本。

虽然此包现已弃用,但它是正确的版本,因为应用程序 运行 使用 .Net Framework,而不是 .Net Core 2.1+。