gpt4 book ai didi

.net - 从与 COM 互操作混合的 DLL 加载配置文件

转载 作者:行者123 更新时间:2023-12-04 05:18:25 24 4
gpt4 key购买 nike

在通过 COM 互操作使用程序集时,我无法在 .NET 中加载配置设置。

背景:
我们在一些服务器上使用大量的 VBScript 脚本来执行各种任务。通常,它们执行诸如发送电子邮件之类的功能。为了促进这一点,我想创建一个可从 VBScript 创建的 COM 对象,这将有助于其中一些常见的功能集。

因此,我正在尝试创建一个通过互操作公开一些 COM 接口(interface)的 .NET 程序集。我设法让这个工作,但后来想外部化(而不是硬编码)一些配置设置。

我正在使用这一行来检索配置:

ConfigurationManager.OpenExeConfiguration(this.GetType().Assembly.Location)

当我从测试项目中对其进行测试并将其作为 .NET 项目进行引用时,这似乎可以正常工作,但如果我将其作为 COM 对象进行测试,则会失败。

失败的原因是在我的配置文件中,我有一个自定义部分:
<section name="CustomSection" type="COMObjects.CustomSection, COMObject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e9e8071519bd2f04"/>

但是,当它尝试加载自定义部分时,它无法加载程序集“COMObject”。对我来说,这是有道理的,因为我没有将程序集放在 GAC 中(我也不想),所以很难找到它。

有没有办法帮助 .NET 框架找到配置文件中引用的程序集,例如这种情况?

下面是绑定(bind)的 fuslogvw.exe 输出:

操作失败。
绑定(bind)结果:hr = 0x80070002。该系统找不到指定的文件。

从以下位置加载程序集管理器:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
在可执行文件 C:\Windows\SysWOW64\cscript.exe 下运行
--- 详细的错误日志如下。

=== 预绑定(bind)状态信息 ===
日志:用户 = 我的机器\我
日志:DisplayName = COMObject,版本=1.0.0.0,文化=中性,PublicKeyToken=e9e8071519bd2f03
(完全指定)
日志:Appbase = file:///C:/Windows/SysWOW64/
日志:初始 PrivatePath = NULL
日志:动态基础 = NULL
日志:缓存基础 = NULL
日志:AppName = NULL
调用程序集:System.Configuration,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a。

LOG:此绑定(bind)在默认加载上下文中开始。
LOG:未找到应用程序配置文件。
日志:使用 C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config 中的机器配置文件。
LOG:之前看到过相同的绑定(bind),但由于 hr = 0x80070002 失败。
ERR:预下载检查期间发生不可恢复的错误(hr = 0x80070002)。

谢谢

最佳答案

Running under executable C:\Windows\SysWOW64\cscript.exe



此代码由 32 位版本的脚本解释器激活。 CLR 查找程序集的位置受启动 EXE 位置的影响。它设置 AppBase 的值它不可避免地指向 Windows 目录,因为那是存储 cscript.exe 的地方。它可以找到您的程序集的唯一方法是将其复制到 c:\Windows\SysWow64。这不是一个合理的做法,这个目录归操作系统所有。

私有(private)路径可以通过 app.exe.config 文件配置, <probing>元素。它是有限的,你只能选择 AppBase 的一个子目录。在 c:\Windows\SysWOW64 中创建子目录是不合理的做法。创建 script.exe.config 文件将影响 cscript 执行的所有脚本。这不是一件合理的事情。

.NET 框架为此类程序集解析问题提供了一个非常合理的替代方案。你已经知道了,这是你不想做的事情。该程序集属于 GAC。

关于.net - 从与 COM 互操作混合的 DLL 加载配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13951902/

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