Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时使用不同的资源创建exe的副本_C#_.net_Exe - Fatal编程技术网

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

C# 在运行时使用不同的资源创建exe的副本,c#,.net,exe,C#,.net,Exe,我们想让我们的客户能够根据我们的经验,为他们的客户定制前妻 ie,基本上是一种制作exe副本的能力,其中嵌入了不同的xml配置文件。“在安装中包含它”不是一个选项-我们希望它看起来像是为我们客户的客户定制的 我目前正在考虑在运行时编写一个包含资源的dll(使用AssemblyBuilder),然后调用ILMerge将其嵌入到最终的exe中,但这比我想要的稍微有点黑客 因此,这是一个很高的问题,但无论如何可能值得一问:是否有一个.NET库允许修改.NET exe的资源,从而避免整个“dll包含IL

我们想让我们的客户能够根据我们的经验,为他们的客户定制前妻

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

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

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


或者,有没有更好的方法来解决这个问题,并且仍然能够达到既定的目标?

听起来需要做大量的工作来取代已经编译好的方法。
我会用一个构建脚本、一个参数和不同的资源文件来完成

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

使用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。