获取当前项目中的所有引用程序集

时间:2017-11-24 08:50:45

标签: c# .net visual-studio dll reference

我正在尝试构建一个方法来检查所有不是系统dll的dll,并从FTP下载它们。例如,我有一些引用的devxpress DLL和newtonsoft(Json.net)。问题是,当我尝试获取列表时,我只获得其中的16个,并且参考列表中有更多。

List<string> moduli = new List<string>();
Assembly a = typeof(frmPostavkeDokumenata).Assembly;
Assembly assem =Assembly.GetEntryAssembly();

foreach (AssemblyName an in assem.GetReferencedAssemblies())
{
    if (!an.Name.Contains("System") && 
        !an.Name.Contains("mscorlib") && !an.Name.Contains("Microsoft"))
    {
        moduli.Add(an.Name);
    }
}

这是我的参考清单:

enter image description here

2 个答案:

答案 0 :(得分:1)

在visual studio中编译项目时 - 只有项目实际使用的dll才会被编译为dll \ exe元数据作为引用的程序集,无论哪个列在“参考”部分中。

您有几种选择:

  1. 递归构建引用的程序集列表。这将为您提供应用程序使用的所有程序集及其依赖项使用的所有程序集的列表,这些程序集应该是您在运行时可能实际需要的dll的完整列表。

  2. 订阅AppDomain.AssemblyResolve活动并在那里提供缺少的dll(更好的选择)。

答案 1 :(得分:0)

Assembly.GetReferencedAssemblies只检索在程序集中用作Type的引用程序集。因此,实际上无法使用反射检索Visual Studio引用。

这是执行它的唯一方法,你应该解析程序集/项目的.csproj文件。