c# - "standard"初始化基于 COM 的库的方法是什么

标签 c# .net com vb6

我一直在开发 .NET 库。当然,.NET 有一种很好的配置方式,因此我可以向库用户记录他们应该在 app.config 中放入的内容。

但是,我还将该库公开为 COM 对象,以实现遗留支持。该库的一些用户将是 VB6 应用程序,它没有 app.config 概念。

我知道我可以使用 OpenExeConfiguration 以及命名来“伪造”文件,但这会导致其他问题。

有没有通用的方法来初始化基于 COM 的库?最坏的情况是,我可以公开一个初始化方法,它将所有初始化参数作为单独的参数,但我担心这会导致很难添加新的初始化参数,因为它会导致破坏 API 接口(interface)。

我想我正在考虑传递诸如键值对数组之类的东西,但在我这样做之前,是否有一种我没有考虑的“标准”方式?

最佳答案

嗯,检查一下你的假设。

app.config与exe中是否使用VB6无关。 app.exe.config 是一个 .NET 约定。当 .NET 代码加载到 exe 中时,它会在 .config 中查找配置设置。是否使用 VB6 创建 exe 并不重要。

例如,如果您在 .NET 中构建 COM 组件,然后将其托管在 dllhost.exe 中,您的 .NET 逻辑将从名为 dllhost.exe.config 的文件中读取其配置,该文件与 dllhost 位于同一目录中。 exe(通常是%windir%\system32)。 dllhost.exe 二进制文件不知道 .config 文件这一事实是无关紧要的。

除此之外,您使用键/值对进行 init 的计划很好。它易于使用、灵活、可扩展。您可能想要同时执行配置文件和 Init() 方法,以允许 Init 根据需要覆盖某些内容。在许多情况下,.config 文件只能由管理员访问,并且不可更改。因此,您可能需要某种方式在 .exe.config 之外提供用户可定义的设置。

另请参阅:How can I debug a VB6 project that has a .NET interop component?

  • 对该问题的回答指出,调试时,您应该使用 vb6.exe.config 作为配置文件,而运行时则需要 app-name.exe.config 。

关于c# - "standard"初始化基于 COM 的库的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/886942/

相关文章:

c# - 合并集合保留顺序的最有效方法?

c# - 为什么会不断调用 ICommunicationListener.Abort()?

c# - 如何在 umbraco 中获取预值的字符串值

c# - 未找到 Microsoft.Threading.Tasks

c++ - 为什么在具有多个接口(interface)() 的对象中实现 QueryInterface() 时我需要显式向上转换

c# - 如何从 C# 调用 mono_threads_request_thread_dump()?

c# - 如何在 C# 控制台应用程序中从 Static void main 调用其他类的方法?

c# - 从 32 位应用程序通过 COM 调用 x64 程序集

c++ - 是否有必要在 IConnectionPointImpl 被销毁之前取消通知?

c# - 固定长度的字符串作为值类型用于 MemoryMappedViewAccessor