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

Dependency hell in VS C#, cannot find dependencies

我创建了一个图表 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并且无法解析程序集?

Fix: A fix for the third party library related to their obfuscation engine solved the issue.


.NET Dependencies:也许浏览这个旧答案:How do I determine the dependencies of a .NET application? - 并浏览任何清单文件?

调试: The Microsoft Assembly Binding Log Viewer can show you what's going on at runtime. Launch it via a Developer Command Prompt for Visual Studio (just search for "developer command", type in "FUSLOGVW.exe" and press Enter). Also maybe have a skim: How the Runtime Locates Assemblies.

我不太熟悉它们的用途,但还有一些更进一步的工具(大多数都有超越依赖项的进一步用途):

  • ILSpy - 我相信它是开源的。
  • AsmSpy - 从未尝试过。
  • NDepend - 商业广告。

应用程序启动清单:

  • Desktop applicaton not opening after installation in client system
  • Windows Application Startup Error Exception code: 0xe0434352

运行时间:如果问题发生在另一台计算机上,则首先在检查列表中的明显运行时间:.Net.Net CoreJavaSilverlightDirect XVC++ RuntimeMS-XML (legacy)Crystal ReportsMicrosoft Report ViewerSQL Server / Database Runtimes,等等...加上任何涉及 COM 注册的内容,显然还有您引用的任何第三方框架组件(COM、COM Interop、GAC、程序集等...)。


其他链接:

  • Which winform project files should be packed up into the installer