c# - 如果路径包含 "#",则 System.Uri 无法提供正确的 AbsolutePath 和 LocalPath

标签 c# .net

我有 C# 代码试图使用以下代码行获取正在执行的程序集的 LocalPath:

Uri uri = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;

这段代码适用于所有各种路径。它开始无法提供正确的 AbsolutePathLocalpath,因为正在执行的程序集路径中包含一个 #。

Assembly.GetExecutingAssembly().CodeBase 给出 "C:\c#\ExcelAddin1.1.0\GSRExcelPlugin\bin\Debug\Common.dll"

但是 new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath 给出了“C:\c”,而它应该给出了“C:\c#\ExcelAddin1.1.0\GSRExcelPlugin\bin\Debug\”。

有什么我需要处理的,或者 Uri 类的使用方式有问题吗?

如果这是 .net 框架问题,我应该如何向 Microsoft 报告此问题?

最佳答案

System.IO.FileInfo logger = new System.IO.FileInfo(Path.Combine(Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath), "settings.config"));

使用 EscapedCodeBase 而不是 CodeBase 解决了这个问题。在我偶然发现之前,我没有意识到这已经被处理了。:)

关于c# - 如果路径包含 "#",则 System.Uri 无法提供正确的 AbsolutePath 和 LocalPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896572/

相关文章:

c# - 将大流写入 C#.Net 64K by 64K 中的文件

c# - 如何使多个文本框只读

.net - SqlParameter 如何知道类型

c# - (自动)依赖注入(inject)绑定(bind)机制

c# - 代码隐藏中的电子邮件格式

c# - 一个类用于两个 JSON 响应

c# - 以编程方式打印文档

c# - ASP.Net 核心 : How do I update (change/add/remove) nested item objects (One-to-Many relationship)?

c# - Linq-to-Entities,比较不同字段/列中的 int 值并返回最大值

c# - 如何在表单窗口中仅拖放一个文件