Visual Studio c# 相对路径,程序搜索两条路径,即使它找到了正确的路径
Visual Studio c# relative path, program searching two paths even when it finds the correct one
我正在使用 visual studio 为 windows 开发桌面应用程序。我正在为 UI 使用 WPF 在 C# 中编程。
我用谷歌搜索寻找答案,但没有找到任何答案。很可能是因为我不完全知道实际问题是什么。
我 运行 在尝试访问文件夹资源中的文件时遇到问题
(C:\Users\MyName\Projects\MyProject\ProjectName\resources\xml\test.xml)
使用此代码:
XElement xmlFromFile = XElement.Load(@"..\..\resources\xml\test.xml");
问题是找到了文件并且可以通过 xmlFromFile 变量访问 xml,但是程序还搜索
D:\Program Files (x86)\Microsoft Visual Studio17\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 指的是 class 文件所在的目录,FileLog 是一个 class,它使用 File.AppendAllText(path, string) 简单地记录到一个文件。
这段代码给出了同样的错误,但是路径是:
C:\Users\MyName\AppData\Local\Microsoft\VisualStudio.0_919b9cb1\Designer\ShadowCache\logs\log.txt
但是这个也将输入字符串(测试)写入正确位置的正确文件。那么,如果它有效,为什么这是一个问题呢?虽然它在这里工作正常,但问题是 WPF 没有像往常一样给我预览 UI,可能还有其他问题,但我知道 none。预览只是指出:无法创建 "Home" 的实例。 Home 是 WPF UserControl。
所以我的问题是:如何修复代码,使程序不会在两个地方都进行搜索(如果确实是这样的话)?
我认为这里发生的事情不是程序没有在多个位置搜索文件,而是从不同位置加载进行相关文件搜索的程序集。 .NET 有一个引人入胜但鲜为人知的机制来查找程序集并加载它,在本文档中有描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
所以我认为正在发生的事情是您正在不同的上下文中检查此行为(即使用调试器,在设计器中等)并且正在使用的程序集是从不同的地方加载的,因此评估相对文件路径不同。
所以如果我是对的,那你就是在追逐影子。这是开发机器上的一种行为产物,一旦部署应用程序,它就会消失,.NET 只有一个地方可以找到发布程序集。
我正在使用 visual studio 为 windows 开发桌面应用程序。我正在为 UI 使用 WPF 在 C# 中编程。
我用谷歌搜索寻找答案,但没有找到任何答案。很可能是因为我不完全知道实际问题是什么。
我 运行 在尝试访问文件夹资源中的文件时遇到问题 (C:\Users\MyName\Projects\MyProject\ProjectName\resources\xml\test.xml) 使用此代码:
XElement xmlFromFile = XElement.Load(@"..\..\resources\xml\test.xml");
问题是找到了文件并且可以通过 xmlFromFile 变量访问 xml,但是程序还搜索
D:\Program Files (x86)\Microsoft Visual Studio17\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 指的是 class 文件所在的目录,FileLog 是一个 class,它使用 File.AppendAllText(path, string) 简单地记录到一个文件。 这段代码给出了同样的错误,但是路径是:
C:\Users\MyName\AppData\Local\Microsoft\VisualStudio.0_919b9cb1\Designer\ShadowCache\logs\log.txt
但是这个也将输入字符串(测试)写入正确位置的正确文件。那么,如果它有效,为什么这是一个问题呢?虽然它在这里工作正常,但问题是 WPF 没有像往常一样给我预览 UI,可能还有其他问题,但我知道 none。预览只是指出:无法创建 "Home" 的实例。 Home 是 WPF UserControl。
所以我的问题是:如何修复代码,使程序不会在两个地方都进行搜索(如果确实是这样的话)?
我认为这里发生的事情不是程序没有在多个位置搜索文件,而是从不同位置加载进行相关文件搜索的程序集。 .NET 有一个引人入胜但鲜为人知的机制来查找程序集并加载它,在本文档中有描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
所以我认为正在发生的事情是您正在不同的上下文中检查此行为(即使用调试器,在设计器中等)并且正在使用的程序集是从不同的地方加载的,因此评估相对文件路径不同。
所以如果我是对的,那你就是在追逐影子。这是开发机器上的一种行为产物,一旦部署应用程序,它就会消失,.NET 只有一个地方可以找到发布程序集。