Dot-Net

確定程序集是否是 .NET 框架的一部分

  • September 9, 2008

如何從程序集名稱或程序集類(或其他類似名稱)中判斷程序集是否是.NET框架的一部分(即 .NET 框架System.windows.Forms)?

到目前為止,我已經考慮了 PublicKeyToken 和 CodeBase 屬性,但對於整個框架來說,它們並不總是相同的。

我想要此資訊的原因是獲取我的 EXE 文件正在使用的程序集列表,這些程序集需要在客戶端電腦上,因此我可以將正確的文件打包到安裝文件中,而無需使用 Visual Studio 安裝系統。問題是,我不想選擇任何 .NET 框架程序集,我希望它是一個自動過程,只要完成主要更新就可以輕鬆推出。

最終的解決方案是有一個 IsFramework 屬性…… :)

我懷疑最可靠和最通用的方法將是 PublicKeyToken。是的,不止一個,但它將是一個有限的列表,並且不會經常更改。

就此而言,您可以只擁有一個程序集名稱的白名單——該列表在框架版本之間也是有限的和靜態的。

不,它不是以“系統”開頭的。您可以檢查“WindowsBase”,它是一個框架程序集。

您也不能檢查 PublicKeyToken,因為還有其他使用“預設”密鑰簽名的 Microsoft 程序集,但它們不是 .NET Framework(Visual Studio 程序集)的一部分。

最好的方法是獲取已安裝的 .NET 框架的集合併檢查目標程序集是否是其 RedistList ( RedistList\FrameworkList.xml) 的一部分。

FrameworkList.xml 可以在以下位置找到:

  • .NET 2.0:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RedistList
  • .NET 3.x:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v VersionNumber \RedistList
  • .NET 4.x:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v VersionNumber \RedistList
  • .NET Core:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETCore\v VersionNumber \RedistList

引用自:https://stackoverflow.com/questions/52134