【问题标题】:If app.config for a DLL should be in the "main config"… what do we do with WCF References in DLLs?如果 DLL 的 app.config 应该在“主配置”中……我们如何处理 DLL 中的 WCF 引用?
【发布时间】: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 文件中每次服务发生更改或每次他添加/删除一个

【问题讨论】:

    标签: visual-studio-2008 wcf .net-3.5 app-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一直在做这样的事情,我讨厌这样:)
    【解决方案2】:

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

    【讨论】:

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

    不,你是对的。

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

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

    【讨论】:

    • 哦不,我的 WCF 不在 BL 中,BL 具有连接到不同服务器上的 WCF 的方法和逻辑。我需要 BL.dll 中的 wcf 引用才能连接到这些引用。我认为创建 WCFFacade 并没有真正的好处。无论如何都必须复制 app.config。注意澄清#2。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多