有 Web 引用时的 .NET DLL 设置和配置 - 发生了啥?
Posted
技术标签:
【中文标题】有 Web 引用时的 .NET DLL 设置和配置 - 发生了啥?【英文标题】:.NET DLL Settings and Config when there's a Web Reference - whats going on?有 Web 引用时的 .NET DLL 设置和配置 - 发生了什么? 【发布时间】:2010-12-08 15:27:37 【问题描述】:我的理解是,.NET 并没有真正为 DLL “做”配置文件 - 只有主可执行文件或 Web 应用程序获取配置文件,并且可执行文件/Web 应用程序引用的所有 DLL 都从该文件中读取。
但是在 VS2008 中,如果您将 Web 引用添加到类库 (DLL) 项目中,它会在项目中添加一个 Settings.Settings 文件和一个 app.config 文件。它们包含 Web 参考的主要 URL。
那么这些文件是干什么用的? DLL 无法在没有帮助的情况下读取它们,对吧?
编辑:app.config 和 Settings.Settings 的内容似乎有所不同:单独更改(例如)DLL 项目的 app.config 文件中的 Web 引用 URL 没有任何区别,但如果您编辑 app.config 中的 URL,然后打开 Settings.Settings 文件,然后将您在 app.config 中所做的更改复制到 Settings.Settings 中。然后,DLL 在运行时获取新值。这是怎么做到的?
编辑:我在这里的部分困惑是因为我不太清楚 Settings.Settings 和 app.config 之间的区别以及它们之间的关系,所以也许人们也可以帮助解决这个问题。
【问题讨论】:
【参考方案1】:DLL 无法读取它们,但它们向 DLL 的使用者强烈暗示他们可能希望在真实的设置/配置文件中包含哪些内容
编辑
响应 OP 的评论 - 如果在运行时不存在正确名称的设置,则设置中最后编辑的任何内容都会作为默认值编译到代码中。所以这就是它起作用的原因。
【讨论】:
对 app.config 的更改被复制到 Settings.Settings 文件,然后似乎在运行时被拾取,所以它不仅仅是为了展示。见我上面的编辑 啊,谢谢。我不太清楚 app.config 与 Settings.Settings 的关系,因此您的编辑会有所帮助。【参考方案2】:Visual Studio 必须在某处添加这些东西,但它不知道您要将其放入哪个应用程序中。您可以通过执行以下操作来访问 DLL 的配置:
var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config");
唯一一次我发现这很有用是当我为第 3 方应用程序编写一个作为 DLL 的插件并希望我的 DLL 是可配置的(我怀疑这不是大多数人经常做的事情)。
通常您只需将所需的配置部分移动到您的 app.config 或 web.config 中。
编辑-关于您的更新是有意义的。 Settings.settings 应用程序范围的设置来自应用程序的 app.config 文件。对于应用程序范围的设置,它实际上只是一个表示这些设置的强类型类。
【讨论】:
所以 DLL 可以拥有 Settings.Settings 文件并在运行时读取它们?构建后这些文件的内容会在哪里结束? 不,带有 Settings.Settings 文件的 DLL 将从 app.config/web.config 中读取它。如果找不到,它将回退到默认值。 我想我对 app.config 一词的使用让您感到困惑。我的意思是主应用程序的配置文件(MyApp.exe.config 或 Web.config)。对我来说,DLL 的配置实际上是 MyDll.dll.config。 HTH 我也对 Settings.Settings 中的值发生了什么感到困惑。据我现在理解,如果没有来自配置文件的值,它们会被“烘焙”到程序集中作为默认值使用? 是的,就是这样。查看生成的 Settings.Designer 文件。您将看到一个属性 DefaultSettingValueAttribute,如下所示 - [global::System.Configuration.DefaultSettingValueAttribute("Test")]。您可以在此处阅读有关此属性的更多信息-msdn.microsoft.com/en-us/library/…【参考方案3】:可以从 DLL 中的配置文件中读取。 只需将 app.config 文件添加到 DLL 项目,并确保从 DLL 中读取配置设置。部署后,您的配置文件需要具有名称“MyDLL.dll.config”(假设您的 DLL 名为“MyDLL.dll”)并且与 DLL 位于同一文件夹中。
以下代码应该从我的 dll 中返回我的连接字符串:
return ConfigurationManager.AppSettings["ConnectionString"];
【讨论】:
另外,这不是我要问的。我不是在问如何使配置文件与 DLL 一起工作,而是在问为什么 Visual Studio 会费心为 DLL 项目添加一个。 在 .NET 4.6 中测试并确认这仍然不起作用。以上是关于有 Web 引用时的 .NET DLL 设置和配置 - 发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章
从.Net到vb6的Web服务的DLL - 如何设置app.config