在WPF设计模式下获取源目录路径

时间:2014-01-08 14:39:04

标签: c# wpf

当用户处于designmode(在设计器中查看.xaml文件)时,我想从位于源目录中的文件中检索一些内容

我目前的代码如下:

#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的文件

我不想将此文件作为资源附加

2 个答案:

答案 0 :(得分: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是一个字符串常量,它具有项目“属性”窗口的“构建”选项卡上的输出文件夹的值。

注意:在设计时运行的代码更改并不总是立即获取。有时你必须

  • 重新编译为项目。
  • 关闭受更改影响的所有设计/代码窗口。
  • 运行应用程序
  • 以上所有

我希望这会有所帮助。

答案 1 :(得分:0)

有一种更简单的方法,只需声明一个这样的方法即可:

    public static void GetCurrentSourcePath([CallerFilePath] string path = "")
    {

    }

路径将满足您的需求。