【问题标题】:Set location of app.config file for interop com object为 interop com 对象设置 app.config 文件的位置
【发布时间】:2013-07-06 13:18:09
【问题描述】:

我在 VS2010 和 VB.net (interop) 中创建一个 windows com 对象

这个 com 对象应该能够与任何非托管代码应用程序一起工作,例如 word、Excel 或在本例中为 Access。

com 对象的创建和使用 regasm 等工作正常。没问题。

但是,我在 INSTANT 中创建了一个需要连接字符串或 app.config 文件中的任何其他内容的 com 对象,然后它失败了。在这种情况下,它恰好是一个 Web 服务,并且常见的“端点”或 app.config 文件找不到错误发生。 (如果它只是一个连接字符串,我会简单地读取这个值——但由于 Web 服务定义,配置文件非常混乱)。

有人建议将 .dll 和 app.config 放在与办公程序(如 excel)相同的目录中,然后将配置文件重命名为 Excel.exe.config 应该可以。

这似乎对我不起作用。

有没有办法让现在是 com 对象的 vb.net 类 (.dll) 知道加载 + 使用 .dll 的配置文件而不是一些主应用程序文件?

请注意,在这种情况下,我没有主应用程序配置文件,因为我正在启动 Word 或 Excel 等非托管应用程序并尝试使用我的类对象。

显然,在 vb.net 中,我可以将 .dll 中的配置文件内容复制到主应用程序配置中,然后我们就可以参加比赛了。如前所述,我没有托管的“主”文件。

那么,当在非托管代码中创建对象的实例时,如何让 class.dll 文件加载 class.dll.config 文件?

【问题讨论】:

    标签: vb.net com


    【解决方案1】:

    在类库中使用应用程序设置通常是一种不好的做法,.NET 仅支持它们用于 EXE 项目。在 [ComVisible] DLL 的情况下,它超出了图表范围,您完全无法控制哪个 EXE 使用您的代码。

    不是不行,把 foo.exe.config 的副本放到 foo.exe 客户端目录下就可以了。当您不是唯一寻找此解决方案的人时,麻烦就开始了。现在安装程序开始覆盖彼此的 .config 文件,当加载项无法诊断失败时,您的客户将损失大量时间。

    这个问题只有一个解决方案:不要使用设置。为类库提供配置的许多其他方法。位于众所周知的位置的 .xml 文件也可以正常工作。

    【讨论】:

    • 感谢您的中肯建议。这个 .exe 程序不是托管代码,使用 regasm 并将 .dlls 放在同一个目录中 .exe 目录不起作用。同意更改 .exe 是有问题的,但我确实知道未管理的 .exe (msaccess.exe) 的位置。那么问题就变成了如何让类对象读取一个已知的 app.config 文件,该文件现在位于已知的文件位置。问题不在于位置,而在于弄清楚如何让现有的类代码使用配置文件中包含的现有 Web 服务映射。通过 systemConfigManger 加载似乎不起作用(即使通过托管代码进行测试)。
    • 你没有采纳我的建议。 不要使用设置。所以也不要使用 app.config 文件。
    • 为什么在创建 com 对象实例时,这些对象不应该有自己的配置文件?为什么选择使用这样一个 com 对象的 10 个用不同语言编写的不同自动化客户端每个都有大量代码来加载复杂的设置?当我创建一个流行的 com 对象(如 OutLook 或 Word)的实例时,会加载大量的设置列表,包括用户配置文件、区域设置、默认段落设置、流行电子邮件服务器的类型等。这在我们行业中是一个长期的先例但如果你提出更好的建议,我会全力以赴。
    • 当我说一个“已知”的配置文件位置时,我同意我不应该调用该配置文件 app.config 而是给它一些其他名称。问题仍然是通过 system.ConfigManager 加载此 xml 文件不起作用。所以我 100% 同意我不应该使用一些标准的应用程序配置文件,但问题是如何映射现有的配置文件(我同意现在将其重命名为其他东西)仍然是我的问题。所以我的问题假设我正在使用一些自定义 XML 重命名的配置文件。文件重命名问题是微不足道的。让创建的对象使用设置是问题。
    猜你喜欢
    • 2012-07-24
    • 2018-02-20
    • 1970-01-01
    • 2018-08-24
    • 2011-02-02
    • 2012-01-19
    • 2014-10-11
    • 2012-02-24
    • 2014-04-15
    相关资源
    最近更新 更多