假设您有一个包含100个.NET dll文件的文件夹。这些dll文件中的每一个都可能包含也可能不包含对具有特定版本号的某个.NET dll的引用 - 例如," MyCompany.MyCompanyProject.dll",版本1.2.0。你如何找出哪个dll文件实际包含这个引用?你可以使用像Reflector这样的工具逐个浏览文件,但有更快的方法吗?
答案 0 :(得分:1)
这里有一些c#代码,如果你没有可用的visual studio,可以适用于powershell。您将需要对System.IO和System.Reflection的引用。
foreach (string f in Directory.GetFiles(path, searchPattern, System.IO.SearchOption.AllDirectories))
{
try
{
FileInfo fi = new FileInfo(f);
Assembly asm = Assembly.LoadFrom(f);
string asmName = asm.GetName().Name;
Version asmVer = asm.GetName().Version;
}
catch (BadImageFormatException)
{
//swallow
}
catch (Exception)
{
MessageBox.Show(ex.Message);
}
}
答案 1 :(得分:1)
没有。你应该使用反射。但我可以加载thia程序集作为反射。
Assembly asm = Assembly.ReflectionOnlyLoad("Source");
foreach (AssemblyName an in asm.GetReferencedAssemblies())
{
Display("Name={0}, Version={1}", an.Name, an.Version);
}
此外,您可以将它们加载到另一个AppDomain中,然后进行处理。 它并不快捷,但您当前的AppDomain会很清楚。