如果 DLL 的 app.config 应该在“主配置”中……我们如何处理 DLL 中的 WCF 引用?

Posted

技术标签:

【中文标题】如果 DLL 的 app.config 应该在“主配置”中……我们如何处理 DLL 中的 WCF 引用?【英文标题】:If app.config for a DLL should be in the "main config"… what do we do with WCF References in DLLs? 【发布时间】:2010-10-12 16:14:07 【问题描述】:

好的,这很简单,但据我所知……您只能使用某种 Windows 工作流将另一个配置包含到另一个配置中(我拒绝这样做)。

这是交易:

MAINAPP.EXE 引用一个假设的 LIBRARY.DLL。

MAINAPP.EXE 有自己的 MAINAPP.EXE.config。

如果您将“配置值”添加到 LIBRARY.DLL(从而在 LIBRARY.DLL 项目中创建 app.config),则这些值在运行时可用即使您复制 app .config 到 LIBRARY.DLL.config 到构建后的正确路径

上述原因是即使引用的库也会从“mainapp.exe”配置中读取。

到目前为止“非常好”。现在,当您添加 WCF 服务引用时,Visual Studio 会使用绑定/端点/等创建或填充您的 app.config;但这已添加到您添加参考配置的项目中;因此,您的 Library.DLL.prj 最终会得到一个不错的 app.config,它 不起作用 因为它永远不会被读取,甚至不会被复制到输出目录。现在您可能认为您可以右键单击该 app.config 并将“始终复制”设置为 true。忘了它。那没有任何作用。 (你可以用谷歌搜索那个)。

那么,鉴于上述奇怪的情况,一个使用 .NET 3.5 项目的普通 VS2008 开发人员如何管理他添加到业务层 dll 中的 WCF 服务引用?该开发人员是否应该将其 DLL 中的 useless app.config 中的所有整个部分复制并粘贴到 Mainapp.exe.config 文件中每次服务发生更改或每次他添加/删除一个

【问题讨论】:

【参考方案1】:

是的。复制粘贴就是答案。这不是一个很好的答案,但它就是答案,从 .NET 1.0 的第 1 天开始就有 AppSettings。

【讨论】:

叹息 谢谢。我认为使用 WCF、.NET 3.5、VS2008、2009 年,事情可能已经“改进”了一点。 他们确实有所改进。现在有更多的东西要复制。 ;-) 说真的,我们将如何根据源 .config 文件中的更改来更新调用 .config 文件?我认为人类需要这样做。我们希望 Oslo 帮助为此提供解决方案:更改配置脚本? 如何在 GAC 中找到 DLL 的配置文件?还要记住,自定义配置部分成为类型的实例。定义这些配置部分的程序集在哪里?目前答案是“在 .exe.config 中”。在奥斯陆:“在存储库中”。 但是,您说得有道理,为什么将 WCF 服务引用添加到 DLL 会在 app.config 中为该 DLL 项目添加信息?没有任何迹象表明配置会被 VS 和应用程序明显忽略……这就是我的意思。 MS一直在做这样的事情,我讨厌这样:) 这是网址:connect.microsoft.com/VisualStudio/feedback/… 谢谢。【参考方案2】:

您可以让一个库项目包含自定义配置文件,并且这些文件可以复制到另一个应用程序的可执行位置(这有点棘手,但没什么大不了的)。您只需使用 OpenMappedExeConfiguration 即可获取这些文件中的任何信息。然后,当您实例化 WCF 代理(实例化一个 Binding 并将其传递给代理)时,您必须进行一些自定义编码。我在这里聚会迟到了,但如果您有兴趣,我可以提供更多详细信息。

【讨论】:

感谢您的回复。事实证明,微软承认这是一个“记录不充分”的情况。我已经通过手动将配置相关部分复制到主配置来解决了这个问题,我只是在抱怨这不是在任何地方“写入”的。不管怎么说,还是要谢谢你! (+1)【参考方案3】:

不,你是对的。

但是您的 WCF 服务肯定不在业务层项目中,而是在作为业务层外观的单独项目中。然后,您的业务层只是另一个组件,它应该是并且不关心它是如何访问的,WCF 项目会为它做这件事。

当然,您也可以编写自定义服务主机并将最少量的信息(主机名、证书指纹)放在配置文件中,然后在代码中完成其余的工作。

【讨论】:

哦不,我的 WCF 不在 BL 中,BL 具有连接到不同服务器上的 WCF 的方法和逻辑。我需要 BL.dll 中的 wcf 引用才能连接到这些引用。我认为创建 WCFFacade 并没有真正的好处。无论如何都必须复制 app.config。注意澄清#2。谢谢。

以上是关于如果 DLL 的 app.config 应该在“主配置”中……我们如何处理 DLL 中的 WCF 引用?的主要内容,如果未能解决你的问题,请参考以下文章

将 app.config 重命名为 dllname.dll.config

dll 配置文件 (dllName.dll.config)

app.config 全球化

使用 NUnit 时,我应该如何在运行时修改 app.config?

获取另一个exe的App.Config

如何在 dll 级别读取 app.config。? [复制]