2013-10-07 47 views
6

私はVisual Studio用の拡張機能を作成していますが、要求された機能の1つは、環境変数をいくつかのオプションの1つに変更できます。アプリケーションはデバッグされた後に開発されます。プロジェクトのデバッグ用にVisual Studioの環境変数を設定する

私は、次の

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Process); 
Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine); 

を試してみましたが、それが変数を持続しながら、私は実行を打ったら、プログラムにそれを渡すようには見えません。

私は試してみるためにこれを行う他の方法を探しています。彼らがハッキーであれば気にしません。

編集:明確にするために、このプロセスはデバッグ中の(任意の)プログラムに対して透過的でなければなりません。また、プログラム的な解決策でなければなりません。

答えて

3

私はあなたがデバッグしているプログラムがあなたの環境変数を取得していないと推測しています。プロセスは、プロセス起動時に環境変数を読み取ります。また、.NETアプリケーションを開発している場合は、デバッグの起動を高速化するためにVisual Studioで* .vshost.exeプロセスを作成します。 Visual Studioでは、デバッグを開始すると新しいプロセスが作成されないため、環境変数が読み取られません。

代わりに、memory mapped fileを使用して、必要なIPCを行うことができます。

+0

.vshost.exeプロセスを強制終了します。インスピレーションをありがとう – Anthony

+3

デバッグセクションのプロジェクトプロパティで、* .vshost.exeの処理を無効にすることができます。 –

4

コンパイル定数を使用できます。変数を取得するクラスを定義します。

public class MyEnvironment { 

    public string SomeVariable{ 
     get{ 

#if DEBUG 
      return "bar"; 
#else 
      return Environment.GetEnvironmentVariable("foo"); 
#endif 

     } 
    } 
} 

可変プロバイダインスタンスを挿入するために、ある種のIOCを使用することもできます。環境を読み取る "プロダクション"バージョン、またはハードコードされた値を持つデバッグバージョンです。

0

設定がprogramattically変更することができるかどうかはわからないが、私はこの質問を見てみましょう:How do I set specific environment variables when debugging in Visual Studio?

あなたがプロセスを自分で起動している場合は、Process.Start()に渡さStartInfoオブジェクトが持っていますEnvironmentVariablesプロパティを使用して調べることもできます。

関連する問題