2012-11-08 5 views

risposta

18

penso che la modifica di proprietà PostBuildEvent dell'utente è il modo sbagliato di procedere su come aggiungere un'azione di post-generazione per un progetto. Credo che il modo consigliato sia di inserire la tua azione personalizzata in una destinazione MSBuild importata nel file di progetto. A partire da NuGet 2.5, se si include una cartella 'build' nel pacchetto (allo stesso livello del contenuto e degli strumenti) e contiene un file {packageid} .targets o {packageid} .props, NuGet aggiungerà automaticamente un'importazione a il file di progetto quando si installa il pacchetto.

Ad esempio, si dispone di un pacchetto chiamato MyNuGet. Si crea un file di build \ MyNuGet.targets contenenti:

<?xml version="1.0" encoding="utf-8" ?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="MyNuGetCustomTarget" AfterTargets="Build"> 
     <Message Importance="high" Text="Message from MyNuGetCustomTarget. Configuration: $(Configuration)" /> 
    </Target> 
</Project> 

Questo crea un obiettivo personalizzato che è configurato per l'esecuzione dopo il target di costruzione standard. NuGet gestirà l'inserimento dell'Importazione all'installazione e rimuoverlo durante la disinstallazione.

+0

non ha visto la voce aggiunta al progetto dopo l'installazione ma viene chiamata. NICE TY – workabyte

6

Non per il file .nuspec, ma è possibile per install.ps1 che è possibile aggiungere al pacchetto utilizzando nuspec. Ecco quello che sto facendo (non so se è il modo migliore per farlo, ma funziona):

param($installPath, $toolsPath, $package, $project) 

$project.Properties | where { $_.Name -eq "PreBuildEvent" } | foreach { $_.Value = "copy `"`n`$(ProjectDir)Web.`$(ConfigurationName).config`" `"`$(ProjectDir)Web.config`"" } 
+0

Sembra interessante, ci proverò! –

+0

puoi aiutarmi a risolvere http://stackoverflow.com/questions/25840375/how-to-add-prebuildevent-in-install-ps1-in-nuget – IloveIniesta

8

questo è un modo un po 'più pulito per impostare un evento di costruire da un install.ps1 lo script powershell nel pacchetto NuGet:

$project.Properties.Item("PostBuildEvent").Value = "your build event here" 
+0

puoi aiutarmi a risolvere questo? Http: //stackoverflow.com/questions/25840375/how-to-add-prebuildevent-in-installazione-ps1-in-nuget – IloveIniesta