COM包装的.Net dll配置文件

COM包装的.Net dll配置文件,.net,com,configuration,interop,.net,Com,Configuration,Interop,我有一个.net组件库(dll),我已经成功地进行了COM包装(使用regasm)。.net组件需要配置信息 在.Net世界中,这可以通过app.config轻松解决。我可以将此dll的特定设置添加到web.config或exe.config,以便在程序或web上使用dll时,它可以访问必要的配置信息 所以我的问题是,当通过COM调用时(比如通过ASP页面或VBScript),我可以并且如何使用配置文件?理想情况下,我不希望对某些项目进行硬编码。COM对象的调用方/创建者是否知道配置文件在哪里?

我有一个.net组件库(dll),我已经成功地进行了COM包装(使用regasm)。.net组件需要配置信息

在.Net世界中,这可以通过app.config轻松解决。我可以将此dll的特定设置添加到web.config或exe.config,以便在程序或web上使用dll时,它可以访问必要的配置信息


所以我的问题是,当通过COM调用时(比如通过ASP页面或VBScript),我可以并且如何使用配置文件?理想情况下,我不希望对某些项目进行硬编码。

COM对象的调用方/创建者是否知道配置文件在哪里?如中所示,公开“Load(path)”类型的函数会起作用吗?或者你的意思不同吗?

看看这是否有帮助-

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

如果您“拥有”正在读取配置的内容,可以要求它从您返回的对象中读取其配置(与ConfigurationManager中的默认配置相反),但如果它是从(例如)ConfigurationManager.AppSettings读取的第三方组件,则这不会取代配置(或缺少配置)这是在AppDomain启动时读到的。这是一个很好的观点,Matt。@rifferte,只有当您可以修改COM包装的dll代码时,上述解决方案才有效。我可以修改COM包装的代码,所以这是我将采取的方向。谢谢!