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