2008-12-16 6 views
9

Ich möchte einen Beitrag Buildereignis implementieren, die die folgenden AktionenVS Beitrag beim Aufbau Ereignis

  1. Ein relativer Pfad Kopie der DLL-Ausgang (1 Datei, nicht alle Debug-Jazz)
  2. Ein Register führt die Ausgabe-DLL nach GAC

Wie wird das gemacht?

Antwort

15

Willst du das?

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll 
regasm $(TargetPath) 

(in das Feld eingegeben für Post-Build-Schritt unter Projekteigenschaften)

+7

Auf Microsoft Visual Studio 2010 wird dies mit einem Fehler 9009 fehlschlagen: Sie müssen den vollständigen Pfad zu regasm wie folgt verwenden: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm.exe $ (TargetPath) – Contango

1

Sie bei MS möchten aussehen bauen. Es ist, was wir hier bei der Arbeit verwenden.

CodeProject Link & MSDN Ref

+0

Ja, MSBuild ist dafür hervorragend. Wenn Sie in Visual Studio bleiben möchten, können Sie auch Post-Build-Befehle unter Projekteigenschaften eingeben. –

7

Geben Sie folgende in "Projekt Eigenschaften-> Build veranstaltungen-> Post Ereignisse Befehlszeile bauen:"

xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)" 

oder fügen Sie Schnipsel folgenden zu projizieren (zB csproj) Datei

<PropertyGroup> 
    <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent> 
</PropertyGroup> 

Beachten Sie, dass es empfehlenswert ist, "" um copy command argume hinzuzufügen nts, ​​um Probleme mit Pfaden zu vermeiden, die Leerzeichen enthalten. Beachten Sie auch, dass mehrere Befehle miteinander kombiniert werden können, indem Sie & &

5

kombinieren Sind Sie sicher, dass Sie dies als Teil einer Kompilierung tun möchten? Ich würde empfehlen, Projektreferenzen in Lösungen anstelle des GAC zu verwenden, wenn Sie es vermeiden können. Das Kopieren von Dateien ist eine Sache, aber die Registrierung im GAC ist ziemlich aufdringlich und Sie sollten vielleicht die anderen Umgebungen in Betracht ziehen, in denen Ihr Code kompiliert ist. Dinge wie Maschinen anderer Entwickler und Testumgebungen/Build-Server usw. Wenn Sie einen Build-Server haben wirklich sollten Sie etwas wie NAnt mit einer Art von Continuous Integration Server verwenden.

2

ich gleiche Problem hatte und kämpfte ich ein wenig es funktioniert zu machen.

In meinem Fall wollte ich die anders herum tun, die die SDL-DLL in meinen Ausgabeordner kopiert.

copy "$(SolutionDir)SDL\lib\x86\SDL.dll" "$(SolutionDir)$(Configuration)\" 

Beachten Sie, dass, $(Configuration) Ihre Ausgabeordner (z Debug oder Release) sein.

Die Zitate war was ich vermisst habe, anscheinend brauchst du sie wenn die rechte Seite mit einem \ endet. Daher könnte es sicherer sein, sie immer zu verwenden.

Hoffe, jemand anderen eine 5 Minuten zu retten!

P.S. Ich verwende Visual Studio 2010

0

Lief in ein verwandtes Problem. Die Antworten hier halfen (Danke!).

Mein Szenario war im Debuggen einer MEF-abhängigen Anwendung Ich benötigte die DLLs an einem bestimmten Speicherort. Ich kam mit dem Überschreiben des vorherigen Builds in Konflikt, also musste ein Löschen zum Skript hinzugefügt werden.

delete $(SolutionDir)FileService\$(ProjectName).dll 
copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll 

Hoffe, dass auch jemand hilft!