CSharp - 无法使用 Assembly.GetExecutingAssembly(). GetName ( ) 检索完全限定的程序集名称

  显示原文与译文双语对照的内容
0 0

我正在尝试从 C# 中当前正在执行的程序集提取一个嵌入的资源。

我完全限定的程序集名称的格式为 Alpha.Beta.Gamma.Delta.MyTaskLibrary ( 显然,这不是实际上是名称;但parts的数量正好对应于我所拥有的名称) 。 项目的默认命名空间为 Alpha.Beta.Gamma.Delta.MyTaskLibrary

当我执行 System.Reflection.Assembly.GetExecutingAssembly().GetName().Name 它显示的不是上面的名字,而是向我展示了英镑的Gamma.Delta.MyTaskLibrary

另一方面,当我做 typeof(ClassName).AssemblyQualifiedName ,我获得了上面的完全限定名,以及版本。文化和 public 密钥标记。

为什么在行为上存在这种差异?

:我的最终目标是从这个程序集中获取一个嵌入资源,方法是使用


Assembly.GetExecutingAssembly().GetManifestResourceStream(assemblyName +"." + fileName)

正是这个 assemblyName 我正试图从。 我同时尝试了这个方法调用 "Alpha.Beta.Gamma.Delta.MyTaskLibrary.ResourceFile.ext""Gamma.Delta.MyTaskLibrary.ResourceFile.ext" 而且只有前者。

时间: 原作者:

0 0

System.Reflection.Assembly.GetExecutingAssembly().GetName().Name 为你提供程序集的名称。 通常它是程序集所在的文件的名称。

换句话说,你可以将程序集命名为 Abcde.dll 并且具有命名空间 My.Namespace.Name.Inside.Of.Abcde.Assembly 它们不相关。项目命名空间的默认值是。is 。 嗯这是默认的。 它不会被编译成生成的程序集。 这只是 Visual Studio的一个提示,如果你将新项添加到这个具体项目中,它应该将 class/interface/whatever 放置。

你如何获得在请求中没有提到的类的名称?

原作者:
0 0

在程序集上调用 GetModules ( ) 并遍历模块的集合并在每个模块上访问 FullyQualifiedName属性。

...