如何从程序集名称或程序集类(或其他类似程序)判断程序集是否是.NET框架的一部分(即System.windows.Forms
)?
到目前为止,我已经考虑了PublicKeyToken和CodeBase属性,但这些对于整个框架并不总是相同.
我想要这些信息的原因是为了获取我的EXE文件正在使用的程序集列表,这些程序集需要在客户端计算机上,因此我可以在安装文件中打包正确的文件,而无需使用Visual Studio安装系统.问题是,我不想拿起任何.NET框架程序集,我希望它是一个自动过程,很容易在主要更新完成后推出.
最终的解决方案是有一个IsFramework属性...... :)
不,它不是以“系统”开头。您可以检查“ 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