我试图找到如何通过我需要使用的类型(通过C#)找到dll或程序集。
我想制作一种方法可以输入类似#34; #include System.IO;"当它在文本中看到这个类文件变量的类型为" Path"。 所以一般来说我想得到计算机上的所有程序集。我知道有一些大会缓存,但在这种情况下我真的不懂如何使用它。 据我所知,汇编中的GetType方法可以正常工作,但是我无法找到所有程序集来使用这种方法。
使用AppDomain的方法没用,因为只使用此解决方案中包含的程序集How to Load an Assembly to AppDomain with all references recursively?,get assembly by class name。
更具体地说,它是Visual Studio方法Resolve的一些自定义实现 http://i.stack.imgur.com/xNns9.png
据我了解,我应该找到由VS Tools调用的方法 - > Customize-> Commands->单击上下文菜单,然后选择编辑上下文菜单|代码窗口|解析。
对于这个简单的问题很抱歉,但对我来说这很重要。
答案 0 :(得分:1)
Here是一个工具,它扫描系统上的所有程序集并搜索这些程序集中的所有类,查找某些类型。该工具仅搜索.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
}
}
}
链接的项目更加智能,并没有过于简单化。但这是一般的想法。