【问题标题】:Save a dynamic assembly to file将动态程序集保存到文件
【发布时间】:2016-02-06 04:34:58
【问题描述】:

我已经尝试了几个小时来寻找保存动态程序集的方法(我可以访问程序集 - 它属于“程序集”类型)。此外,我无权访问程序集的字节数组。我还查看了 StackOverflow,但此搜索没有产生成功的结果。

澄清:

// the assembly (this is an example)
Assembly asm = SomeMethod(); // returns a valid result
// now how would I go about saving to disk?

是否可以保存 Assembly 类型的程序集?
如果是这样,我将如何进行?

提前致谢。

对于评论“可能重复”的人: 这是重复的,但有正当理由:其他线程上的答案不起作用 - 这是试图用低质量的答案重振主题。

This 不起作用,因为答案没有实例化“结果”,因此我无法复制解决方案。

AssemblyBuilder.Save() 将不起作用,因为据称 C#“无法将 AssemblyBuilder 类型转换为 Assembly 类型”,即使此处的其他一些答案包括此作为解决方案。

【问题讨论】:

  • 如果您认为它是重复的,那么寻求新答案的正确方法是提供赏金。如果您认为这是新变体 - 请务必在您的问题中提供链接并解释为什么它不适合您。
  • 好的,符合条件的我会加赏金的。
  • 根据您链接到的问题(“保存动态生成的程序集”),当您尝试保存由其他人生成的程序集(或只是由其他人加载)时,它看起来不像是重复的- 不直接支持(显然您可以通过反射收集所有信息并重新创建类似的程序集,但它会有不同的身份/不完全相同的内容)。
  • 这是 Google 上的第一个结果(用于“C# 保存动态程序集”)。
  • 您可能想向未来的访问者澄清这个问题是否确实是关于保存动态程序集(IsDynamic 设置为 true),或者您想到了“动态”的其他含义。跨度>

标签: c# dll save .net-assembly


【解决方案1】:

您是否尝试过使用 Mono.Cecil 项目? 它提供了多种 API 来注入 IL 和/或编辑代码,您还可以使用它保存您的程序集。我自己在一个项目中使用了它,并且根据您的问题使用了 AFAIK,它也可以帮助您解决问题。

【讨论】:

  • 我正在尝试使用 Mono.Cecil - 我看到 AssemblyDefinition 包含一个 Write(string) 方法,但我需要将 Assembly 转换为 AssemblyDefinition 或从程序集中获取字节。您知道将 Assembly 转换为 AssemblyDefinition 的任何方法吗?
  • 真的,我选择了艰难的方式并使用 IL 重建了我的程序集。
  • 这就是我现在正在做的——我会在测试结果后再次发表评论。
  • 谢谢 :) 我编辑了 IL 以将字节从 Assembly 转换为 write 方法 :)
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多