2014-01-08 32 views
1

我想,當用戶在將designMode檢索從位於源目錄中的文件的一些內容(查看在設計師的.xaml文件)獲取源目錄的路徑,而在WPF的設計模式

我當前的代碼如下所示:

#if DEBUG 
      if ((bool)(System.ComponentModel.DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(System.Windows.DependencyObject)).DefaultValue)) // design mode 
      { 
       var f = new System.IO.StreamReader(@".\somedir\myfile.txt"); 
       // do something with data from that file 
       f.Close(); 
      } 
#endif 

但本例中的當前目錄是C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE而我的文件根本就沒有。

我試圖通過改變當前目錄:

System.IO.Directory.SetCurrentDirectory(System.Reflection.Assembly.GetExecutingAssembly().Location);

但是這會導致類似:

C:\Users\User\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\ckauoyuj.mbg\vihlqa20.ba2

其中只包含.exe.pdb文件 - 沒有文件標記爲Content在那裏

我不想將此文件添加爲資源

回答

1

如果你是哪裏的源代碼存在,在設計時和運行時的文件夾後,使用

var trace = new StackTrace(true); 
var frame = trace.GetFrame(0); 
var sourceCodeFile = Path.GetDirectoryName(frame.GetFileName()); 

如果你是在後bin/debug或bin/release文件夾...

由於代碼庫的根文件夾可能因機器而異,但項目的輸出文件夾在機器間是相同的(通常是相對於代碼基本根),您可以使用上面的代碼與

Path.Combine(sourceCodeFile, outputFolder); 

其中outputFolder是一個字符串常量,它具有項目「屬性」窗口的「生成」選項卡上的輸出文件夾的值。

注意:對設計時運行的代碼進行的更改並不總是立即生效。有時你必須

  • 重新編譯爲項目。
  • 關閉所有受更改影響的設計/代碼窗口。
  • 運行應用程序
  • 上述所有

我希望這有助於。

+0

謝謝,這是一個可行的解決方案。我仍然在尋找更優雅的解決方案,因爲這需要提供相對路徑來源的根文件夾,移動文件需要更改代碼。但是,如果我找不到,我會接受你的答案:) – Adassko

+0

源根文件夾從StackTraceFrame獲得。如果您移動項目,則從中返回的值將相應更改。不幸的是,我還沒有弄清楚如何獲得從源文件到輸出文件夾的相對路徑。如果我知道了,我會更新答案。 –