问题标签 [assemblyresolve]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
30 浏览

.net - .net 程序集解析处理程序在一台机器上失败,但在另一台机器上成功

我注意到 .net 在 2 台不同机器上解析程序集的方式存在差异。在一台机器上,它似乎在逐行执行,并且在另一台机器上按方法执行。

可以说我有以下内容Test.dll

好的机器会发生什么:

Dep.dll需要解决,以便它进入,CurrentDomain_AssemblyResolve然后在本地解决它,因为它在if逻辑内部进行处理。

坏机器会发生什么:

Dep.dll需要解决,所以在进入 resolve 方法之前,它注意到有一个对存在于另一个程序集(相同)中的方法的调用,Dep.dll最终StackOverflowException

谁能解释它为什么会发生?

(代码在 .net 4.5 中运行)

0 投票
1 回答
32 浏览

c# - 为什么将类型用作属性时,Assembly 无法解析?

在我的解决方案中,我有一个项目(比如说 'PRJ1' ),里面有一个类型,比如实现 UITypeEditor的MyAttribute1 。

在另一个项目中,我引用 PRJ1 并将MyAttribute1用作属性的属性。

问题是,当我构建解决方案时,prj1.dll 不会复制到最终解决方案目录中。这导致 CurrentDomain_AssemblyResolve 被解雇。如果我创建一个MyAttribut1e类型的本地字段,一切都很好!

问题是什么?我在这里缺少什么?

0 投票
0 回答
45 浏览

c# - AppDomain PrivateBinPath 3 级路径

我配置我的 PrivateBinPath 如下:

插件;插件\pluginA;插件\pluginA\资源;...

我可以在融合日志中看到应用程序忽略了所有路径,如 plugins\pluginA\resources。目录存在,但每条多于两层的路径都会被忽略。

PrivateBinPath 中的相对路径是否有限制?

0 投票
1 回答
198 浏览

c# - IAassembliesResolver 中永远不会调用 GetAssemblies

目前我尝试覆盖在 ASP.Net WebApi 2 中解析的程序集。覆盖:

解析器如下所示:

问题是,那GetAssemblies永远不会被调用。

我也尝试在Startup课堂上替换解析器,但这也无济于事:

非常感谢!

0 投票
0 回答
72 浏览

c# - .Net 4.0 链接、程序集解析和 VSTO 4.0

在编写 VSTO 4.0 加载项时,我遇到了链接程序集的程序集解析问题。

我有组件 A、B、C 和 D;其中程序集 A 引用 B 和 B 引用 C 和 D。在构建过程中,我将程序集 C 和 D 链接到程序集 B。然后在程序集 A 中,我们使用重定向程序集绑定的两个过程,都在程序集 A 的静态构造函数中完成。

  1. 从程序集 A 中挂钩,AppDomain.CurrentDomain.AssemblyResolve += MyResolver以将 C 和 D 的绑定重定向回 B(这处理了 80% 的用例。)
  2. 然后从装配 AI 调用中解决另外 20%(或者我认为)Assembly.LoadFrom( <assembly B> )

现在我遇到了一个问题,即 VSTO 4.0 应用程序在尝试从程序集 A 初始化对象时出现以下异常。

无法加载文件或程序集“C、Version=#、Culture=neutral、PublicKeyToken=#”或其依赖项之一。该系统找不到指定的文件。

当我查看加载到 AppDoamin 中的模块时,我看到了程序集 A 和 B,就像我看到一个正常工作的应用程序一样;但是,该Appdomain.CurrentDomain.AssemblyResolve事件永远不会触发,或者至少我的事件从未private static Assembly MyResolver( Object sender, ResolveEventArgs args )被输入。

在我的搜索中,我发现似乎最符合我的问题的答案就在这里......

http://widequestion.com/question/vsto-assemblyresolve-issue/

话虽如此,他对“别无他法”的回答似乎……嗯,错了,但我无法反驳。有谁知道我如何能够在这种情况下控制程序集重定向?

0 投票
0 回答
205 浏览

c# - LoaderOptimization.MultiDomain 导致 AssemblyResolve 不触发

LoaderOptimization.MultiDomain启用后我会遇到一些问题。不知何故,当在某些特定场景中找不到程序集时,它不再触发 AssemblyResolve 事件。

我把它缩小到一个有 2 个项目的复制案例。您可以在这里下载完整的解决方案:https ://developercommunity.visualstudio.com/storage/attachments/24787-appdomainresolvetest.zip

假设我有一个顶级程序:

然后,程序集 ConsoleApplication1 具有以下代码:

(请注意,引用了 Newtonsoft.Json(w/NuGet)但将 Copy Local 设置为 false,这会导致有意的程序集解析和 FileNotFoundException)

