为什么将.net配置设置编译成程序集?

时间:2009-02-05 12:34:02

标签: .net configuration settings

我一直在尝试阅读如何在.net中正确配置,并遇到了一些我觉得有点奇怪的事情,那就是配置设置通过Settings类编译成程序集。删除app.config并运行应用程序不会像我期望的那样导致配置错误,而是现在我无法替换配置值。

在我的应用程序中,我有一个webservice url的配置设置,我需要能够以编程方式提取和设置。我是否应该在我的应用程序的配置中创建自定义部分,我将通过ConfigurationManager.GetSection(..)读取以触发读取配置文件或是否有另一种解决此问题的方法因为我绝对不希望webservice url用于生成ws代理作为可能潜在泄漏到生产中的URL。

请帮忙。

7 个答案:

答案 0 :(得分:1)

尝试将应用程序配置文件添加到项目而不是设置文件中。应用程序配置文件无法编译到程序集中。

答案 1 :(得分:1)

Where are user-mode .NET settings stored?

.NET设置不在程序集中

答案 2 :(得分:0)

如果单击属性上的加号,然后单击设置,则会找到名为settings.designer.cs的文件

此文件包含您在定义应用程序设置时创建的默认值,这就是您的应用程序在没有配置文件的情况下工作的原因。

但是,您始终可以覆盖此值。

您测试此功能的唯一方法是创建一个对公众消费安全的默认值,并在测试期间更改它。

答案 3 :(得分:0)

添加对webservice的引用时,可以设置该属性以使webservice url动态化(即从配置文件中读取)。

单击“Web引用”。单击您的Web服务并将属性“URL行为”从“静态”设置为“动态”。

进行更改后,只需将Web服务指向正确的URL,即可在应用运行之前更改配置文件。

答案 4 :(得分:0)

据我记得(我有待纠正),。Net会创建一个存储在Windows应用数据文件夹中的配置文件,如果您正在部署该应用,则尤其如此。

在应用数据中搜索(C:\ Documents and settings \ yourusername \ Local Setting \ Application Data \ your app name),看看是否可以在那里找到应用配置。如果你应该能够在那里更改它

此外,我不确定您正在创建什么类型的Web服务,但是您是否应该使用web.config(我使用它)来存储设置?

答案 5 :(得分:0)

据我所知,webservice引用逻辑表明,如果app.config(或web.config)中有某个键,它将选择...如果不是......它将使用所使用的URL引用创建webservice引用。在Framework 1.1中可能是2.0。

至少将框架3.0中的Settings.settings文件用作默认值。如果你没有在web.config中提供一个覆盖Settings.settings中的密钥,它会使用默认值...这就是你没有看到配置错误的原因。对于webservice引用,在该文件中存储您为创建引用而提供的值。

正如我所看到的...... Settings.settings允许您以编程方式更新密钥以保存首选项以及一些如何保持原样。

More info:

答案 6 :(得分:0)

我想我明白你在说什么,Jojoe。假设您从www.productionurl.com添加了一个Web服务,生成的代理类将生产URL保留在源代码中。在运行时,如果它无法在配置文件中找到url的值,则使用此默认值(假设您已将服务设置为Dynamic)。

如果您不喜欢这种行为,您有两种选择:

  • 更改Reference.cs文件(无论何时刷新服务代理,您都必须继续这样做)
  • 为代理创建部分类并覆盖URL设置

或者您可以检查Web服务是否有开发站点。如果是,请从该站点而不是生产站点创建Web引用。