.net 使用AssemblyBuilder,如何使所有或任何引用的程序集嵌入到保存的程序集中,而不是链接到保存的程序集中?

.net 使用AssemblyBuilder,如何使所有或任何引用的程序集嵌入到保存的程序集中,而不是链接到保存的程序集中?,.net,assemblies,linker,embed,dynamically-generated-co,.net,Assemblies,Linker,Embed,Dynamically Generated Co,我有一个正在执行的程序集,它使用AssemblyBuilder动态生成另一个程序集 生成的程序集由函数组成,这些函数只测试正在执行的程序集中某些类的构造。由于生成的程序集引用类中的函数位于执行程序集中,因此我希望将执行程序集自身嵌入到它创建的程序集中 到目前为止,我只生成了一个链接到正在执行的程序集的程序集,而没有生成嵌入它的程序集。重要的是,我只有一个最终组件(.dll) 我是否需要将程序集作为资源嵌入?如果是,怎么做?我不希望必须编写代码来动态加载嵌入式程序集,除非这是唯一的方法。我正在寻找

我有一个正在执行的程序集,它使用AssemblyBuilder动态生成另一个程序集

生成的程序集由函数组成,这些函数只测试正在执行的程序集中某些类的构造。由于生成的程序集引用类中的函数位于执行程序集中,因此我希望将执行程序集自身嵌入到它创建的程序集中

到目前为止,我只生成了一个链接到正在执行的程序集的程序集,而没有生成嵌入它的程序集。重要的是,我只有一个最终组件(.dll)


我是否需要将程序集作为资源嵌入?如果是,怎么做?我不希望必须编写代码来动态加载嵌入式程序集,除非这是唯一的方法。我正在寻找像AssemblyBuilder.EmbedAssembly(getExecutionGassembly())这样简单的东西。

没有简单的方法。您至少有两种选择:

  • 将引用的程序集嵌入为,并根据需要从中发出
  • 使用后发射步骤合并所有部件

如何执行第一个选项?我不想使用ILMerge,但这是ILMerge在内部实现的第一个选项吗?我添加了到相应API的链接。这不是ILMerge所做的。ILMerge实际上是从一组其他程序集创建一个程序集。第一种解决方案是将多个程序集作为资源嵌入到另一个程序集中。如何将程序集加载挂钩发送到只有一个类和一些方法的不可执行dll中?我也不确定如何将引用的dll作为资源嵌入。如果程序集不可执行,您将如何运行测试?无论如何,你需要有一种启动测试的方法。然后确保已发出程序集负载挂钩,或者触发测试寄存器的代码(将查找引用的通用程序集负载挂钩)是程序集引用。至于嵌入dll,只需使用链接的API。通过CLR集成功能触发/调用方法的代码是SQL Server。生成的DLL部署到SQL Server,其静态方法注册为CLR用户定义函数。UDF在check约束中被引用,因此您可以看到我没有任何地方可以钩住任何东西。我是否可以发出一个方法,在SQL Server首次加载dll时运行并安装这样的钩子?