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



我们希望为我们的客户提供为他们的客户定制前任的能力。

即,基本上可以制作一个嵌入不同xml配置文件的exe副本。"在安装中包含它"不是一个选项-我们希望它看起来像是为我们客户的客户端定制的。

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

因此,这是一个很高的问题,但也许无论如何都值得一问:是否有一个.NET库可以修改.NET exe的资源,从而避免整个"dll包含ILMerge嵌入的资源"位?

或者,有没有更好的方法来实现这一点,并且仍然符合既定目标?

一旦它已经编译好,就需要做很多工作来替换它。我会用一个构建脚本、一个参数和不同的资源文件来完成它。

虽然这不是我处理这个问题的方法,但有一个库允许您更改已编译的可执行文件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);
    }

最新更新