2013-09-30 26 views
1

在ASP.NET MVC 3 web应用程序我有一个设置与web.config文件被完全忽略,并应用默认值的问题。是该文件的相关部分如下:web.config忽略Settings.Default。 <Property>并始终使用默认值

... 
<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应用程序并创建一个新的还没有工作。

+0

这似乎是同样的问题http://forums.asp.net/t/1681296.aspx恐怕没有微不足道的答案... – jbl

+0

@jbl您链接的线程似乎在不同文件夹中讨论多个web.config文件。我所看到的是,我的单个web.config中的设置未应用(就像无法找到文件一样),并使用默认值(如DLL中指定的)。 – Gorgsenegger

+0

好吧,2011年5月19日上午05:22的消息似乎强调访问配置文件和访问自动生成的类之间的区别。我想知道你是否遇到同样的问题。 – jbl

回答

1

在我的情况下,答案很简单,因为我现在很尴尬,我只是觉得高兴的是,这不是我一个人谁忽视的什么是错的:

  • 有一对夫妇的对于WCF Web服务端点类似的条目
  • 我的服务器上使用的web.config文件的版本是不是最新的是在web.config中使用一个
  • 四个入口,五在最新的一个
  • 我只有最近的条目丢失的问题,不幸的是在我的情况下首先在代码中使用
  • 由于默认设置编译为二进制文件,我确实得到了一个值,而不是我期望的值

只要我更新了缺失设置的文件,所有工作正常,所以很抱歉所有的困惑(至少它花了我50分...)。

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应用程序),并看到,当你认为它是线确实击中。

+0

我试图让这个工作,但不幸的是我不能访问* applicationSettings *(不* appSettings *)节(它总是空)。遍布所有部分,我似乎得到某种默认值。如果你有一个工作示例,我很乐意尝试,在互联网上搜索一个没有返回任何结果。 – Gorgsenegger

+0

你有使用applicationSettings而不是appSettings的原因吗?只需继续测试,请尝试执行此操作 - http://msdn.microsoft.com/en-us/library/610xe886.ASPX。在你的Web.config中添加''标记,在其中添加一个带有一些测试值的密钥,然后使用链接页面中的代码片段来尝试读取测试设置。重要的部分是如何读取设置 - 'rootWebConfig1.AppSettings.Settings [“customsetting1”]''。您也可以尝试加载Web.config,正如我在原始答案中所指出的,只是要确保您使用的是正确的Web.config。 – pineconesundae

0

你可能已经涵盖了这些更新的想法,但要澄清。

以下是想到什么:

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

    <configSections> 
         <remove name="CommerceServer/application"/> 
    

沿着同样尝试明确标记为好。 http://msdn.microsoft.com/en-us/library/aa903345(v=vs.71).aspx

<configuration> 
    <configSections> 
     <clear/> 
+0

1 - Web应用程序的web.config位于根目录,我也检查了没有任何其他Web。在系统上配置2 - 文件绝对是用最新版本更新的,我也可以直接在服务器上编辑它们。部署通过复制和粘贴(它在测试服务器上)3 - 如上所述,系统上没有其他web.config文件可能优先对于最后一个建议 - 元素只能用于*“web”。不在应用程序目录级别的配置文件“*。 – Gorgsenegger

0

在我的情况下,我已经重命名我的项目,所以它没有找到使用默认存储在里面的程序集文件。 例如web.config中说

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

但现在我的组件:Company.MyNewProject 所以你必须改变它在配置文件中藏汉,像

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