我正在尝试从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"
进行此方法调用,只有前者有效。
答案 0 :(得分:2)
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
为您提供程序集的名称。通常它是程序集所在文件的名称。
换句话说,您可以使用名为Abcde.dll
的程序集并使用名称空间My.Namespace.Name.Inside.Of.Abcde.Assembly
。他们没有关系。而项目的默认命名空间是...... hm,它是默认的。它不会被编译到生成的程序集中。它只是Visual Studio的一个提示,如果你在这个具体的项目中添加新的项目,它应该放置一个类/接口/等等。
您如何获得您的请求中甚至没有提及的课程名称?
答案 1 :(得分:0)
您在程序集上调用GetModules()并遍历模块集合并访问每个模块上的FullyQualifiedName属性。