不同的应用程序设置取决于配置模式

Max*_*ich 16 .net c# vb.net settings appsettings

是否有人知道我可以在.Net应用程序中设置应用程序当前开发模式的应用程序(或用户)级别设置?IE:调试/发布

更具体地说,我有一个url引用我的应用程序设置中保存的webservices.在发布模式期间,我希望这些设置在调试模式期间指向http://myWebservice.MyURL.com我希望这些设置为http://myDebuggableWebService.MyURL.com.

有任何想法吗?

ne1*_*10s 17

这对派对来说有些晚了,但我偶然发现了一种实现文件web.transform方法的好方法app.config.(即它使用命名空间http://schemas.microsoft.com/XML-Document-Transform)

我认为这很"好",因为它是纯xml方法,不需要第三方软件.

  • 根据您的各种构建配置,父/默认App.config文件来自.
  • 这些后代只会覆盖他们需要的东西.

在我看来,这比必须保持x完整复制的配置文件数量要复杂得多,比如在其他答案中.

这里发布了一个演练:http: //mitasoft.wordpress.com/2011/09/28/multipleappconfig/


看,妈妈 - 我的IDE中没有明确的构建后事件!

  • 对任何 Visual Studio 版本使用“Project=”$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets”`(来自链接中的注释)。 (2认同)

dot*_*NET 16

我知道这是多年前提出的,但以防万一有人在寻找我使用的简单有效的解决方案.

  1. 转到项目属性,"设置"选项卡(您将看到您的Web服务URL或此处已列出的任何其他设置).

  2. 单击"设置"页面上的"查看代码"按钮.

  3. 在构造函数中键入this.

    this.SettingsLoaded += Settings_SettingsLoaded;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在构造函数下添加以下函数:

    void Settings_SettingsLoaded(object sender, System.Configuration.SettingsLoadedEventArgs e)
    {
        #if(DEBUG)
        this["YOUR_SETTING_NAME"] = VALUE_FOR_DEBUG_CONFIGURATION;
        #else
        this["YOUR_SETTING_NAME"] = VALUE_FOR_RELEASE_CONFIGURATION;
        #endif
    }
    
    Run Code Online (Sandbox Code Playgroud)

现在,无论何时运行项目,它都只编译与当前构建配置匹配的行.


hhr*_*avn 6

据我所知,没有内置的方法可以做到这一点.在我们的项目中,我们维护了4个不同的设置文件,并通过在构建的预构建步骤中将每个文件复制到活动文件中来切换它们.

copy "$(ProjectDir)properties\settings.settings.$(ConfigurationName).xml" "$(ProjectDir)properties\settings.settings"
copy "$(ProjectDir)properties\settings.designer.$(ConfigurationName).cs" "$(ProjectDir)properties\settings.Designer.cs"
Run Code Online (Sandbox Code Playgroud)

几年来,这对我们来说是完美无缺的.只需更改目标,也可以切换整个配置文件.

编辑:这些文件名为例如settings.settings.Debug.xml,settings.settings.Release.xm升等等.

Scott Hanselman描述了一种稍微"聪明"的方法,唯一的区别是我们没有检查文件是否发生了变化:http: //www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx