2013-10-07 73 views
6

我爲Visual Studio創建了一個擴展,其中一個要求的功能是它能夠將環境變量更改爲幾個選項之一,然後這些選項將被應用程序在被調試後開發。設置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來注入一個變量提供程序實例。可以是讀取環境的「生產」版本,也可以是具有硬編碼值的調試版本。