在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应用程序并创建新应用程序也不起作用。
答案 0 :(得分:1)
在我的案例中,答案很简单,因为我现在感到很尴尬,我只是感到高兴的是,不是我一个人忽略了错误:
我一旦用缺失的设置更新了文件,一切正常,很抱歉所有的混乱(至少花了我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)
您可能已在更新中涵盖了这些想法,但希望澄清。
以下是我想到的:
有一个优先的全局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/>
答案 3 :(得分:0)
在我的情况下,我已经重命名了我的项目,因此它使用默认存储的内部不再找到程序集文件。 例如,web.config说
<section name="MyProject.Properties.Settings"...
但我的集会现在是:Company.MyNewProject 所以你必须在配置文件中更改它,例如
<section name="Company.MyNewProject.Properties.Settings"