有一个基于ASP.NET Core Kestrel的Web API,当从\release复制到预期的工作目录时,一切都工作正常。但是,当使用Microsoft.AspNetCore.Authentication.Negotiate
包激活Windows身份验证时,我会收到一个
未能加载文件或程序集“System.DirectoryServices.Protocols,Version=6.0.0.2,Culture=neutral,PublicKeyToken= b 03 f5 f7 f11 d50 a3 a”
在将内容从\release复制到预期的工作目录并触发可执行文件(program.cs中的app.Run()是崩溃指令)后出现异常。
有问题的程序集是Microsoft.AspNetCore.Authentication.Negotiate
包的直接依赖项,在\release和工作目录中的文件中有一个System.DirectoryServices.Protocols.dll
。怎么了?
操作系统为Windows Server 2019,VS 2022构建到/release中,VS 2022构建后事件复制文件。
最小样本:https://github.com/olaflischke/WebApiWithAuth
2条答案
按热度按时间wxclj1h51#
问题为:nuget依赖关系到/release文件夹中的某个子文件夹/运行时,并在那里被引用。
**1.解决方案:将该/runtime文件夹包含在复制脚本中。 缺点: 你正在复制linux和osx的子文件夹,当你只部署到windows时,你可能永远不需要这些子文件夹。
**2.解决方法:不要使用核。复制所需的程序集(此处:Microsoft.AspNetCore.Authentication.Negotiate.dll和System.DirectoryServices.Protocols.dll)添加到解决方案文件夹中,引用它们并将它们的“复制到输出目录”属性设置为“始终”。从解决方案中删除nuget引用。 缺点: 没有nuget机制的更新。
进一步的建议高度赞赏!
wfveoks02#
我也有同样的问题。在我的例子中,将System.DirectoryServices.AccountManagement从版本7.0降级到6.0就解决了这个问题。