.net System.IO.FileNotFoundException:'无法加载文件或程序集

ulydmbyx  于 2023-05-02  发布在  .NET
关注(0)|答案(1)|浏览(846)

我有一份申请。应用程序运行正常,但在我安装后错误开始出现

dotnet add package Microsoft.AspNetCore.Authentication.Negotiate --version 6.0.14

一旦我安装了这个包,并把这行代码在启动。cs文件:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
           .AddNegotiate();
        services.AddAuthorization(options =>
        {
            options.FallbackPolicy = options.DefaultPolicy;
        });

我开始得到这个错误:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.DirectoryServices.Protocols, Version=6.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.'

当我看到上面的错误时,我安装了这个包:

dotnet add package System.DirectoryServices --version 7.0.0

我仍然得到这个错误。程序中出现错误。cs文件。下面是错误的屏幕截图:

不幸的是,我没有看到www.example版本 www.example.com 系统目录服务。nuget协议。不确定为什么应用程序要查找www.example www.example.com 。已安装0.0版本。下面是安装在我的应用程序上的包:

我试着把这个放进我的网里。配置文件:

<configuration>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.DirectoryServices.Protocols" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="7.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
</configuration>
iezvtpos

iezvtpos1#

更新:这是系统中的一个bug。DirectoryServices.第七章.0.0和Microsoft.AspNetCore.Authentication.协商已经修复,并将与下一个版本的软件包一起发布。请参阅此处对该问题的回复www.example www.example.com
在此期间,使用我的工作周围的使用旧版本的包。
既往分析(更新前)
我没有解决,但围绕这个问题工作,我将与你分享我的见解。也许有人根据我的发现找到了根本原因?
我在运行已发布的dotnet 6 exe时遇到了同样的错误。升级Microsoft时出现问题。AspNetCore.Authentication.谈判到6。0.16系统DirectoryServices.方案6.0.1至7.0.0。在Visual Studio中用F5运行exe可以工作,我没有对此的解释。我们在发布配置文件中使用<SelfContained>false</SelfContained>
与您的解决方案的不同之处可能在于我们需要引用System。DirectoryServices.协议直接在另一个项目中(而不是直接在exe中),因为我们也在同一个exe中以编程方式访问LDAP服务器。
我注意到系统的汇编版本。DirectoryServices.7.第7章.0.0是 www.example.com .0.1汇编版本为www.example www.example.com (见下面的截图)。因此,使用较新的包版本,您将获得较低的汇编版本。这很奇怪,我不认为这是最好的做法。我确实认为,这可能会在发布步骤中抛出dotnet的依赖管理,但我没有找到任何信息或证据。我为系统提交了一个问题。DirectoryServices,因为程序集版本:https://github.com/dotnet/runtime/issues/85296
旁注:程序集版本显示在windows资源管理器的属性对话框中。获取汇编版本的最安全方法是通过https://learn.microsoft.com/en-us/dotnet/framework/tools/ildasm-exe-il-disassembler

所以你的绑定重定向 * 必须指向 www.example.com 来实现这一点,但遗憾的是,dotnet 6中不再有绑定重定向(https://stackoverflow.com/a/46120907/4997872)。
根据我在网上找到的进一步信息(https://www.reddit.com/r/csharp/comments/112h640/could_not_load_file_or_assembly/https://learn.microsoft.com/en-us/answers/questions/1185993/system-io-filenotfoundexception-could-not-load-fil),目前唯一可行的解决方案似乎是继续使用系统。DirectoryServices.方案6.0.1并直接在应用程序中引用。至少这对我们是有效的。
好像是……什么东西……在7中被打破了。0.0系统DirectoryServices.导致冲突的协议或至少是Microsoft。AspNetCore.Authentication.谈判6.0.x不适用于系统。DirectoryServices.第七章.0.0.

相关问题