Pre-Build-Ereignis für alle Setup-Quellassemblies

16/02/2010 - 14:32 von Marvin Massih | Report spam
Hallo,

ich möchte gern sàmtliche Assemblies, die in meine Setupdatei gepackt
werden (normales Setup-Projekt), vorher signieren.
Leider scheint sich das Setup die Dateien ja allerdings von überall
zusammenzusuchen, etwas à la "signtool *.dll" scheint daher nicht
möglich zu sein.

Hat jemand einen Tipp, wie ich das dennoch umsetzen kann?

Viele Grüße

Marvin

Marvin Massih | http://www.marvin-massih.de
 

Lesen sie die antworten

#1 Immo Landwerth
16/02/2010 - 15:03 | Warnen spam
On 16.02.2010 14:32, Marvin Massih wrote:

ich möchte gern sàmtliche Assemblies, die in meine Setupdatei gepackt
werden (normales Setup-Projekt), vorher signieren.
Leider scheint sich das Setup die Dateien ja allerdings von überall
zusammenzusuchen, etwas à la "signtool *.dll" scheint daher nicht
möglich zu sein.



Auch wenn das jetzt nicht wirklich direkt Dein Problem adressiert: daher
empfehle ich für neuere Setup Projekte generell WiX. Man hat im
allgemeinen mehr Kontrolle und Transparenz wann und welche Dateien ins
Setup integriert werden.

Zu Deinem eigentlichen Problem:

Ich würde mir generell angwöhnen, für Projekte ein eigenstàndiges
MSBuild Projekt "Build.proj" anzulegen, was für das erzeugen Deiner App
zustàndig ist. Im einfachsten Fall sieht die Datei so aus:

<Project xmlns="http://schemas.microsoft.com/develo...2003"
DefaultTargets="Build">

<Target Name="Build">
<MSBuild Projects="MySolution.sln" />
</Target>

</Project>

Um den Build direkt aus dem Windows Explorer anzustoßen, lege ich mir
meistens noch eine Build.bat mit folgendem Inhalt an:

@ECHO OFF
"%SystemRoot%\Microsoft.NET\Framework\v3.5\MSBuild.exe" /nologo
PAUSE

Sobald Setups, digitales signieren, Hilfe Datei erstellen o.a.
hinzukommen, zahlt sich eine solche Datei nàmlich direkt aus -- man kann
die Datei entsprechend anpassen, ohne dass sich am Buildprozess etwas
àndert. Einfach Build.bat ausführen und nach einiger Zeit hat man seine
Applikation im enstprechenden Output Verzeichnis liegen.

Um Dein Problem jetzt zu lösen, würde ich das "Build" Target so
ausgestalten:

<Target Name="Build">
<!-- 1. Kompilieren -->
<MSBuild Projects="MeinHauptProject.csproj" />

<!-- 2. Signieren -->
<!-- Signtool enstprechend ausführen. Vermutlich am besten, direkt
die Dateien im \obj Order zu signieren, da diese ja vom VS
Deployment Projekt verwendet werden.
<Exec Command="signtool.exe sign ..."/>

<!-- 3. Setup erstellen -->
<!-- Leider sind VS Deployment Projekt keine MSBuild Projekte, sodass
man dafür devenv.exe verwenden muss: -->
<Exec Command="devenv.exe /Build Setup.vdproj"/>
</Target>

Falls das VS Deplyoment Projekt selbst eine Kompilierung startet (und
damit die signierten Dateien wieder mit den nicht-signierten
überschreibt) würde ich die Assemblies als einfache Dateien zum Setup
hinzufügen (statt einer Projektreferenz "primàre Ausgabe von <Project>").

Immo Landwerth

Ähnliche fragen