在运行时使用不同的资源创建exe的副本

时间:2012-03-19 12:01:20

标签: c# .net exe

我们希望我们的客户能够根据我们的客户为他们的客户制作定制的exes。

即,基本上能够使用嵌入在其中的不同xml配置文件来制作exe的副本。 “将它包含在安装中”不是一个选项 - 我们希望这看起来好像是为我们客户的客户定制的。

我目前正在考虑在运行时编写一个dll,包括资源(使用AssemblyBuilder),然后调用ILMerge将其嵌入到最终的exe中,但这比我想要的更加晦涩。

所以这是一个很高的问题,但也许值得问一下:是否有一个.NET库允许修改.NET exe的资源,这可以避免整个“dll持有ILMerge嵌入的资源”位?

或者,是否有更好的方法可以达到既定目标?

2 个答案:

答案 0 :(得分:2)

在已经编译完成后,听起来有很多工作要替换它。 我会用构建脚本,参数和不同的资源文件来做。

答案 1 :(得分:0)

虽然这不是我对此问题采取的方法,但有一个库允许您更改已编译的可执行文件Cecil的嵌入资源。

使用Cecil嵌入资源:

名称空间包含:

    using Mono.Cecil; // supports both net and mono

嵌入资源:

    static void Main(string[] args)
    {
        string pathToExecutable = "Target.exe";

        byte[] encoding = Encoding.Unicode.GetBytes("<Data><!-- data goes here --></Data>");

        var resource = new EmbeddedResource(
               "ConfigurationFile", 
                ManifestResourceAttributes.Private, 
                encoding);

        var asm = AssemblyDefinition.ReadAssembly(pathToExecutable);

        asm.Modules.FirstOrDefault().Resources.Add(resource);

        asm.Write(pathToExecutable);
    }