21

アプリケーションの現在の開発モードを条件とする.Netアプリケーションでアプリケーション(またはユーザー)レベルの設定を設定できる方法を知っている人はいますか? IE: デバッグ/リリース

具体的には、アプリケーション設定に保持されている Web サービスへの URL 参照があります。リリース モードでは、これらの設定がhttp://myWebservice.MyURL.comを指すようにしたいと思います。デバッグ モードでは、これらの設定をhttp://myDebuggableWebService.MyURL.comにしたいと思います。

何か案は?

4

6 に答える 6

18

これはパーティーにはやや遅れていますが、ファイルのweb.transformアプローチを実装する良い方法を見つけました。app.config(つまり、名前空間を利用しますhttp://schemas.microsoft.com/XML-Document-Transform)

これは純粋な xml アプローチであり、サードパーティのソフトウェアを必要としないため、「いい」と思います。

  • さまざまなビルド構成に従って、親/デフォルトの App.config ファイルが派生します。
  • これらの子孫は、必要なものだけをオーバーライドします。

x私の意見では、これは、他の回答のように、全体がコピーされる構成ファイルの数を維持する必要があるよりも、はるかに洗練されており、堅牢です。

ウォークスルーがここに投稿されています: http://mitasoft.wordpress.com/2011/09/28/multipleappconfig/


ほら、ママ - 私の IDE には明示的なビルド後のイベントはありません!

于 2014-12-18T12:31:29.653 に答える
15

これは何年も前に尋ねられたことは知っていますが、誰かが私が使用するシンプルで効果的なソリューションを探している場合に備えて.

  1. プロジェクトのプロパティの [設定] タブに移動します (Web サービスの URL またはここに既にリストされているその他の設定が表示されます)。

  2. 設定ページにある「コードを表示」ボタンをクリックします。

  3. これをコンストラクターに入力します。

    this.SettingsLoaded += Settings_SettingsLoaded;
    
  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
    }
    

これで、プロジェクトを実行するたびに、現在のビルド構成に一致する行のみがコンパイルされます。

于 2012-09-18T22:48:49.557 に答える
7

私の知る限り、これを行う組み込みの方法はありません。私たちのプロジェクトでは、4 つの異なる設定ファイルを維持し、ビルドのビルド前のステップでアクティブなファイルにそれぞれをコピーすることでそれらを切り替えます。

copy "$(ProjectDir)properties\settings.settings.$(ConfigurationName).xml" "$(ProjectDir)properties\settings.settings"
copy "$(ProjectDir)properties\settings.designer.$(ConfigurationName).cs" "$(ProjectDir)properties\settings.Designer.cs"

これは、数年間私たちにとって完璧に機能しました. ターゲットを変更するだけで、構成ファイル全体も切り替えられます。

編集:ファイルの名前はsettings.settings.Debug.xmlsettings.settings.Release.xml などです。

Scott Hanselman は、少し「賢い」アプローチを説明しています。唯一の違いは、ファイルが変更されたかどうかを確認するチェックがないことです: http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

于 2010-06-22T05:06:06.847 に答える
4

すべてを 1 つの構成ファイルに保持したい場合は、カスタム構成セクションを app.settings に導入して、デバッグ モードとリリース モードのプロパティを保存できます。

開発モード固有の設定を保存するアプリ内のオブジェクトを永続化するか、デバッグ スイッチに基づいて既存のアプリ設定をオーバーライドできます。

コンソール アプリの簡単な例 (DevModeDependencyTest) を次に示します。

App.config :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="DevModeSettings">
      <section name="debug" type="DevModeDependencyTest.DevModeSetting,DevModeDependencyTest" allowLocation="true" allowDefinition="Everywhere" />
      <section name="release" type="DevModeDependencyTest.DevModeSetting,DevModeDependencyTest" allowLocation="true" allowDefinition="Everywhere" />
    </sectionGroup>
  </configSections>
  <DevModeSettings>
    <debug webServiceUrl="http://myDebuggableWebService.MyURL.com" />
    <release webServiceUrl="http://myWebservice.MyURL.com" />
  </DevModeSettings>
  <appSettings>
    <add key="webServiceUrl" value="http://myWebservice.MyURL.com" />
  </appSettings>
</configuration>

カスタム構成を格納するオブジェクト (DevModeSettings.cs):

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace DevModeDependencyTest
{
    public class DevModeSetting : ConfigurationSection
    {
        public override bool IsReadOnly()
        {
            return false;
        }

        [ConfigurationProperty("webServiceUrl", IsRequired = false)]
        public string WebServiceUrl
        {
            get
            {
                return (string)this["webServiceUrl"];
            }
            set
            {
                this["webServiceUrl"] = value;
            }
        }
    }
}

カスタム構成設定 (DevModeSettingsHandler.cs) にアクセスするためのハンドラー:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace DevModeDependencyTest
{
    public class DevModeSettingsHandler
    {
        public static DevModeSetting GetDevModeSetting()
        {
            return GetDevModeSetting("debug");
        }

        public static DevModeSetting GetDevModeSetting(string devMode)
        {
            string section = "DevModeSettings/" + devMode;

            ConfigurationManager.RefreshSection(section); // This must be done to flush out previous overrides
            DevModeSetting config = (DevModeSetting)ConfigurationManager.GetSection(section);

            if (config != null)
            {
                // Perform validation etc...
            }
            else
            {
                throw new ConfigurationErrorsException("oops!");
            }

            return config;
        }
    }
}

最後に、コンソール アプリ (DevModeDependencyTest.cs) へのエントリ ポイント:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace DevModeDependencyTest
{
    class DevModeDependencyTest
    {
        static void Main(string[] args)
        {
            DevModeSetting devMode = new DevModeSetting();

            #if (DEBUG)
                devMode = DevModeSettingsHandler.GetDevModeSetting("debug");
                ConfigurationManager.AppSettings["webServiceUrl"] = devMode.WebServiceUrl;
            #endif

            Console.WriteLine(ConfigurationManager.AppSettings["webServiceUrl"]);
            Console.ReadLine();
        }
    }
}
于 2010-06-22T09:46:08.373 に答える
3

SlowCheetah は、App.config だけでなく、プロジェクト内の任意の XML ファイルに必要な機能を追加します - http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

于 2013-01-28T12:26:16.377 に答える
1

解決すべき同様の問題があり、XDT (web.config) 変換エンジンを使用することになりました。これは、ここで見つけることができる ne1410s からの回答で既に提案されています:

しかし、彼のリンクで説明されているように手動で行う代わりに、このプラグインを使用しました: https://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859

プラグインは構成のセットアップを支援するだけであり、ビルドする必要はなく、プラグインやその他のツールを必要とせずに、他のマシンまたはビルド サーバーでソリューションをビルドできます。

于 2016-02-10T12:05:15.247 に答える