繁体   English   中英

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

[英]Visual Studio c# relative path, program searching two paths even when it finds the correct one

我正在使用Visual Studio开发Windows桌面应用程序。 我正在使用WPF for UI在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 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用户控件。

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

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

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

因此,如果我是对的,那么您正在追逐阴影。 这是开发机器上的行为产物,一旦部署了应用程序,该行为就会消失,.NET只能在一个地方找到发布程序集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM