COM封装的.Net dll配置文件

3
我有一个 .net 组件库(dll),我已经成功地将其 COM 封装起来(使用 regasm)。这个 .net 组件需要配置信息。
在 .Net 世界中,可以通过 app.config 轻松解决这个问题。我可以将这个 dll 的特定设置添加到 web.config 或 exe.config 中,以便当该 dll 在程序或 Web 上使用时,它可以访问必要的配置信息。
所以我的问题是,在通过 COM 调用时(比如通过 ASP 页面或 VBScript),我能否使用配置文件?理想情况下,我不想硬编码某些项目。
3个回答

2

2
如果您“拥有”正在读取配置的对象并可以要求它从返回的对象中读取其配置(而不是从ConfigurationManager中读取默认配置),则此方法有效。但是,如果它是第三方组件,例如正在从ConfigurationManager.AppSettings中读取,则无法替换在启动AppDomain时读取的配置(或缺少配置)。 - nitzmahone
那是个好观点,马特。@rifferte,上面的解决方案只适用于您可以修改COM封装的dll代码的情况。 - Dipen Bhikadya
我可以修改COM封装的代码,所以这就是我要采取的方向。谢谢! - rifferte

1
问题在于默认的COM激活会让你的托管组件在默认的AppDomain中运行,该域继承自托管exe文件的配置名称(例如,如果你在cscript.exe中运行,它希望在cscript.exe旁边找到cscript.exe.config,而你并不拥有这个文件)。最简单的解决方法是创建一个托管shim来启动一个新的AppDomain,然后在那里加载程序集,在AppDomainSetup对象中指定XXX.dll.config文件,然后在新的AppDomain中创建和返回对象。这基本上意味着你需要创建一个小型的托管工厂对象,确保.NET已经运行,并且已经创建了你的新AppDomain(最好只创建一次 - 如果在同一进程中创建第二个对象,则使用现有域),然后返回托管对象,在正确的位置进行托管。如果愿意编写一个完全实现COM类工厂的非托管shim,那么你可以使整个过程完全透明,但这是更高级的技巧...

0

调用/创建COM对象的人会知道配置文件在哪里吗?也就是说,暴露一个“Load(path)”类型的函数是否足够,还是你指的是其他东西?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接