2012-03-19 12 views
6

Queremos ofrecer a nuestro cliente la posibilidad de crear archivos personalizados, basados ​​en los nuestros, para sus clientes.Crear copia de exe con un recurso diferente durante el tiempo de ejecución

es decir, básicamente la capacidad de hacer una copia de un exe con un archivo de configuración xml diferente incrustado en él. El "incluirlo en la instalación" no es una opción; queremos que parezca hecho a medida para los clientes de nuestro cliente.

Actualmente estoy pensando en escribir un dll en tiempo de ejecución, incluido el recurso (utilizando un AssemblyBuilder), y luego llamar a ILMerge para incrustarlo en el exe final, pero esto es un poco más hackish de lo que me gustaría.

Así que es una pregunta difícil, pero quizás valga la pena preguntar de todos modos: ¿hay una biblioteca .NET que permita modificar los recursos de un exe .NET que podría evitar todo el bit "dll que contiene un recurso incrustado por ILMerge"?

O, como alternativa, ¿hay un mejor enfoque para esto que aún cumpla con los objetivos establecidos?

Respuesta

2

Suena como mucho trabajo para reemplazarlo una vez que ya está compilado. Lo haría con un script de compilación, un param y diferentes archivos de recursos.

+0

Sería esto no requiere dar al cliente el código fuente completo del proyecto? – Mania

+0

no necesita obtener los recursos que desea reemplazar y tener un archivo de recursos para cada cliente. Almacene todos sus recursos en carpetas diferentes, ej. ClientA ... ClientB y cuando está compilando para ClientA copie ese archivo de recursos de esa carpeta antes de compilar –

+0

Nono, esto es para los clientes de nuestro cliente. Como en una vez eliminado. Nuestro cliente necesita poder personalizar el programa específico para sus clientes: diferentes logotipos, diferentes opciones, diferentes palabras. Todo esto se puede hacer fácilmente a través de un documento xml, lamentablemente en este momento tengo que ser yo quien lo haga. Queremos que nuestro cliente pueda hacerlo. Un poco más complicado. – Mania

0

Si bien no es el enfoque que tomaría con este problema, hay una biblioteca que le permite alterar los recursos incrustados de un ejecutable compilado, Cecil.

Incorporación de un recurso con Cecil:

inclusiones de espacio de nombres:

using Mono.Cecil; // supports both net and mono 

incrustar el recurso:

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); 
    } 
Cuestiones relacionadas