gpt4 book ai didi

c# - Fusion loader 找不到实际存在的 DLL

转载 作者:行者123 更新时间:2023-11-30 18:10:23 24 4
gpt4 key购买 nike

有谁知道什么会导致 Fusion 加载器在没有警告或确认的情况下简单地跳过 DLL?

当我尝试从命令行应用程序(在 C# 中)执行此操作时

Assembly.LoadFrom("c:\\Deploy\\bin\\WebServices.dll")

我看到了这个:

"Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."

该 DLL 依赖于 Platform.DLL,但该依赖项的加载失败,因此这行代码引发了异常。当我检查 Fusion 程序集加载消息时,这是我看到的:

=== Pre-bind state information ===LOG: DisplayName = Platform, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null (Fully-specified)...LOG: This bind starts in LoadFrom load context.WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().LOG: No application configuration file found.LOG: Using machine configuration file from C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\\config\\machine.config.LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.DLL.LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.DLL.LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform.EXE.LOG: Attempting download of new URL file:///C:/Project/bin/Debug/Platform/Platform.EXE.LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.DLL.LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.DLL.LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform.EXE.LOG: Attempting download of new URL file:///c:/Deploy/bin/Platform/Platform.EXE.

问题是,DLL 存在于 c:\Deploy\bin\Platform.DLL 中,具有正确的版本并且没有签名的公钥。

我想到的事情:
1. 也许真的是 Platform.DLL 的依赖损坏了,导致了这种行为? (我在 Reflector 中追查依赖树,但没有发现丢失的 DLL)
2. 可能存在发布/调试不匹配,或者 64 位与 32 位的区别?但一切都建立在同一台机器上
3. 也许我误读了日志,但它不应该在遇到找到的 DLL 时停止吗?我在此日志中没有看到“成功”或“不成功”消息。我只知道它因为异常而失败了。

附上更多技术细节:
机器环境为Windows 2008 64位,安装.NET 2.0, 3.0 & 3.5。
同样的应用程序在另一台机器(Vista 32 位)上运行得很好,具有相同的目录结构和 DLL,尽管它们是在那台机器上构建的

最佳答案

是的,当它找到所需的 dll 时它应该停止,所以第五个“尝试下载...”应该已经找到它...

但是,命令行应用程序是从哪里运行的?如果它是 Debug 文件夹,那么您可以尝试的一些事情是

  1. 将依赖的 dll 放在同一个文件夹中
  2. 通过以下格式的 .config 文件对程序集和引用进行签名

    <dependentAssembly>
    <assemblyIdentity name="WebServices.dll" publicKeyToken="<whatever this public key it>" />
    <codeBase version="1.0.0.0" href="..\WebServices.dll" />
    </dependentAssembly>
  3. 签署它们,然后将依赖程序集放入 GAC。

我可能还差得远,但有几件事值得尝试。

关于c# - Fusion loader 找不到实际存在的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com