7

Ho codice sorgente di Entlib 5.0 e ho bisogno di firmare tutti gli assembly utilizzando la mia chiave (file snk).Modificare i file csproj a livello di programmazione

Il modo più semplice sarebbe quella di aprire il file di soluzione EnterpriseLibrary.2010 in Visual Studio 2010 e poi per ogni progetto selezionare Proprietà-> Firma e selezionare firmare l'assembly e quindi selezionare il file di chiave.

Ma io non voglio manualmente cosa che poi ho potuto scrivere uno script per modificare manualmente i file di progetto e inserire il seguente alla fine della lista attuale dei PropertyGroups:

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

Qualsiasi classe helper in C# o scripting se fosse meglio per farlo in modo facile e veloce?

+1

Perché non scrivere un programma C# che utilizza la classe XDocument? –

risposta

19

Potete dare un'occhiata al namespace Microsoft.Build.BuildEngine MSDN Link

codice di esempio:

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

ho qualcosa di simile recentemente utilizzato per fare una serie di modifiche in tutti Csproj della mia azienda file (oltre 200) anziché aprire manualmente ciascun progetto e apportare modifiche.

Spero che questo aiuti.

+1

sicuro, quando l'ho usato, ho scritto un'applicazione per console che ha guardato la nostra directory sorgente e raccolto tutti i file .csproj e quindi ho apportato le modifiche di cui avevo bisogno. Hai solo bisogno di aggiungere un riferimento a Microsoft.Build.Engine e Microsoft.Build.Framework –

+0

Lo sai fuori mano se la parte "Post Build Event" di csproj è disponibile tramite questa libreria? Ho pescato un po '. Ma non l'ho ancora trovato. Grazie. E "Upvote" per questa risposta. – granadaCoder

+0

sicuro, dovresti essere in grado di fare qualcosa come Target postBuild = proj.Targets ["AfterBuild"]; partendo dal fatto che non è stato commentato nel file di progetto. Ho cercato per circa 5 secondi e non ho visto come aggiungere un obiettivo se non esisteva, ma so che può essere fatto. Inoltre, questo spazio dei nomi è obsoleto e potresti avere più fortuna con la sua sostituzione. –