0

我有一个从 C# 应用程序调用时可以正常工作的 C# 类库。但是,它也支持 COM 互操作,因此较旧的 C++ 客户端也可以调用它。C# 类库中有一个 WCF 服务引用。WCF 调用在 C# 调用中工作正常,但从 COM Interop 调用时,我收到一条错误消息:

"Could not find default endpoint element that references contract 'xxxx' in the ServiceModel client configuration section....."

引用在 app.config 中,或者更具体地说是在构建 DLL 时构建的 .config 中。似乎当从 C# 应用程序调用时,DLL 知道在哪里查找此配置文件(即与 dll 相同的目录)并因此找到所需的信息。但是,当从 COM Interop 调用时,它似乎必须在其他地方寻找它而没有找到它。

有谁知道我如何解决这个问题并让它在两种情况下都能正常工作?

4

2 回答 2

1

在 COM 服务器中使用 .config 文件是非常不切实际的。System.Configuration 查找的不是与 DLL 相关联,而是与 EXE 相关联。Is name 是foo.exe.config其中“foo”是 EXE 的名称,并且必须存储在与 .exe 相同的目录中。COM 服务器无法预测 EXE 将加载它。

但是您可以通过将具有正确名称的 .config 文件存储在正确的目录中来手动使其工作。

于 2012-07-23T14:17:03.113 回答
1

在 .NET 中,具有配置文件的始终是可执行文件,而不是它使用的 .dll。即使是.dll 需要配置信息,也必须包含在应用程序的配置文件中。

默认情况下,CLR 将在与 exe 相同的目录中查找名为 .config 的配置文件。至少根据我的经验,如果这恰好是一个旧的 C++ 程序并没有什么区别。您只需将配置文件复制到 C++ 程序的目录,将其重命名以匹配可执行文件即可。

如果您想要一个适用于任何地方的解决方案,请考虑在代码中表达配置,可能是在从某个源手动加载所需的配置信息之后。

于 2012-07-23T14:17:23.153 回答