Visual Studio 中的相对路径

Posted

技术标签:

【中文标题】Visual Studio 中的相对路径【英文标题】:Relative paths in Visual Studio 【发布时间】:2010-09-14 23:40:32 【问题描述】:

我在 Visual Studio 2005 中工作并添加了一个文本文件,需要通过右键单击解决方案资源管理器中的项目并添加 --> 新项目来解析该文件。这会将 .txt 文件放置到项目文件夹中。调试 .exe 文件位于 /bin/debug 文件夹中。

我如何使用相对路径正确地从代码中指向 txt 文件,该相对路径将正确解析为两个文件夹,同时在解决方案发布后也解析为位于同一文件夹中?

【问题讨论】:

我也想知道这个。我一直很沮丧,但是 VS 中严格的代码路径。特别是当你有 nant 构建文件时。 【参考方案1】:

如果我正确理解您的问题:在“解决方案资源管理器”中选择文件。在属性 --> 复制到输出目录下,选择“始终复制”或“如果更新则复制”。对于构建操作,选择“内容”。这会将文件复制到构建时的 /bin/debug 文件夹。从那时起,您应该可以从项目根目录中引用它。

【讨论】:

【参考方案2】:

查看Application Class。它有几个成员,可用于在安装后定位与应用程序相关的文件等。

例如,Application.ExecutablePath 告诉你正在运行的 EXE 文件的位置;然后您可以使用相对路径来查找文件,例如..\..\FileToBeParsed.txt。但是,这假设文件部署在与项目文件夹结构相同的文件夹结构中,通常情况并非如此。

在部署项目后,考虑使用 CommonAppDataPath 和 LocalUserAppDataPath 等属性来定位与应用程序相关的文件。

【讨论】:

【参考方案3】:

在磁盘上定位文件的另一种方法是将文件作为嵌入式资源直接包含在已编译的程序集中。为此,请右键单击该文件并选择“嵌入式资源”作为构建操作。然后,您可以将文件作为字节流检索:

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

更多关于嵌入式资源的信息可以在here和here找到。

如果您正在构建一个供自己使用的应用程序,David Krep 的建议是最好的:只需将文件复制到输出目录即可。如果您正在构建一个可重复使用或分发的程序集,那么嵌入式资源选项更可取,因为它将所有内容打包在一个 .dll 中。

【讨论】:

【参考方案4】:

我会添加一个后期构建步骤,将 txt 文件复制到活动配置的输出文件夹中:

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

定义了一些宏,例如“$(ConfigurationName)",$(ProjectDir)

【讨论】:

【参考方案5】:

转到项目属性 -> 配置属性 -> 调试

将“工作目录”设置为 $(TargetDir)

然后您可以在代码中使用相对路径正确引用您的文件(例如“....\foo.xml”)

【讨论】:

【参考方案6】:

Application.ExecutablePath 解决方案不适用于单元测试。会返回vstesthost.exe的路径

System.Reflection.Assembly.GetExecutingAssembly().Location 将起作用,但会给出包含程序集名称的路径。

所以这行得通:System.Reflection.Assembly.GetExecutingAssembly().Location + "\..\" + "fileToRead.txt"

但只是:

fileToRead.txt

也可以。似乎工作目录是默认执行的程序集目录。

【讨论】:

【参考方案7】:

您可以添加构建后事件以将 .txt 文件复制到构建输出文件夹。然后您的代码可以假定该文件与可执行文件位于同一文件夹中。

【讨论】:

以上是关于Visual Studio 中的相对路径的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio项目相对路径的设置,实用

Visual Studio Code 中 TypeScript 文件中的绝对模块路径解析

visual studio 路径配置解决办法

如何在 Visual Studio 中设置 DLL 文件的路径?

在 Flutter 的 Android Studio 中启用相对路径自动导入

visual studio不用点击运行,打开直接运行