问题标签 [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.
.net - .net 程序集解析处理程序在一台机器上失败,但在另一台机器上成功
我注意到 .net 在 2 台不同机器上解析程序集的方式存在差异。在一台机器上,它似乎在逐行执行,并且在另一台机器上按方法执行。
可以说我有以下内容Test.dll
:
好的机器会发生什么:
Dep.dll
需要解决,以便它进入,CurrentDomain_AssemblyResolve
然后在本地解决它,因为它在if
逻辑内部进行处理。
坏机器会发生什么:
Dep.dll
需要解决,所以在进入 resolve 方法之前,它注意到有一个对存在于另一个程序集(相同)中的方法的调用,Dep.dll
最终StackOverflowException
谁能解释它为什么会发生?
(代码在 .net 4.5 中运行)
c# - 为什么将类型用作属性时,Assembly 无法解析?
在我的解决方案中,我有一个项目(比如说 'PRJ1' ),里面有一个类型,比如实现 UITypeEditor的MyAttribute1 。
在另一个项目中,我引用 PRJ1 并将MyAttribute1用作属性的属性。
问题是,当我构建解决方案时,prj1.dll 不会复制到最终解决方案目录中。这导致 CurrentDomain_AssemblyResolve 被解雇。如果我创建一个MyAttribut1e类型的本地字段,一切都很好!
问题是什么?我在这里缺少什么?
c# - AppDomain PrivateBinPath 3 级路径
我配置我的 PrivateBinPath 如下:
插件;插件\pluginA;插件\pluginA\资源;...
我可以在融合日志中看到应用程序忽略了所有路径,如 plugins\pluginA\resources。目录存在,但每条多于两层的路径都会被忽略。
PrivateBinPath 中的相对路径是否有限制?
c# - IAassembliesResolver 中永远不会调用 GetAssemblies
目前我尝试覆盖在 ASP.Net WebApi 2 中解析的程序集。覆盖:
解析器如下所示:
问题是,那GetAssemblies
永远不会被调用。
我也尝试在Startup
课堂上替换解析器,但这也无济于事:
非常感谢!
c# - .Net 4.0 链接、程序集解析和 VSTO 4.0
在编写 VSTO 4.0 加载项时,我遇到了链接程序集的程序集解析问题。
我有组件 A、B、C 和 D;其中程序集 A 引用 B 和 B 引用 C 和 D。在构建过程中,我将程序集 C 和 D 链接到程序集 B。然后在程序集 A 中,我们使用重定向程序集绑定的两个过程,都在程序集 A 的静态构造函数中完成。
- 从程序集 A 中挂钩,
AppDomain.CurrentDomain.AssemblyResolve += MyResolver
以将 C 和 D 的绑定重定向回 B(这处理了 80% 的用例。) - 然后从装配 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/
话虽如此,他对“别无他法”的回答似乎……嗯,错了,但我无法反驳。有谁知道我如何能够在这种情况下控制程序集重定向?
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。
c# - c# Assembly.LoadFrom 与动态 AssemblyResolve
我有点坚持使用动态加载插件:
理论:(插件)特定文件夹中的 Dll:
到目前为止,一切都很好。现在这些程序集中的附加引用存在问题,可以通过catch(ReflectionTypeLoadException)
(删除所有空类型)和AppDomain.CurrentDomain.AssemblyResolve += ...
(手动查找那些丢失的 dll)来解决
现在是问题所在:引用的缺失程序集特定于每个已实现的插件,因此我需要在每个插件中实现单独的搜索行为。到目前为止我的想法/解决方案:
- 在我的主应用程序中拥有所有可能的 DLL 目录的全局列表 -> 愚蠢,因为这不允许在不更改主应用程序代码的情况下添加更多插件
- 在每个插件中都有一个(非静态的)特定 dll 路径字典 -> 可以通过
myPluginBaseClass
使用虚拟/抽象来强制;但是在创建实例之前无法访问(在这些实例AssemblyResolveEvents
被触发的地方),所以没有帮助 - 在每个插件中都有一个包含特定 dll 路径的(静态)字典 - > 可以在实例化之前通过使用反射来读取,但我无法将它
myPluginBaseClass
作为定义的模板添加到我的模板中,因此可能出现错误 - 为每个插件创建一个单独的域并让他们自己处理
AssemblyResolveEvent
-> 但是如何?
我希望你能帮忙!
提前致谢!罗宾
c# - 之前附加到 AssemblyResolve
考虑类内部的以下代码Program
:
对于这个应用程序,我们需要将程序集EmbeddedClass
嵌入到应用程序中,而不是作为 dll 与它并排。所以也加载我们需要使用的程序集AssemblyResolve
。
但是,上面的代码将不起作用,因为在运行时它会给出:
mscorlib.dll 中出现“System.TypeInitializationException”类型的未处理异常
附加信息:“程序”的类型初始化程序引发了异常。
我相信这是因为它试图EmbeddedClass
在运行静态构造函数之前加载 's 程序集。
有没有办法解决这种情况?
c# - 匿名处理程序未触发 AssemblyResolve
我正在尝试解析动态加载的程序集,但 AssemblyResolve 事件似乎不适用于匿名函数。
this._AssemblyResolve
并且resolve
实际上是相同的函数,除了匿名resolve
函数创建一个使用Load
方法中定义的变量的闭包。
出于某种原因,this._AssemblyResolve
被调用,但resolve
没有。为什么?
我不能真正依赖该_AssemblyResolve
方法,因为该方法需要了解该Load
方法中定义的变量。我可以使用一种解决方法,但我仍然不明白为什么匿名函数不起作用。
c# - C# Entity Framework 资源和程序集解析 (appdomain)
我面临一个问题,我似乎无法解释发生了什么。
如果我AppDomain.AssemblyResolve
在我的 DLL(C#) 中使用事件并且我使用实体框架,我很可能会以某种方式看到它尝试加载以下资源文件:
之后
我不知道他们可以住在哪里,也不知道他们是否存在于某个地方。我找不到任何讨论或微软网站谈论这个。
当然,如果我在我的事件中为该资源返回 null 作为 MicrosoftAssemblyResolve
事件文档中的状态,那么一切正常,但问题是我希望能够不返回 null,因为还有另一个 DLL(在 .NET 4 之前构建)这是由外部公司完成的,并且在与我的 DLL 相同的应用程序中使用,它将尝试加载程序集资源文件并引发导致应用程序崩溃的异常。
出于这个原因,我试图了解如何处理这种特殊情况并避免返回 null。
有人有任何解释为什么 Entity Framework 会尝试加载这些资源文件,以及是否有办法在不返回 null 的情况下处理这个问题aassemblyresolve
?