2

在 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用于监视访问)。

我也检查了这篇文章,但没有进一步了解。是否还有其他星座web.config可以忽略设置?上面显示的方法我从来没有遇到过任何问题(即参考一个或多个配置部分),但是今天我们花了几个小时试图解决这个问题,但我们看不出我们错在哪里。

更新 1

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

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

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

更新 2

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

4

4 回答 4

1

就我而言,答案很简单,因为我现在很尴尬,我很高兴不是只有我一个人忽略了问题所在:

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

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

于 2013-10-20T11:02:11.460 回答
1

就我而言,我已经重命名了我的项目,因此它不再使用存储在其中的默认值找到程序集文件。例如 web.config 说

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

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

<section name="Company.MyNewProject.Properties.Settings"
于 2014-11-14T00:51:52.133 回答
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 应用程序)并查看该行确实如您所想的那样被命中。

于 2013-10-08T15:18:21.227 回答
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"/>
    

同样,也可以尝试使用透明标签。http://msdn.microsoft.com/en-us/library/aa903345(v=vs.71).aspx

<configuration>
     <configSections>
         <clear/>
于 2013-10-08T15:41:22.293 回答