问题标签 [dynamic-assemblies]

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 投票
3 回答
8979 浏览

c# - 如何保存存储在内存中的动态生成的程序集?

我想通过将程序集保存到光盘或在运行时反映它来掌握程序集。程序集由第三方在内存中动态生成。

有谁知道如何做到这一点?

0 投票
2 回答
7806 浏览

.net - .net 动态程序集

最近有人问我是否对 .Net 中的动态程序集有所了解。简短的回答是——我没有。

我找到了很多描述如何创建动态程序集的文章,但没有一个能够真正解释以下内容:

  • 它们是什么(除了它们直接从内存中运行)
  • 与静态程序集相比,它们提供了哪些优势
  • 真实世界的使用示例

对上述任何解释将不胜感激。

非常感谢。

0 投票
1 回答
110 浏览

.net - 创建动态程序集后如何更改其名称?

创建动态程序集后,有什么方法可以更改它的名称?我正在使用一个使用动态方法的框架,它正在创建一个与我的主程序集同名的动态程序集(当它尝试加载资源时会导致 WPF 出现问题)。所以我需要找到一个解决方法,我想尝试更改动态程序集的名称。

我尝试使用 GetName() 然后设置 Name 属性,但似乎 GetName 返回了名称的克隆,因为我的更改没有生效。

我还能尝试什么?

0 投票
1 回答
486 浏览

.net - 什么可能导致此 ExecutionEngineException?

我正在尝试使用 Reflection.Emit 在动态程序集中生成包装类。自动包装器生成是我正在编写的名为“GoInterfaces”的新开源库的一部分。

包装类实现IEnumerable<string>并包装List<string>. 在 C# 术语中,它所做的只是:

但是,当我尝试在包装类上调用 GetEnumerator() 方法时,我得到了 ExecutionEngineException。所以我将我的动态程序集保存到一个 DLL 并在其上使用了 il​​dasm。下面的代码有什么问题吗?

我有一个测试套件,它包含各种不同的东西,包括从其他接口派生的接口,以及具有相同签名的多个接口方法。只有当我尝试包装IEnumerable<T>时才会出现此问题。如果有人愿意,我很乐意发送源代码(2 个 *.cs 文件,无依赖项)。

0 投票
1 回答
624 浏览

c# - 动态生成程序集中的扩展方法?

我试图在动态生成的程序集中包含一个扩展方法静态类,除了我在第 6 行第 28 列不断收到“预期类型”的编译器错误,它恰好出现在“this”这个词上。如果我删除“this”,则不会返回错误(但它不是扩展方法)。

这是生成的代码,效果很好。

}

0 投票
2 回答
333 浏览

c# - 动态加载需要实际不可用的 GAC 程序集的程序集?

如果应用程序尝试加载一个程序集,该程序集引用了 GAC 中的程序集,而这些程序集在计算机上不可用,会发生什么情况?

基本上我想依靠程序集加载成功假设引用的程序集在最终用户机器上可用。我是不是很稠密?

0 投票
1 回答
1409 浏览

c# - 为什么动态关键字不适用于动态加载的程序集?

我正在开发一个 CSharp 表达式评估器,如下所示。该组件生成代码并在内存中编译,然后加载生成的程序集,创建生成的类的实例并运行它。结果保存在字典中。

我的问题是一切正常,直到最后一行代码失败,但有异常:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 'object' 不包含 'FirstName' 的定义。

但是,Visual Studio 能够向我展示专业的变量内容:

这是代码:

有任何想法吗?

谢谢你。

0 投票
3 回答
3090 浏览

c# - .NET:从动态程序集中访问非公共成员

我正在开发一个允许用户输入任意表达式的库。然后,我的库将这些表达式作为更大表达式的一部分编译到委托中。现在,由于仍然未知的原因,Compile有时/经常编译表达式会导致代码比它不是编译表达式时慢得多。我之前问过一个关于这个的问题,一个解决方法是不使用Compile,而是在新的动态程序集中的新类型上CompileToMethod创建一个方法。static这行得通,代码很快。

但是用户可以输入任意表达式,事实证明,如果用户调用非公共函数或访问表达式中的非公共字段,则System.MethodAccessException在调用委托时会抛出一个(在非公共方法的情况下) .

我在这里可能做的是创建一个新ExpressionVisitor的来检查表达式是否访问任何非公共的,并Compile在这些情况下使用较慢的,但我宁愿让动态程序集以某种方式获得访问非公共成员的权利。或者找出我可以做些什么Compile来变慢(有时)。

重现此问题的完整代码:

0 投票
2 回答
2108 浏览

.net - 由于动态程序集,Assembly.GetManifestResourceNames() 异常

如果我运行单元测试(mstest),如果我调用assembly.GetManifestResourceNames()

动态程序集中不支持调用的成员。

这是有问题的代码:

但是,如果我正确理解了文档,它应该可以工作,并且只有当我使用时,AssemblyBuilder.GetManifestResourceNames()我才会得到这个异常。

如果我尝试逐步浏览 .NET 源,我会收到以下消息:

mscorlib.dll!System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceNames() 没有可用的源

为什么会抛出这个异常?我错过了什么吗?

我忘了提到我mock.CallBase = True在测试中使用 Moq(带有选项)。

0 投票
1 回答
863 浏览

c#-4.0 - 在运行时加载程序集并调用方法并卸载程序集

我正在创建一个应用程序,它将连接到几个 sql 数据库并从数据库中获取一些详细信息,

在此应用程序中,我必须加密数据库连接详细信息,例如用户名密码。是的,它非常简单直接,只需编写一个方法来解密凭据。

但就我而言,我必须依靠第三方加密机制来解密凭据。此外,我必须连接到几个 sql 服务器,这些服务器将再次使用其他一些加密方法。因此我正在控制我的应用程序以动态加载加密程序集并调用加密方法。

但是当我加载程序集表单 Assembly.LoadFile("Path") 时,我无法卸载加载的程序集。我想我已经在单独的应用程序域中加载了这个程序集,并调用了相关的方法并卸载了该应用程序域。我在这方面需要一些帮助。由于我缺乏知识,我无法调用所需的方法。我的代码如下。请帮助我。

类应用程序设置 {

类数据加密 {

提前致谢。