2

Assembly.Location 给出了程序集的简单路径。不幸的是,在单元测试或 ASP.NET 等阴影环境中运行时,这是空的。但是,Codebase 属性可用,并提供了一个可以替代使用的 URI。在哪些情况下它不返回以 开头的 URI file:///?或者换句话说:在哪些情况下这不起作用或会返回不可用的结果?

Assembly assembly = GetType().Assembly;    
Uri codeBaseUri = new Uri(assembly.CodeBase);
string path = codeBaseUri.LocalPath;
4

3 回答 3

3

可以直接通过 HTTP 加载程序集,例如在 ClickOnce 部署中:

Assembly assembly = Assembly.LoadFrom("http://server/app.dll");
Uri codeBaseUri = new Uri(assembly.CodeBase);
Debug.Assert(codeBaseUri.Scheme == "http"); 
Debug.Assert(codeBaseUri.LocalPath == "");
Debug.Assert(assembly.Location == "");
于 2009-10-23T09:35:29.597 回答
0

此外,# char 作为片段分隔符受到威胁。有关简短说明,请参见http://blogs.msdn.com/ncl/archive/2010/02/23/system-uri-faq.aspx(第 9 节)。

使用 Assembly.EscapedCodeBase 而不是 Assembly.CodeBase 来对抗它。

于 2010-05-07T07:22:54.410 回答
0

Assembly.CodeBase古老的问题,但我发现了一个相关的、相当大的新功能改变了画面:根据https://docs.microsoft.com/en-us/dotnet/core/deploying/single将 dotnet 核心应用程序打包到单个文件中会中断-file#api-incompatibility

于 2020-11-11T14:24:10.263 回答