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

2024-05-10

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

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

编译后,我可以看到所有第三方dll文件chartlibrary引用也包含在 bin/Debug 文件夹中chartuser。但是,我收到一个运行时错误,这基本上表明以下事实:chartlibrary无法解决。然后我尝试通过以下方式获得更好的想法

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

and

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:针对与混淆引擎相关的第三方库的修复解决了该问题。


.NET 依赖项:也许浏览一下这个旧答案:如何确定 .NET 应用程序的依赖关系? https://stackoverflow.com/questions/227886/how-do-i-determine-the-dependencies-of-a-net-application- 并检查任何清单文件?

调试: Microsoft 程序集绑定日志查看器 https://learn.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer可以向您展示运行时发生了什么。通过启动它Developer Command Prompt for Visual Studio(只需搜索“开发者命令”,输入"FUSLOGVW.exe"并按Enter)。也可以略读一下:运行时如何定位程序集 https://learn.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies.

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

  • ILSpy https://github.com/icsharpcode/ILSpy- 我相信它是开源的。
  • AsmSpy https://stackoverflow.com/a/36404201/129130- 从未尝试过。
  • NDepend https://stackoverflow.com/a/308256/129130- 商业的。

应用程序启动清单:

  • 在客户端系统中安装后桌面应用程序无法打开 https://stackoverflow.com/questions/53512998/desktop-applicaton-not-opening-after-installation-in-client-system/53530377#53530377
  • Windows 应用程序启动错误异常代码:0xe0434352 https://stackoverflow.com/questions/49623588/windows-application-startup-error-exception-code-0xe0434352/49637913#49637913

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


其他链接:

  • 哪些winform项目文件应该打包到安装程序中 https://stackoverflow.com/questions/51939079/which-winform-project-files-should-be-packed-up-into-the-installer
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS C# 中的依赖地狱,找不到依赖项 的相关文章

随机推荐

  • 在 Swift 中使用 Obj-C 完成块

    在 Objective C 中 我有一个完成块类定义为 File h typedef void MYCompletionBlock BOOL success NSDictionary result NSError error 然后 在 Sw
  • dask allocate() 或 apply() 中的变量列名

    我有适用于pandas 但我在将其转换为使用时遇到问题dask 有一个部分解决方案here https stackoverflow com questions 32363114 how do i change rows and column
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • java中的比较器链

    正在阅读Oracle 关于接口的 Java 教程 https docs oracle com javase tutorial java IandI createinterface html其中给出了一个例子Card 打牌 我试图理解接口中的
  • Google 折线图添加对象数组

    我有一个通过解析 JSON 字符串创建的对象数组 var measurementData Html Raw JsonConvert SerializeObject this Model Item1 var stringifiedData J
  • Mule/码头设置

    我有一个正在运行的 Mule 应用程序 我想在其上设置 Jetty 来响应 http 请求 以下配置
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • Mysqli 准备好的语句从数组动态构建 INSERT 查询

    我正在尝试用 PHP 而不是 OOP 开发我的函数 以创建 CRUD 目标是对任何表使用相同的函数 但我已经陷入了第一个表中 不知道该怎么做 我现在拥有的 function to avoid injections function vali
  • 响应覆盖 div 下的链接

    场景是这样的 我已经构建了一个顶部导航原型 它需要在其顶部有一个覆盖 透明 PNG 图像 目前它覆盖了大约 1 3 的链接 请看下面 有什么方法可以让前 1 3 的链接做出响应 即使有一个 div div 部分覆盖它们 覆盖层不会包含任何可
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • Haskell 中的实例声明

    我有这两个功能 primes sieve 2 where sieve p xs p sieve x x lt xs x mod p gt 0 isPrime number number 1 null x x lt takeWhile x g
  • 如何跟踪数据库连接泄漏

    我们有一个应用程序似乎存在连接泄漏 SQL Server 表示已达到最大池大小 我独自一人在我的开发机器上 显然 只需导航应用程序 我就会触发此错误 SQL Server 活动监视器显示大量正在使用我的数据库的进程 我想查找哪些文件打开连接
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • Android:如何为我的应用程序播放的任何音乐文件创建淡入/淡出音效?

    我正在开发的应用程序播放音乐文件 如果计时器到期 我希望音乐淡出 我怎么做 我正在使用 MediaPlayer 播放音乐 音乐文件位于我的应用程序的原始文件夹中 这是我的 Android MediaPlayer 的整个处理程序类 查看 pl
  • 具有 MVC4 风格捆绑的 Intellisense

    到目前为止我找不到问题或解决这个问题 我确信我错过了一些简单的事情 我有一个带有一堆缩小的 CSS 的样式包 并且我正在用里面的类来装饰 HTML 元素 一切都运转良好 然而 Intellisense 和 ReSharper 都因为 CSS
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • Angular 2 变更检测是如何工作的?

    在 Angular 1 中 更改检测是通过对 scope 层次结构进行脏检查来进行的 我们会在模板 控制器或组件中隐式或显式创建观察者 在 Angular 2 中 我们不再有 scope 但我们确实重写了 setInterval setTi
  • VS C# 中的依赖地狱,找不到依赖项

    我创建了一个图表 C 库 我们称之为chartlibrary 它本身依赖于多个第三方 dll 文件 在另一个可执行项目中 我们称之为chartuser 我参考了chartlibrary项目 两个项目位于 Visual Studio 中的同一