2012-03-19 63 views
6

我們希望爲客戶提供爲客戶製作基於我們的定製exes的能力。使用不同的資源在運行時創建副本exe文件

即,基本上能夠使用嵌入在其中的不同xml配置文件來製作exe副本。 「包含在安裝中」不是一種選擇 - 我們希望這看起來好像是爲我們客戶的客戶定製的。我正在考慮在運行時編寫一個DLL(包括資源(使用AssemblyBuilder)),然後調用ILMerge將它嵌入到最終的exe文件中,但這比我想要的更加惡意。

所以這是一個很高的問題,但也許值得問一下:是否有一個.NET庫允許修改.NET EXE的資源,這可以避免整個「DLL擁有由ILMerge嵌入的資源」位?

或者,還有更好的方法來達到這個目標嗎?

回答

2

聽起來像很多工作,以取代它已經編譯後的工作。 我會用構建腳本,參數和不同的資源文件來做到這一點。

+0

這會不會要求給予客戶端項目的全部源代碼? – Mania 2012-03-19 13:57:38

+0

不,您需要獲取要替換的資源併爲每個客戶端分配一個資源文件。將所有資源存儲在不同的文件夾中。 ClientA ... ClientB,並且在編譯 – 2012-03-19 14:00:24

+0

Nono之前,當您爲ClientA構建資源文件時,將從該文件夾中複製該資源文件,這適用於我們客戶的客戶端。如在一次刪除。我們的客戶需要能夠定製特定於其客戶的程序 - 不同的標識,不同的選項,不同的措辭。這一切都很容易通過XML文檔實現,不幸的是,現在我必須成爲一個可以做到這一點的人。我們希望我們的客戶能夠做到這一點。稍微複雜一些。 – Mania 2012-03-19 15:06:17

0

雖然這不是解決此問題的方法,但有一個庫允許您更改編譯的可執行文件的嵌入式資源,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); 
    } 
相關問題