2010-08-13 92 views
2

應用程序清單和程序集清單之間的區別是什麼?每個人在哪裏使用?哪一個是在.dll或.exe資源中找到的? (或兩者都可以在那裏?)。應用程序清單和程序集清單之間的區別

對不起,如果它的問題太多,但如果任何人可以向我解釋這將是非常有益的。我問這個問題的原因是我希望能夠從嵌入PE文件中的清單中提取信息。我發現清單的這些描述,但有兩個,我不知道哪一個遵循:

Application manifest description
​​3210

編輯:沒有,我不希望使用任何API調用。我自己寫這一切。

回答

0

看來我必須遵循兩個:

正如在DLL中的資源,大會 可用於私人使用的 的DLL。程序集清單不能將 作爲資源包含在EXE中。 EXE文件可能包含應用程序 清單作爲資源。

(信息發現here)。所以看起來可執行文件應用程序清單嵌入資源和(DLL)有程序集清單。既然他們都是PE(可移植的可執行文件),我將需要解析這兩種類型。

0

應用程序清單通常嵌入在EXE中,具有諷刺意味的是Dlls,並指定EXE或DLL依賴於哪些程序集。

程序集清單可以嵌入到DLL中,也可以作爲一個單獨的文件存在磁盤上,併爲程序集提供一個標識和一個資源列表:dll的,激活自由com對象和窗口類。

如果程序集的名稱是dll的名稱,那麼同一個清單最終會被用作應用程序清單以確定dll的依賴關係,並使用程序集清單來查看程序集導出的內容。這個選項對於本地程序集來說真的很瘋狂,通常更好的方法是沿着company.product.module的行創建一個複雜名稱的程序集,然後只需要一個簡單的module.dll作爲它的一個條目。

2

簡而言之,兩者是完全獨立的概念,不幸有相似的名字。

應用程序清單是嵌入在XML文件中,或者與沿着分佈,一個PE二進制(管理或天然的),發出指示的事情如的SxS組件的依賴關係,需要擡高,OS版本兼容性OS加載器等。

程序集清單是CLI程序集中的一部分,陳述了託管程序集的依賴項,構成程序集的文件,程序集的公鑰,類型導出,CLR標誌等。您可以使用ILDASM.exe或大多數.NET反編譯器來檢查程序集的清單。

從ECMA 335(CLI的規範),部分I.9.6一個摘要:

艙單:每個組件具有聲明哪些文件 彌補裝配清單,出口什麼類型的,並需要其他 程序集來解析 程序集中的類型引用。就像CLI組件通過 CLI組件自我描述一樣,CLI組件也是如此,組件自我描述是通過它們的 清單。當一個文件構成一個裝配體時,它包含描述裝配體中定義的類型的元數據和描述裝配體本身的元數據 。當一個程序集包含多個具有元數據的文件時,每個文件都描述文件中定義的 類型(如果有),並且其中一個文件 也包含描述程序集的元數據(包括其他文件的名稱 ,它們的密碼哈希以及它們在組件外部輸出的類型 )。

需要注意的是:

  • 所有管理組件必須裝配清單,可執行文件和庫一樣;
  • 所有本機二進制文件,可執行文件和庫,可能有應用程序清單。