2013-07-09 33 views
1

我创造在VS2010和VB.net(互操作)互操作COM对象app.config文件的设置位置

该COM对象应该是能够与任何非工作托管代码应用程序如Windows COM对象字,Excel或在这种情况下访问。

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

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

有一些建议将.dll和app.config放置在SAME目录中作为office程序(如excel),然后将配置文件重命名为Excel.exe.config应该可以工作。

这似乎不适合我。

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

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

在vb.net显然,我可以将配置文件的东西从.dll复制到主应用程序配置,我们是为了比赛。如上所述,我没有托管的“主”文件。

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

回答

3

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

这不像它不起作用,将foo.exe.config的副本放在foo.exe客户端目录中工作得很好。如果您不是唯一一个寻找此解决方案的人,则会出现问题。现在,安装程序开始覆盖彼此的.config文件,当插件无法识别地失败时,您的客户失去了大量时间。

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

+0

欣赏你的公平建议。此.exe程序不是托管代码,并使用regasm并将.dll放在同一目录中.exe目录不起作用。同意更改.exe是问题,但我的情况我知道un-manged .exe(msaccess.exe)的位置。问题THEN变成如何让类对象读入一个已知的app.config文件,该文件现在位于已知的文件位置。问题不在于位置,而是要弄清楚如何让现有的类代码使用配置文件中包含的现有Web服务映射。通过systemConfigManger加载似乎不起作用(即使通过托管代码进行测试)。 –

+1

你没有使用我的建议。 *不要*使用设置。所以不要使用app.config文件。 –

+0

为什么在创建com对象实例时,这些对象是否没有自己的配置文件?为什么选择使用这种com对象的不同语言编写的10个不同的自动化客户端每个都有大量的代码来加载复杂的设置?当我创建一个像OutLook或Word这样的流行com对象的实例时,会有大量的设置被加载,包括用户配置文件,区域设置,默认段落设置,POP邮件服务器类型等。这是我们行业中的一个长期先例但如果你提出更好的建议,我会全神贯注。 –