C# 在运行时使用不同的资源创建exe的副本
我们想让我们的客户能够根据我们的经验,为他们的客户定制前妻 ie,基本上是一种制作exe副本的能力,其中嵌入了不同的xml配置文件。“在安装中包含它”不是一个选项-我们希望它看起来像是为我们客户的客户定制的 我目前正在考虑在运行时编写一个包含资源的dll(使用AssemblyBuilder),然后调用ILMerge将其嵌入到最终的exe中,但这比我想要的稍微有点黑客 因此,这是一个很高的问题,但无论如何可能值得一问:是否有一个.NET库允许修改.NET exe的资源,从而避免整个“dll包含ILMerge嵌入的资源”位C# 在运行时使用不同的资源创建exe的副本,c#,.net,exe,C#,.net,Exe,我们想让我们的客户能够根据我们的经验,为他们的客户定制前妻 ie,基本上是一种制作exe副本的能力,其中嵌入了不同的xml配置文件。“在安装中包含它”不是一个选项-我们希望它看起来像是为我们客户的客户定制的 我目前正在考虑在运行时编写一个包含资源的dll(使用AssemblyBuilder),然后调用ILMerge将其嵌入到最终的exe中,但这比我想要的稍微有点黑客 因此,这是一个很高的问题,但无论如何可能值得一问:是否有一个.NET库允许修改.NET exe的资源,从而避免整个“dll包含IL
或者,有没有更好的方法来解决这个问题,并且仍然能够达到既定的目标?听起来需要做大量的工作来取代已经编译好的方法。
我会用一个构建脚本、一个参数和不同的资源文件来完成 虽然这不是我解决此问题的方法,但有一个库允许您更改已编译可执行文件的嵌入式资源 使用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);
}
static void Main(字符串[]args)
{
字符串pathToExecutable=“Target.exe”;
byte[]encoding=encoding.Unicode.GetBytes(“”);
var resource=新的嵌入式资源(
“配置文件”,
私人的,私人的,
编码);
var asm=AssemblyDefinition.ReadAssembly(路径可执行);
asm.Modules.FirstOrDefault().Resources.Add(资源);
asm.Write(路径可执行);
}
这不需要向客户提供项目的完整源代码吗?不,您需要获取要替换的资源,并为每个客户提供一个资源文件。将所有资源存储在不同的文件夹中,例如客户端。。。ClientB当您为ClientA构建时,请在编译Nono之前将该资源文件从该文件夹中复制下来,这是为我们客户的客户机准备的。一旦被移除。我们的客户需要能够为其客户定制特定的计划-不同的徽标、不同的选项、不同的措辞。这一切都可以通过xml文档轻松实现,不幸的是,目前我必须自己去做。我们希望我们的客户能够做到这一点。稍微复杂一点。只需通过配置文件处理一切。如果需要,让他们处理创建新的setup.exe。