gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:40:14 31 4
gpt4 key购买 nike

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

下面的答案虽然仍然有效,但它是为 Microsoft 不再支持的 .Net 4.0 编写的(生命周期结束于 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com