我们希望我们的客户能够根据我们的客户为他们的客户制作定制的exes。
即,基本上能够使用嵌入在其中的不同xml配置文件来制作exe的副本。 “将它包含在安装中”不是一个选项 - 我们希望这看起来好像是为我们客户的客户定制的。
我目前正在考虑在运行时编写一个dll,包括资源(使用AssemblyBuilder),然后调用ILMerge将其嵌入到最终的exe中,但这比我想要的更加晦涩。
所以这是一个很高的问题,但也许值得问一下:是否有一个.NET库允许修改.NET exe的资源,这可以避免整个“dll持有ILMerge嵌入的资源”位?
或者,是否有更好的方法可以达到既定目标?
答案 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);
}