问题标签 [assembly-loading]

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 投票
2 回答
5933 浏览

c# - 在不锁定文件的情况下加载程序集并保留正确的绑定上下文

我已经解决了一个可怕的难题。这是我的情况:

我正在使用插件框架构建应用程序。有一个所有插件都必须扩展的基本插件类。在同一个程序集中,我有一个辅助类,它将序列化和反序列化类。这是一个通用类,到处都在使用它。结构是这样的:

问题

我的问题是程序集加载和锁定文件。该应用程序的要求是可以随时覆盖插件。如果是这样,则需要重新加载它们。加载程序集以使其不被锁定(也就是说,我可以在应用程序仍在运行时覆盖或吹走)似乎是最好的方法:

加载插件程序集工作得很好,没有问题。当我在插件程序集中的MyPlugin.cs中尝试使用进行反序列化时,出现异常HelperCollection。一个例子可能是这样的:

它正在爆炸并抛出一个InvalidCastException说法,它是"Unable to cast object of type 'List[Foo]' to 'List[Foo]'"。经过大量研究,我终于找到了原因。它正在LoadNeither 绑定上下文中加载。

Foo加载时(来自MyPlugin.dll)它位于LoadNeither绑定上下文中,而包含用于类型转换的类型的程序集(在我的情况下为MyApp.dll)在默认上下文中加载。因此,即使它们具有相同的名称,它们也不被视为同一类型。这样做是因为我正在使用Assembly.Load(byte[]).

问题

我怎样才能解决这个问题?我怎样才能,

  1. 加载程序集而不锁定文件,并且
  2. 提供正确的绑定上下文,以便我可以转换位于已加载程序集中的对象。

对不起,文字墙,只是想把所有相关信息都放在那里。

0 投票
2 回答
2881 浏览

c# - 将 InMemory 编译的程序集加载到当前域中

CSharpCodeProvider用来编译程序集,我将CompileParameters GenerateInMemory属性设置为,true因为我不想创建物理文件。

编译后我可以采取CompilerResults并做这样的事情: -

我得到了预期的输出,CreateInstance已经奏效了。

但是,我需要能够在AppDomain不了解程序集的情况下访问当前的类型。我需要做这样的事情: -

问题在于这段代码t最终为空。现在我怀疑虽然程序集已编译但未加载。我似乎无法找到将此程序集加载到域中以便可以解析其类型名称。

任何人都可以启发我吗?

0 投票
2 回答
204 浏览

prism - MEF 程序集加载声明

在 Prism 中,我能够从动态加载的程序集中声明我希望加载程序集如何初始化我以及何时初始化。也就是说,我可以放置以下类属性:

[ModuleExport(typeof(MyModule), InitializationMode = InitializationMode.WhenAvailable)]

这将导致我的模块在加载时被初始化。

我一直在寻找对 MEF 执行相同操作的能力,但我对它还不是很熟悉。我尝试在 MSDN 和文档上四处搜索,但没有看到太多。

在此先感谢您的帮助!

0 投票
1 回答
1593 浏览

.net - 如何调试程序集加载 - ConfigurationErrorsException

我有一个在本地运行良好的应用程序,但是在部署时我看到了错误:

我已经尝试通过程序集绑定日志查看器查看程序集绑定日志,但即使打开了它,我也没有得到比上面的堆栈跟踪更多的信息,日志似乎保持为空。它抱怨的程序集是存在的,并且从表面上看,它的所有依赖程序集都存在。我还能做些什么来调试我的服务器上的错误?

0 投票
2 回答
133 浏览

c# - 为 *ATTEMPTED* 程序集解析而调用的 AppDomain 事件

是否有一个我们可以挂钩的事件,在解决程序集之前被调用。

例如,如果 AppDomain 中的某些代码正在调用 Assembly.Load(path) ,则会引发该事件,表示尝试加载此程序集?

这对于重定向在某些组件中硬编码的可能的装配负载很有用。

如果可能的话,从配置中执行此操作也是一个有效的选项。

有什么建议么 ?

0 投票
1 回答
1168 浏览

security - 将 Assembly.LoadFrom(String, Evidence) 调用替换为 Assembly.LoadFrom(String) - .NET 4

我必须将一些旧.NET 2代码移到.NET 4项目中。它有下一行:

正如微软(MSDN)中所说:

注意:此 API 现在已过时。非过时的替代方法是 LoadFrom(String)。

我对Evidence班级不熟悉。从调用中删除参数有什么风险?Evidence需要参数时的真实情况Evidence是什么?

在此先感谢您的帮助

0 投票
2 回答
658 浏览

c# - 程序集加载、类型创建和缓存

我正在尝试编写类似的东西ObjectFactory,给定程序集的路径和该程序集中的类型名称,使用反射返回相同类型的实例。由于我需要对几个不同程序集中的类型重复执行此操作,我应该在Assembly.LoadFrom每次需要给定类型的新实例时使用,还是应该以某种方式缓存结果Assembly对象和类型创建方法的委托?

0 投票
1 回答
1725 浏览

unity-container - 如何在尚未使用 Unity 加载的程序集中注册类型?

我想加载接口的所有类型,以便可以在其上调用方法。但是,程序集在编译时没有被引用。它们将位于 bin 文件夹中。

这是我可以用 Unity 轻松完成的事情吗?

例如,我有类似的代码:

当然,模块解析为空,因为程序集刚刚被放入 bin 文件夹中。它们在我当前的程序集中没有被静态引用。

或者,我是否必须执行某种类型的 Assemblies.LoadAssembly()。我希望这尽可能动态。如果可能,我不必在配置文件或代码中指定程序集名称。

提前致谢。

0 投票
1 回答
2046 浏览

sqlite - ELMAH 1.2 unable to load file or assembly 'System.Data.SQLite' or one of its dependencies

I am trying to include the 64-bit version of ELMAH 1.2 into an ASP.NET application that is hosted locally in IIS Express. I referenced the release version of Elmah.dll so that it would copy to the bin folder. For local workstation configuration purposes, I only want to log exceptions to XML files. As a result, I configured ELMAH as follows:

When I start a debugging session from Visual Studio, the site loads up and I get the following runtime error:

Could not load file or assembly 'System.Data.SQLite' or one of its dependencies. An attempt was made to load a program with an incorrect format.

The stack trace looks as follows:

The question is, why would ELMAH cause the runtime to try to load System.Data.SQLite since I do not want to use SQLite for logging the exception? Also, how can I resolve this issue (I looked everywhere on the ELMAH google group and on StackOverflow already)?

0 投票
2 回答
2516 浏览

.net - LoadFrom 和上下文

我正在通过Assembly.LoadFrom存储在应用程序基本路径之外的程序集 (A) 加载;我加载的程序集引用了同一目录中的另一个 .net 程序集 (B)。

当我尝试使用 A 程序集的某些方法时,Fusion 日志显示系统正在尝试从应用程序基目录而不是 A.dll 的父目录加载 B.dll。

我向 中添加了一个侦听器AppDomain.CurrentDomain.AssemblyResolve,该侦听器由发送者调用,并显示AppDomain一条消息“没有上下文策略。”,并将ResolveEventArgs.RequestingAssembly属性设置为null

不应LoadFrom允许在其父目录中搜索程序集的依赖项?