7

Tengo el código fuente de Entlib 5.0 y necesito firmar todos los ensamblados usando mi propia clave (archivo snk).Modificar archivos programmatically csproj

La forma más sencilla sería la de abrir el archivo de solución EnterpriseLibrary.2010 en Visual Studio 2010 y luego seleccione para cada proyecto Properties-> Acceso y seleccione firmar el ensamblado y seleccione su archivo de claves.

Pero yo no quiero hacer eso manualmente entonces yo podría escribir una secuencia de comandos para editar manualmente los archivos de proyecto e insertar el siguiente texto al final de la lista actual de PropertyGroups:

<PropertyGroup> 
    <SignAssembly>true</SignAssembly> 
    </PropertyGroup> 
    <PropertyGroup> 
    <AssemblyOriginatorKeyFile>keyFile.snk</AssemblyOriginatorKeyFile> 
    </PropertyGroup> 

Cualquier clase de ayuda en C# o scripting si fuera mejor para hacerlo de manera fácil y rápida?

+1

¿Por qué no escribir un programa C# que utiliza la clase XDocument? –

Respuesta

19

Puede echar un vistazo al espacio de nombres Microsoft.Build.BuildEngine MSDN Link

Código de ejemplo:

Engine eng = new Engine() 
Project proj = new Project(eng); 
proj.Load(FullProjectPath); 
proj.SetProperty("SignAssembly", "true"); 
proj.Save(FullProjectPath); 

Recientemente he usado algo similar para hacer una serie de cambios en todos .csproj de mi empresa archivos (más de 200) en lugar de abrir manualmente cada proyecto y hacer cambios.

Espero que esto ayude.

+1

seguro, cuando lo usé, escribí una aplicación de consola que miraba nuestro directorio fuente y recogía todos los archivos .csproj y luego hacía los cambios que necesitaba. Solo necesita agregar una referencia a Microsoft.Build.Engine y Microsoft.Build.Framework –

+0

¿Sabe de antemano si la porción "Post Build Event" del csproj está disponible a través de esta biblioteca? He pescado un poco. Pero aún no lo he encontrado Gracias. Y "Upvote" para esta respuesta. – granadaCoder

+0

seguro, debería poder hacer algo como Target postBuild = proj.Targets ["AfterBuild"]; suponiendo que no se ha comentado en el archivo del proyecto. Me asomé por alrededor de 5 segundos y no vi cómo agregar un objetivo si no existía, pero sé que se puede hacer. Además, este espacio de nombres es obsoleto y es posible que tenga más suerte con su reemplazo. –