我试图找到如何按需要使用的类型(通过C#)查找dll或程序集。
我想制作一种可以输入诸如“ #include System.IO;”之类的方法的方法。当它在此类文件的文本中看到类型为“路径”的变量时。因此,通常我想获取计算机上的所有程序集。我知道有一些General Assembly Cache,但是我真的不了解在这种情况下如何使用它。据我了解,Assemble的GetType方法可以工作,但是我找不到所有可以使用此方法的程序集。
使用AppDomain的方法是无用的,因为使用此解决方案中仅包括的程序集如何将具有所有引用的程序集以递归方式加载到AppDomain?,按类名获取程序集。
更具体地说,它是Visual Studio方法Resolve http://i.stack.imgur.com/xNns9.png的一些自定义实现
据我了解,我应该找到由VS Tools-> Customize-> Commands-> Click Context菜单调用的方法,然后选择Editor Context Menus | Code Window | Resolve。
抱歉,这个简单的问题对我来说很重要。
这是一个工具,可扫描系统上的所有程序集并搜索这些程序集中的所有类,以查找某些类型。该工具仅搜索.NET SDK目录,而不搜索GAC。如果您修改程序以搜索%systemroot%\ assembly文件夹,那么您也应该获得GAC中的类。
代码很长,无法粘贴到答案中,但是总体思路是这样的:
这是一个相关的代码摘录,可能会有所帮助。它将在名称空间“ System.IO”中查找类“ File”,而无需事先知道可能存在的DLL。
string[] assemblyPaths = System.IO.Directory.GetFiles(@"C:\Windows\Microsoft.NET\", "*.dll", System.IO.SearchOption.AllDirectories);
foreach (string assemblyPath in assemblyPaths)
{
Assembly assembly = null;
assembly = Assembly.LoadFrom(assemblyPath);
// Go through all the types in it
foreach (Type t in assembly.GetExportedTypes())
{
// Publically creatable exception?
if (t.IsPublic && t.Name == "File" && t.Namespace == "System.IO")
{
// The type "t" is the type you are looking for
}
}
}
链接的项目更加智能,但并不过分简化。但这是总的想法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句