2014-04-21 74 views
0

我們有一個if語句來嘗試確定特定文件夾的位置。根據我們是在本地運行(調試)還是在客戶端機器上(發行版),我們會在不同的地方尋找它。通過Visual Studio Designer確定項目的解決方案文件位置

#if (DEBUG) 
     firefoxPath = @"..\..\..\Includes\XulRunner\"; 
#else 
     if (System.Diagnostics.Debugger.IsAttached) { 
      firefoxPath = @"..\..\..\Includes\XulRunner\"; 
     } 
     else { 
      firefoxPath = Path.Combine(Application.StartupPath, @"XulRunner\"); 
     } 
#endif 

然而,當我們試圖運行引用這一個項目的設計,它是無法化解的路徑,作爲設計師的工作目錄是: C:\ Program Files文件(x86)的\微軟Visual Studio 12.0 \ Common7 \ IDE。如果文件夾路徑不正確,項目將無法正確運行,並且設計器在嘗試加載時會崩潰。

我們可以用它來確定我們是否正在通過設計師執行:

bool isInDesignMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime || System.Diagnostics.Debugger.IsAttached == true; 

我的問題是,我們如何確定的路徑,通過設計師的解決方案,使我們能正確解析我們需要的文件夾的路徑?

+0

爲什麼不把這個值放在web.config中作爲關鍵字,並使用transform在不同的環境中進行更改? – thsorens

+0

我們無法知道項目文件的靜態位置,因爲這是由幾個人開發的,每個人都可以通過各種途徑獲得解決方案 – user2312903

回答

0

你總是可以得到整個項目內的一些組件的情況下,訪問Assembly.CodeBase屬性和它玩:

string assemblyPath = new Uri(Assembly.GetAssembly(typeof(SomeTypeWithinYourProject)).CodeBase).AbsolutePath; 

// At least you've the Bin\Debug or Bin\Release. Now you can assume some conventions 
// and get project's directory. 
string binDir = Path.GetDirectoryName(binDir); 

我不知道您的具體情況,但也許Assembly.GetExecutingAssembly()可能是夠了,您不需要通過提供類型來加載整個組件。

相關問題