C# 需要使用dll,该dll作为嵌入资源包含在项目中
通常我们会添加dll的引用,然后访问dll中的类,并创建该类的实例。现在我已经在我的项目中包含了一个dll文件作为嵌入资源。现在我的问题是,如何访问类并创建类的实例,这些类位于作为嵌入资源包含的dll中。我在谷歌上搜索发现stackoverflow链接 我在那里找到的用于访问dll的指令,该指令作为嵌入资源包含,如 将第三方程序集作为资源嵌入后,添加代码以在应用程序启动期间订阅当前域的AppDomain.AssemblyResolve事件。每当CLR的Fusion子系统未能根据有效的探测(策略)定位程序集时,就会触发此事件。在AppDomain.AssemblyResolve的事件处理程序中,使用Assembly.GetManifestResourceStream加载资源,并将其内容作为字节数组馈送到相应的Assembly.load重载中。下面是一个这样的实现在C#中的样子: 其中,StreamToBytes可定义为:C# 需要使用dll,该dll作为嵌入资源包含在项目中,c#,.net-assembly,C#,.net Assembly,通常我们会添加dll的引用,然后访问dll中的类,并创建该类的实例。现在我已经在我的项目中包含了一个dll文件作为嵌入资源。现在我的问题是,如何访问类并创建类的实例,这些类位于作为嵌入资源包含的dll中。我在谷歌上搜索发现stackoverflow链接 我在那里找到的用于访问dll的指令,该指令作为嵌入资源包含,如 将第三方程序集作为资源嵌入后,添加代码以在应用程序启动期间订阅当前域的AppDomain.AssemblyResolve事件。每当CLR的Fusion子系统未能根据有效的探测(策略)
static byte[] StreamToBytes(Stream input)
{
var capacity = input.CanSeek ? (int) input.Length : 0;
using (var output = new MemoryStream(capacity))
{
int readLength;
var buffer = new byte[4096];
do
{
readLength = input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, readLength);
}
while (readLength != 0);
return output.ToArray();
}
}
我几乎不清楚这一点。那人说
添加代码以在应用程序启动期间订阅当前域的AppDomain.AssemblyResolve事件。每当CLR的Fusion子系统未能根据有效的探测(策略)定位程序集时,就会触发此事件
什么是CLR的融合子系统故障?这是什么意思?
当AssemblyResolve事件将激发时。我是否需要将此代码放入program.cs文件中
Load()将只将程序集加载到内存中,但
他们没有展示如何在dll中创建classed的实例
请详细讨论我的兴趣点。谢谢
什么是CLR的融合子系统故障?这是什么意思
详细说明(尤其是位的部分探测(融合)):
当探测无法定位程序集时,它将触发
AppDomain.AssemblyResolve事件,允许用户代码执行其
自定义加载。如果所有其他操作都失败,则抛出TypeLoadException
(如果由于对驻留的类型的引用而调用了加载进程
在从属程序集中)或FileNotFoundException(如果
进程(已手动调用)
Assembly.Load()将只将程序集加载到内存中,但它们没有加载 演示如何在该dll中创建classed的实例 解释如何在动态加载的程序集中创建类型的实例 什么是CLR的融合子系统故障?这是什么意思 详细说明(尤其是位的部分探测(融合)): 当探测无法定位程序集时,它将触发 AppDomain.AssemblyResolve事件,允许用户代码执行其 自定义加载。如果所有其他操作都失败,则抛出TypeLoadException (如果由于对驻留的类型的引用而调用了加载进程 在从属程序集中)或FileNotFoundException(如果 进程(已手动调用)
Assembly.Load()将只将程序集加载到内存中,但它们没有加载 演示如何在该dll中创建classed的实例 解释如何在动态加载的程序集中创建类型的实例
static byte[] StreamToBytes(Stream input)
{
var capacity = input.CanSeek ? (int) input.Length : 0;
using (var output = new MemoryStream(capacity))
{
int readLength;
var buffer = new byte[4096];
do
{
readLength = input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, readLength);
}
while (readLength != 0);
return output.ToArray();
}
}