【问题标题】:ASP.NET MVC3: Debug and Release app settings not working [duplicate]ASP.NET MVC3:调试和发布应用程序设置不起作用[重复]
【发布时间】:2011-09-06 17:42:25
【问题描述】:

没有正确读取我的调试和发布 web.config 应用设置。

Web.config:

<appSettings>
 <add key="webpages:Version" value="1.0.0.0"/>
 <add key="ClientValidationEnabled" value="true"/>
 <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

Web.Debug.config

<appSettings>
    <add key="ErrorEmailAddress" value="developerEmail@email.com" />
    <add key="TestModeEmailAddress" value="developerEmail@email.com" />
</appSettings>

Web.Release.config

<appSettings>
    <add key="ErrorEmailAddress" value="prodErrorEmail@email.com" />
</appSettings>

但是,调用:

WebConfigurationManager.AppSettings["ErrorEmailAddress"]

正在返回 null(调试时)。

我尝试添加 xdt:Transform="Insert" 例如

<add key="ErrorEmailAddress" value="prodErroEmail@email.com" xdt:Transform="Insert" />

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc web-config


    【解决方案1】:

    好的,我想通了。

    在这里回答:How can I use Web.debug.config in the built-in visual studio debugger server?

    因此配置文件仅在您发布时合并,而不是在您针对本地服务器运行时合并。相当愚蠢的 IMO,你什么时候会使用 Web.Debug.config?

    我会按照这里的建议做:Use Visual Studio web.config transform for debugging

    只需将 Web.config 作为我的默认调试配置文件,然后在发布时进行发布。在这一点上看不到 Web.Debug.config 的用途。

    不过,这很烦人,因为我的大部分设置都希望为所有环境设置一种方式,但在开发时(例如 customErrors On)。这意味着我必须在 Web.config 中设置它们以进行调试,然后在我的所有其他环境配置中更改它们。

    感谢大家的回复。

    【讨论】:

    【解决方案2】:
    <!-- Web.Config -->
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <appSettings configSource="AppSettings.config" />
    </configuration>
    
    <!-- AppSettings.config -->
    <appSettings>
    <add key="MyDoe" value="Arnold" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
    </appSettings>
    
    <!-- Web.Release.Config -->
    <?xml version="1.0"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <appSettings>
    <add key="MyDoe" value="John" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
    </appSettings>
    </configuration>
    

    【讨论】:

    • 谢谢我试图弄清楚如何将 部分从我的 ASP.NET MVC Apps web.config 移动到 app.config 中。我假设我可以使用类似这样的行进行相同的 w/log4net 设置等:... 将尝试!
    【解决方案3】:

    我发现了,

    首先,您将使用空值或调试值在 web.Config 的 appSetting 上添加应用设置条目

    <add key="Environment" value="Localhost" />
    

    然后你在 web.release.config 上添加相同的不同值,但添加转换部分

     <add key="Environment" value="DifferentValue"  xdt:Transform="Replace" xdt:Locator="Match(key)"/>
    

    然后,当您在发布模式下发布网站时,您将获得发布值,您也可以将其添加到调试配置中,然后以不同的值发布到调试配置中

    【讨论】:

      【解决方案4】:

      我从来没有在默认 web.config 中没有密钥的情况下使用它。

      这对我有用:

      Web.config

      <add key="Environment" value="Localhost" />
      

      Web.Debug.config

      <add key="Environment" value="Development" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
      

      Web.Release.config

      <add key="Environment" value="Production" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
      

      【讨论】:

      • 还是不行。不知道我做错了什么。
      • @Alistair - 你试过用ConfigurationManager 代替WebConfigurationManager 吗?我从来没有用过WebConfigurationManager
      • @Alistair - 好吧,我没主意了。我想说检查你的构建配置是否有任何构建后任务等。但如果这只是本地调试,不确定还会发生什么。
      【解决方案5】:

      您可以发布您所有的 web.configs 吗?默认、调试和发布?测试它是否正常工作的一种方法可能是设置不同的连接字符串以进行调试和发布,并检查它在您的应用运行时使用的连接字符串。

      【讨论】:

        【解决方案6】:

        你是在发布模式下调试吗?在用于开始调试的绿色箭头旁边的工具栏中,您可以设置一个模式,确保它没有发布。

        【讨论】:

        • 我处于调试模式。但在任何一种情况下,据我所知,它都不应该为空。
        • 如果您添加新键,我很确定它们都需要插入转换。
        • 如前所述,即使插入也无法正常工作
        猜你喜欢
        • 2011-06-02
        • 2011-07-27
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 2019-07-01
        • 1970-01-01
        相关资源
        最近更新 更多