C# 获取源目录';在WPF';s设计模式
当用户处于设计模式时(在设计器中查看.xaml文件),我想从位于源目录中的文件中检索一些内容 我当前的代码如下所示:C# 获取源目录';在WPF';s设计模式,c#,wpf,C#,Wpf,当用户处于设计模式时(在设计器中查看.xaml文件),我想从位于源目录中的文件中检索一些内容 我当前的代码如下所示: #if DEBUG if ((bool)(System.ComponentModel.DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(System.Windows.DependencyObject)).DefaultValue)) // design mode
#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希望成为解决方案。美好的