gpt4 book ai didi

c# - 如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?

转载 作者:IT王子 更新时间:2023-10-29 03:45:31 25 4
gpt4 key购买 nike

我有一个项目将模板存储在 DLL 和 EXE 旁边的 \Templates 文件夹中。

我想在运行时确定这个文件路径,但使用的技术既可以在单元测试中使用,也可以在生产中使用(而且我不想在 NUnit 中禁用影子复制!)

Assembly.Location 不好,因为它在 NUnit 下运行时返回影子复制程序集的路径。

Environment.CommandLine 的用途也很有限,因为在 NUnit 等中它返回 NUnit 的路径,而不是我的项目。

Assembly.CodeBase 看起来很有前途,但它是一个 UNC 路径:

file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe

现在我可以使用字符串操作将其转换为本地文件系统路径,但我怀疑在某处的 .NET 框架中隐藏了一种更简洁的方法。有人知道推荐的方法吗?

(如果 UNC 路径不是 file:/// URL 在这种情况下绝对没问题)

最佳答案

您需要使用 System.Uri.LocalPath:

string localPath = new Uri("file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe").LocalPath;

因此,如果您想要当前正在执行的程序集的原始位置:

string localPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;

LocalPath 包括程序集的文件名,例如,

D:\projects\MyApp\MyApp\bin\debug\MyApp.exe

如果您想要程序集的目录,请使用 System.IO.Path.GetDirectoryName():

string localDirectory = Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);

这会给你:

D:\projects\MyApp\MyApp\bin\debug

关于c# - 如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com