我需要只识别使用的dll。让我解释一下。
如果你有一个.Net exe,例如,引用DLLA.dll的MyEXE.exe,而DLLA.dll是一个引用其他17个DLL的常用函数库,那么在构建期间.Net将把所有17个以及MyEXE.exe的bin文件夹中的DLLA.dll。即使MyEXE.exe只调用DLLA.dll引用的2个dll中使用的代码。
只要条目程序集不直接或间接调用丢失的dll中的任何功能,.net应用程序就可以正常运行并且缺少dll。
所以我想找到使用的那些。
我不想为每个项目硬编码,谢谢。我喜欢我可以在任何项目上运行的算法。感谢。
答案 0 :(得分:1)
这在.Net中确实不是一个可解决的问题。一般情况是直截了当的,并由以下算法描述:
这将把所有实际需要的装配放入"所需的装置"。
这是一次相当详尽的搜索,但错过了很多项目
所有这些都代表了动态方法调用,这些调用无法通过静态检查器进行实际分析。其中任何一个都可能导致其他17个DLL中的一个被使用,从而破坏您的部署。
我没有尝试静态检测必要的程序集(无法解决),而是尝试重构代码,以便所需的子集不会引入如此多的DLL