web.config忽略Settings.Default。<property>并始终使用默认值</property>

时间:2013-09-30 14:46:57

标签: .net asp.net-mvc web-config settings default-value

在ASP.NET MVC 3 Web应用程序中,我遇到的问题是web.config文件中的设置被完全忽略,并且会应用默认值。该文件的相关部分如下:

...
<configuration>
    <configSections>
        <section name="MyProject.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=..." requirePermission="false" />
...
<applicationSettings>
    <MyProject.Properties.Settings>
        <setting name="MySetting" serializeAs="String">
            <value>MyValue</setting>
        </setting>
    ...

我确保项目名称正确,并且我还验证了网络服务器用户可以访问该文件(使用ProcessMonitor来监控访问权限。)

我还检查了this post,但没有再进一步了。是否有其他星座可能会忽略web.config设置?我从未对上面显示的方法有任何问题(即参考一个或多个配置部分),但今天我们花了几个小时试图解决这个问题,我们无法在这里看到我们错在哪里。

更新1

按照@ jbl的评论我尝试按如下方式访问设置:

((ClientSettingsSection)ConfigurationManager.GetSection( "applicationSettings/MyProject.Properties.Settings" )).Settings.Get("MySetting")

不幸的是,在本地测试中,这(也)按预期工作,但在服务器上 - 再次 - 使用默认值,并忽略web.config中applicationSettings下的值。

更新2

从IIS删除Web应用程序并创建新应用程序也不起作用。

4 个答案:

答案 0 :(得分:1)

在我的案例中,答案很简单,因为我现在感到很尴尬,我只是感到高兴的是,不是我一个人忽略了错误:

  • WCF网络服务端点有几个类似的条目
  • 我在服务器上使用的web.config版本不是最近的版本
  • 正在使用web.config中的四个条目,最近一个中的五个
  • 我只遇到最新条目缺失条目的问题,不幸的是我的案例中首先使用了代码
  • 由于编译到二进制文件中的默认设置,我确实得到了一个值,而不是我期望的值

我一旦用缺失的设置更新了文件,一切正常,很抱歉所有的混乱(至少花了我50分......)。

答案 1 :(得分:0)

你可以尝试一下:

ConfigurationManager.OpenExeConfiguration("C:\inetpub\wwwroot\[drill down to Web.config path on server]").GetSection(etc);

我知道在我思考我从Web.config读取之前我遇到了问题,但我实际上是在阅读MyDll.dll.config或MyExe.exe.config或其他内容无意的。

如果该行仍然产生意外结果,我只能建议逐步执行代码(将Visual Studio调试器附加到您的Web应用程序)并看到该行确实按照您的想法命中。

答案 2 :(得分:0)

您可能已在更新中涵盖了这些想法,但希望澄清。

以下是我想到的:

  1. 有多个web.config文件分散在整个站点文件夹中。确保没有其他web.config文件覆盖您正在查看的文件。这些可以在应用程序的其他文件夹中,或者您有转换配置文件
  2. 当您部署到服务器时,您没有覆盖先前存在的文件,因此服务器上已存在web.config文件。你是如何部署的?
  3. 有一个优先的全局web.config文件。使用删除标记删除不需要的设置:http://msdn.microsoft.com/en-us/library/aa309404(v=vs.71).aspx

       <configSections>
           <remove name="CommerceServer/application"/>
    
  4. 同样地尝试清除标签。 http://msdn.microsoft.com/en-us/library/aa903345(v=vs.71).aspx

    <configuration>
         <configSections>
             <clear/>
    

答案 3 :(得分:0)

在我的情况下,我已经重命名了我的项目,因此它使用默认存储的内部不再找到程序集文件。 例如,web.config说

<section name="MyProject.Properties.Settings"...

但我的集会现在是:Company.MyNewProject 所以你必须在配置文件中更改它,例如

<section name="Company.MyNewProject.Properties.Settings"