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

C# 获取当前项目中的所有引用程序集,c#,.net,visual-studio,dll,reference,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.

我正在尝试构建一种方法来检查所有不是系统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);
    }
}
List moduli=new List();
组件a=类型(frmPostavkeDokumenata)。组件;
Assembly assem=Assembly.GetEntryAssembly();
foreach(assem.GetReferencedAssemblys()中的AssemblyName)
{
如果(!an.Name.Contains(“系统”)&&
!an.Name.Contains(“mscorlib”)&&!an.Name.Contains(“Microsoft”))
{
模数加(一个名称);
}
}
这是我的参考清单:


程序集。GetReferencedAssembly
只需检索用作程序集中类型的引用程序集。因此,实际上,使用反射检索VisualStudio引用是不可能的


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

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

您有几个选择:

  • 递归生成引用程序集的列表。这将为您提供应用程序使用的所有程序集及其依赖项使用的所有程序集的列表,这应该是您在运行时实际需要的DLL的完整列表

  • 订阅
    AppDomain.AssemblyResolve
    事件并在那里提供缺少的DLL(更好的选项)


  • 仅仅因为项目引用了它们,并不意味着它们实际上是需要的,并且实际上链接到了最终的可执行文件。ReSharper可以选择。我理解这一点,但我不在乎是否再下载一个DLL。这样,我确信应用程序不会因为DLL丢失而删除任何意外的异常。仅仅使用文件名作为识别.NET程序集的手段是危险的。唯一性是由文件名、版本、区域性和公钥决定的。我同意,但我正在努力简化它,直到我得到所有引用,然后我可以检查其他所有内容。但是谢谢你指出这一点。嗯,我不知道我是否正确,但是,获得所有的参考资料难道不应该很容易吗。其他语言在这个话题上表现如何?我不太清楚。“其他语言”到底是什么意思?