2011-07-25 72 views
1

我試圖從C#中當前正在執行的程序集中提取嵌入式資源。無法使用Assembly.GetExecutingAssembly()獲取完全限定的程序集名稱。GetName()

我完全合格的組件名稱的形式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

System.Reflection.Assembly.GetExecutingAssembly().GetName().Name給你一個程序集的名字。通常它是程序集所在文件的名稱。

換句話說,你可能有名爲Abcde.dll的程序集並且具有命名空間My.Namespace.Name.Inside.Of.Abcde.Assembly。他們不相關。而項目的默認命名空間是...嗯,這是默認的。它不會被編譯到生成的程序集中。這只是Visual Studio的一個提示,如果你在這個具體項目中添加新項目,它應該放置一個類/接口/任何名稱空間。

你打算如何得到你的請求中沒有提到的類名?

相關問題