c# - Visual Studio c# 相对路径,程序搜索两个路径,即使它找到了正确的路径

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

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

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

我在尝试访问文件夹资源中的文件时遇到了问题 (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 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

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

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

最佳答案

我认为这里发生的事情并不是程序没有在多个位置搜索文件,而是从不同位置加载进行相关文件搜索的程序集。 .NET 有一个引人入胜且鲜为人知的机制来查找程序集并加载它,本文档对此进行了描述:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

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

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

关于c# - Visual Studio c# 相对路径,程序搜索两个路径,即使它找到了正确的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43563092/

相关文章:

c# - 为什么此对象相等性测试失败?

c# - 无法启动程序,访问被拒绝 C# net6.0

c# - 在 ViewModelLocator 中注册所有 View 模型和服务

c++ - 不能使用来自另一个文件的类 (c++)

C# MVC 如何将按钮值传回 Controller ?

c# - 使用 Azure IOT 库创建 Xamarin.Forms .Net Standard 应用程序?

c# - 如果未设置图像的 DPI,WPF/WIC,如何找到它?

c# - WPF - 水平滚动条拇指宽度

visual-studio - 如何重新安装 Visual Studio.net 的试用版?

c# - 如何允许多种类型的部署?