Visual Studio c#relative path,程序搜索两条路径,即使它找到了正确的路径

时间:2017-04-22 18:34:08

标签: c# wpf visual-studio path visual-studio-2017

我正在使用visual studio为Windows开发桌面应用程序。我正在使用WPF编程使用C#进行UI编程。

我用谷歌搜索寻找答案,但没有发现任何答案。很可能是因为我不确切知道实际问题是什么。

我遇到了一个问题,我正在尝试访问文件夹资源中的文件 (C:\用户\ MYNAME \项目\ MyProject的\项目名\资源\ XML \的test.xml) 使用此代码:

XElement xmlFromFile = XElement.Load(@"..\..\resources\xml\test.xml");

问题是找到了文件,可以通过xmlFromFile变量访问xml,但程序也会搜索

D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\resources\xml\test.xml

如果我尝试这样做也会发生同样的事情:

static string codePath = Directory.GetParent(Directory.GetParent(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)).FullName).FullName;
FileLog log = new FileLog(codePath + "\\logs\\log.txt");
log.Log("Test")

当codePath引用类文件所在的目录时,FileLog是一个只使用File.AppendAllText(path,string)登录文件的类。 这段代码给出了相同的错误,但路径却是:

C:\Users\MyName\AppData\Local\Microsoft\VisualStudio\15.0_919b9cb1\Designer\ShadowCache\logs\log.txt

但是这个也将输入字符串(test)写入正确位置的正确文件。那么,如果它有效,为什么这是一个问题呢?虽然它在这里正常工作,但问题是WPF没有像往常那样给我预览UI,可能还有其他问题,但我没有注意到。预览只是说明:无法创建“Home”的实例。 Home是WPF UserControl。

所以我的问题是:如何修复代码,以便程序不会在两个地方搜索(如果确实是这样做的话)?。

1 个答案:

答案 0 :(得分:0)

这里发生的事情我认为不是程序没有搜索文件的多个位置,而是从不同的地方加载正在进行相关文件搜索的程序集。 .NET有一个迷人的,很少被理解的机制,用于查找程序集并加载它,如本文档所述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

所以我认为正在发生的事情是你在不同的上下文中检查这种行为(即使用调试器,在设计器中等),并且正在使用的程序集是从不同的地方加载的,因此评估相对的文件路径不同。

所以,如果我是对的,那么你就是在追逐一个影子。这是开发机器上的行为工件,一旦部署应用程序就会消失,并且.NET只有一个地方可以找到发布程序集。