VS C#中的依赖地狱,找不到依赖项

时间:2019-09-11 07:24:24

标签: c# visual-studio dependencies .net-assembly

我创建了一个图表C#库(我们将其称为chartlibrary),它本身依赖于多个第三方dll文件。

在另一个可执行项目(我们称为chartuser)中,我引用了chartlibrary项目(两个项目都位于Visual Studio中的同一解决方案中)。

编译后,我看到chartlibrary引用的所有第三方dll文件也包含在chartuser的bin / Debug文件夹中。但是,我收到一个运行时错误,该错误基本上指向一个事实,即chartlibrary中的某些引用无法解析。然后,我尝试通过

得到一个更好的主意
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var assemblyFileName = args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
        var assemblyPathFileName = _currentPluginPath + @"\" + assemblyFileName;

        if (File.Exists(assemblyPathFileName))
        {
            return Assembly.Load(File.ReadAllBytes(assemblyPathFileName));
        }

        return null;
    }

问题是RequestingAssembly为空,而Name却很隐秘。

即使所有dll都位于可执行项目的bin / Debug文件夹中,也找不到参考dll并且无法解析程序集,这是我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

修复 :针对第三方库的混淆引擎修复程序解决了该问题。


.NET依赖项 :也许可以略过这个旧答案:How do I determine the dependencies of a .NET application?-并浏览所有清单文件?

调试 The Microsoft Assembly Binding Log Viewer可以向您显示运行时的情况。通过 Developer Command Prompt for Visual Studio 启动它(只需搜索“开发人员命令”,键入 "FUSLOGVW.exe" ,然后按 Enter < / strong>)。也可能有一个略读:How the Runtime Locates Assemblies

我不太熟悉它们的用法,但是还有一些其他工具(大多数工具除了依赖项以外还有其他用途):

应用程序启动检查清单

运行时 :如果问题在另一台计算机上发生,则显而易见的运行时首先出现在检查清单上:.Net.Net CoreJavaSilverlightDirect XVC++ RuntimeMS-XML (legacy)Crystal ReportsMicrosoft Report ViewerSQL Server / Database Runtimes等...加上涉及COM注册的所有内容,以及您所引用的任何第三方框架组件(COM,COM Interop,GAC,Assemblies等)。


其他链接