gpt4 book ai didi

c# - 动态加载程序集时加载绑定(bind)从 *.dll.config 重定向

转载 作者:行者123 更新时间:2023-12-05 07:20:44 26 4
gpt4 key购买 nike

我正在开发一个 Windows 服务,它动态加载一个 DLL,其中包含该服务的实际逻辑。它是使用 Assembly.LoadFrom(...) 加载的。该程序集在 NuGet 上引用 Microsoft.Graph,而这又需要一些其他库,尤其是 System.ValueTuple。编译时版本已正确解析,但在加载程序集时它会在存在 4.0.2.0 时尝试查找版本 4.0.1.0。

所以我创建了一个绑定(bind)重定向,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

我启用了 FusionLog,它告诉我它甚至没有加载这个文件(我把它放在名为 .dll.config 的 DLL 旁边)。如何将这些绑定(bind)重定向与 Assembly.LoadFrom() 结合使用?

融合日志(抱歉是德语):

*** Protokolleintrag für Assembly-Binder  (06.08.2019 @ 09:14:03) ***

Fehler bei diesem Vorgang.
Ergebnis der Bindung: hr = 0x80070002. Das System kann die angegebene Datei nicht finden.

Der Assemblymanager wurde geladen aus: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Als EXE-Datei ausgeführt. C:\Program Files (x86)\iSM\biCube\services\BiCube.Services.Host.exe
--- Ein detailliertes Fehlerprotokoll folgt.

=== Zustandsinformationen vor Bindung ===
LOG: DisplayName = System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
(Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/iSM/biCube/services/
LOG: Ursprünglicher PrivatePath = NULL
LOG: DynamicBase = NULL
LOG: CacheBase = NULL
LOG: AppName = BiCube.Services.Host.exe
Aufruf von Assembly : Microsoft.Graph.Core, Version=1.15.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: Diese Bindung startet im default-Load-Kontext.
LOG: Es wurde keine Anwendungskonfigurationsdatei gefunden.
LOG: Die Hostkonfigurationsdatei wird verwendet:
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config wird verwendet.
LOG: Verweis nach der Richtlinie: System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
LOG: Die Suche im GAC war nicht erfolgreich.
LOG: Download von neuem URL file:///C:/Program Files (x86)/iSM/biCube/services/System.ValueTuple.DLL.
LOG: Download von neuem URL file:///C:/Program Files (x86)/iSM/biCube/services/System.ValueTuple/System.ValueTuple.DLL.
LOG: Download von neuem URL file:///C:/Program Files (x86)/iSM/biCube/services/System.ValueTuple.EXE.
LOG: Download von neuem URL file:///C:/Program Files (x86)/iSM/biCube/services/System.ValueTuple/System.ValueTuple.EXE.
LOG: Fehler bei allen Such-URLs.

最佳答案

它可能与条目有关 - <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.2.0" />按照只有版本 0 到 4.0.1 将被重定向到 4.0.2。你应该保留 oldVersion="0.0.0.0-4.0.2.0"

关于c# - 动态加载程序集时加载绑定(bind)从 *.dll.config 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57371513/

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