发生的情况是,如果LoaderOptimization.MultiDomain未在 Main 上设置属性,则会调用 Resolve1(来自顶级程序)和 Resolve2(来自库)。但是,一旦LoaderOptimization.MultiDomain设置,仅调用 Resolve1。

在我的实际应用程序中,MultiDomain 对于避免 JIT 和再次初始化程序集至关重要(将第二次启动时间从 5 秒减少到几乎没有)。因此,我想了解此错误的根本原因,并希望找到解决方法。

编辑:即使在 Resolve1 期间尝试对我的解析进行硬编码,它似乎也无法缓存程序集(加载速度很慢)。也许 MultiDomain 仅适用于ApplicationBase? 在这种情况下,我想我将不得不使用 PrivateBinPath 来优化 JIT。仍然想知道是否可以解决 AssemblyResolve 错误,因为仍然从外部路径加载了一些额外的程序集,我不在乎它们是否不是 JIT。

0 投票
1 回答
355 浏览

c# - c# Assembly.LoadFrom 与动态 AssemblyResolve

我有点坚持使用动态加载插件:

理论:(插件)特定文件夹中的 Dll:

到目前为止,一切都很好。现在这些程序集中的附加引用存在问题,可以通过catch(ReflectionTypeLoadException)(删除所有空类型)和AppDomain.CurrentDomain.AssemblyResolve += ...(手动查找那些丢失的 dll)来解决

现在是问题所在:引用的缺失程序集特定于每个已实现的插件,因此我需要在每个插件中实现单独的搜索行为。到目前为止我的想法/解决方案:

  • 在我的主应用程序中拥有所有可能的 DLL 目录的全局列表 -> 愚蠢,因为这不允许在不更改主应用程序代码的情况下添加更多插件
  • 在每个插件中都有一个(非静态的)特定 dll 路径字典 -> 可以通过myPluginBaseClass使用虚拟/抽象来强制;但是在创建实例之前无法访问(在这些实例AssemblyResolveEvents被触发的地方),所以没有帮助
  • 在每个插件中都有一个包含特定 dll 路径的(静态)字典 - > 可以在实例化之前通过使用反射来读取,但我无法将它myPluginBaseClass作为定义的模板添加到我的模板中,因此可能出现错误
  • 为每个插件创建一个单独的域并让他们自己处理AssemblyResolveEvent-> 但是如何?

我希望你能帮忙!

提前致谢!罗宾

0 投票
0 回答
86 浏览

c# - 之前附加到 AssemblyResolve

考虑类内部的以下代码Program

对于这个应用程序,我们需要将程序集EmbeddedClass嵌入到应用程序中,而不是作为 dll 与它并排。所以也加载我们需要使用的程序集AssemblyResolve

但是,上面的代码将不起作用,因为在运行时它会给出:

mscorlib.dll 中出现“System.TypeInitializationException”类型的未处理异常

附加信息:“程序”的类型初始化程序引发了异常。

我相信这是因为它试图EmbeddedClass在运行静态构造函数之前加载 's 程序集。

有没有办法解决这种情况?

0 投票
0 回答
117 浏览

c# - 匿名处理程序未触发 AssemblyResolve

我正在尝试解析动态加载的程序集,但 AssemblyResolve 事件似乎不适用于匿名函数。

this._AssemblyResolve并且resolve实际上是相同的函数,除了匿名resolve函数创建一个使用Load方法中定义的变量的闭包。

出于某种原因,this._AssemblyResolve被调用,但resolve没有。为什么?

我不能真正依赖该_AssemblyResolve方法,因为该方法需要了解该Load方法中定义的变量。我可以使用一种解决方法,但我仍然不明白为什么匿名函数不起作用。

0 投票
1 回答
358 浏览

c# - C# Entity Framework 资源和程序集解析 (appdomain)

我面临一个问题,我似乎无法解释发生了什么。

如果我AppDomain.AssemblyResolve在我的 DLL(C#) 中使用事件并且我使用实体框架,我很可能会以某种方式看到它尝试加载以下资源文件:

之后

我不知道他们可以住在哪里,也不知道他们是否存在于某个地方。我找不到任何讨论或微软网站谈论这个。

当然,如果我在我的事件中为该资源返回 null 作为 MicrosoftAssemblyResolve事件文档中的状态,那么一切正常,但问题是我希望能够不返回 null,因为还有另一个 DLL(在 .NET 4 之前构建)这是由外部公司完成的,并且在与我的 DLL 相同的应用程序中使用,它将尝试加载程序集资源文件并引发导致应用程序崩溃的异常。

出于这个原因,我试图了解如何处理这种特殊情况并避免返回 null。

有人有任何解释为什么 Entity Framework 会尝试加载这些资源文件,以及是否有办法在不返回 null 的情况下处理这个问题aassemblyresolve