我们希望为我们的客户提供为他们的客户定制前任的能力。
即,基本上可以制作一个嵌入不同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);
}