C# 获取源目录';在WPF';s设计模式

C# 获取源目录';在WPF';s设计模式,c#,wpf,C#,Wpf,当用户处于设计模式时(在设计器中查看.xaml文件),我想从位于源目录中的文件中检索一些内容 我当前的代码如下所示: #if DEBUG if ((bool)(System.ComponentModel.DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(System.Windows.DependencyObject)).DefaultValue)) // design mode

当用户处于设计模式时(在设计器中查看.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:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\Common7\IDE
,而我的文件根本不在那里

我已尝试通过以下方式更改当前目录:

System.IO.Directory.SetCurrentDirectory(System.Reflection.Assembly.GetExecutionGassembly().Location)

但这会导致以下情况:

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

仅包含
.exe
.pdb
文件-其中没有标记为
内容的文件


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

如果您在源代码所在的文件夹之后,请在设计和运行时使用

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是一个字符串常量,在“项目属性”窗口的“生成”选项卡上具有输出文件夹的值

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

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

我希望这会有所帮助。

有一种更简单的方法,只需声明如下方法:

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

    }

Path将具有您所需的功能。

谢谢,这是一个有效的解决方案。我仍然在寻找一个更优雅的解决方案,因为这个解决方案需要提供到源代码根文件夹的相对路径,移动文件需要更改代码。但是如果我没有找到,我会接受你的答案:)源根文件夹是从StackTraceName获得的。如果移动项目,此操作返回的值将相应更改。不幸的是,我还没有弄清楚如何获得从源到输出文件夹的相对路径。如果我弄明白了,我会更新答案。这在我的设计时VS10中是例外的。而不是DTE和许多Path希望成为解决方案。美好的