如何在CLR程序集中添加,删除和更新资源?

时间:2009-04-20 00:48:54

标签: resources clr ilmerge

我已经仔细研究过,无法找到有关更改程序集中托管资源的任何信息(请注意,我已经熟悉Win32资源和用于更改这些资源的API)。

我的应用程序具有需要由最终用户更新的资源,并且应用程序将作为单个可执行文件分发(因此我不能仅使用附属程序集)。

我看到了一些可能的解决方法,但它们看起来像是hackish:

第一个是使用ILMerge:我在内存中创建一个包含新资源的新程序集,并使用ILMerge将其与原始程序集组合以形成新程序。唯一的缺点是资源无法更新或删除。

第二个有点类似:会有一个.netmodule(来自C#编译器),它与al.exe一起使用/ embed开关运行,以添加资源以形成新程序集。缺点是原始组件中没有任何资源存在。

我倾向于ILMerge选项,但重新分配的条款含糊不清。 EULA没有提及再分配权(所以我在这个否定自由社会中假设它是允许的)但微软研究页面说不允许重新分配(但它的措辞含糊不清,从我可以说它可能指的是商业再分配,这不适用于我,因为这是一个非盈利的GPL项目。)

由于

1 个答案:

答案 0 :(得分:1)

恕我直言,我认为无论如何都不应该这样做。如果此资源实际上是用户数据,即使存在“预安装”集合,它也不属于嵌入式资源。

你们的集会签了吗?您必须在更改后重新签名,您的私钥被公开,每个人都可以签署您的申请。所以签署它并不值得,无论如何你都有安全风险。

将资源移至外部文件。您仍然可以嵌入“预定义”资源。 首次启动应用程序时,您将创建外部文件并将嵌入的资源复制到外部文件。如果外部文件存在,则不再关心嵌入的资源。