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

时间:2011-07-25 04:14:00

标签: c# .net

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

我的完全限定版程序集名称的格式为 Alpha.Beta.Gamma.Delta.MyTaskLibrary (显然,这不是实际上的名称;但部件的数量完全对应到我的名字。项目的默认命名空间是Alpha.Beta.Gamma.Delta.MyTaskLibrary

当我执行System.Reflection.Assembly.GetExecutingAssembly().GetName().Name时,它不会显示上述名称,而是显示 Gamma.Delta.MyTaskLibrary

另一方面,当我typeof(ClassName).AssemblyQualifiedName时,我会获得上面的完全限定名称以及版本,文化和公钥令牌。

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

编辑:我的最终目标是使用

从此程序集中获取嵌入资源
Assembly.GetExecutingAssembly().GetManifestResourceStream(assemblyName + "." + fileName)

我正在尝试检索这个assemblyName。我尝试使用"Alpha.Beta.Gamma.Delta.MyTaskLibrary.ResourceFile.ext""Gamma.Delta.MyTaskLibrary.ResourceFile.ext"进行此方法调用,只有前者有效。

2 个答案:

答案 0 :(得分:2)

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

换句话说,您可以使用名为Abcde.dll的程序集并使用名称空间My.Namespace.Name.Inside.Of.Abcde.Assembly。他们没有关系。而项目的默认命名空间是...... hm,它是默认的。它不会被编译到生成的程序集中。它只是Visual Studio的一个提示,如果你在这个具体的项目中添加新的项目,它应该放置一个类/接口/等等。

您如何获得您的请求中甚至没有提及的课程名称?

答案 1 :(得分:0)

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