c# - 在 WPF 的设计模式下获取源目录的路径

标签 c# wpf

当用户处于设计模式时(在设计器中查看 .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 的文件

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

最佳答案

更新答案 对于 future 的读者

下面的答案虽然仍然有效,但是为 .Net 4.0 编写的,Microsoft 不再支持该版本(生命周期结束于 2016 年)

Marco's使用 CallerFilePathAttribute 回答上面的问题是我今后将使用的解决方案。

原始答案

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

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

注意:设计时运行的代码更改并不总是立即生效。有时你必须这样做

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

我希望这会有所帮助。

关于c# - 在 WPF 的设计模式下获取源目录的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998635/

相关文章:

wpf - 在 WPF 中使用页面时更改窗口的宽度

c# - 在 WPF 中重用触发条件或多重绑定(bind)

c# - 将 tabitem 转换为窗口

c# - OleDbConnection.Open() 仅在一个项目中引发异常,相同的代码适用于其他项目

c# - 在 WPF 中捕获鼠标

c# - Nancy 模型绑定(bind)在 Chrome、IE 中不起作用

C# 变量不会更新

c# - 有没有办法解决Expression Blend的 "extract"WPF控件?

c# - 具有一个强制参数和一个可选参数的 ASP.NET MVC 路由?

c# - 将 Julia 嵌入到 C# : Garbage Collector Rewrite into C# Issues and Questions