当用户处于designmode(在设计器中查看.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
的文件
我不想将此文件作为资源附加
答案 0 :(得分:1)
如果您在源代码所在的文件夹之后,请在设计和运行时使用
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是一个字符串常量,它具有项目“属性”窗口的“构建”选项卡上的输出文件夹的值。
注意:在设计时运行的代码更改并不总是立即获取。有时你必须
我希望这会有所帮助。
答案 1 :(得分:0)
有一种更简单的方法,只需声明一个这样的方法即可:
public static void GetCurrentSourcePath([CallerFilePath] string path = "")
{
}
路径将满足您的需求。