2016-04-11 5 views
0

Ich arbeite an einem internen NuGet-Paket, das ein Pre-Build-Event hinzufügt.Wie aktualisieren Sie die * .props, die in einem NuGet-Paket enthalten sind?

Dies geschieht durch Angabe eines Build-Ordners, der eine MyPackage.props-Datei enthält, unter documentation.

Hier ist der Inhalt der Requisiten-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <PreBuildEvent>Some commands go here</PreBuildEvent> 
    </PropertyGroup> 
</Project> 

Wenn das Projekt hat noch nie ein Pre-Build-Ereignis hat, das Ereignis erstellt wird. Wenn in der Datei csproj jedoch ein vorhandenes PerBuildEvent-Element vorhanden ist, wird der neue Wert nicht aufgefüllt. Ich kann es an die Arbeit, wenn ich die csproj Datei öffnen und manuell die entsprechende PropertyGroupElement löschen:

<PropertyGroup> 
    <PreBuildEvent>Some command line stuff</PreBuildEvent> 
</PropertyGroup> 

Allerdings habe ich, wenn von dort zu löschen, da nur den Inhalt des Pre-Build-Ereignis zu löschen in der UI lässt nicht zu, dass der neue Wert geschrieben wird.

Ich will die Konvention basierende Methode über tun dies in install.ps1 verwenden, da die documentation angibt:

[NuGet 3.x] This script will not be executed in projects managed by project.json 

... und (ich diesen Teil aus nach links, bevor) gibt es eine Möglichkeit, dies zu tun wenn es keine csproj-Datei gibt?

Was ist los?

+0

Wenn das Pre-Build-Ereignis bereits vorhanden ist, möchten Sie es überschreiben? –

Antwort

1

Ich würde vorschlagen, dass Sie kein Prebuild-Ereignis in Ihren .props verwenden, da ich erwarten würde, dass Sie ein vorhandenes im Projekt nicht überschreiben möchten.

Stattdessen Sie bei Verwendung eines anderes Ziels aussehen könnten, so dass Ihre Logik vor dem Build läuft durch die BeforeTargets mit:

<Target Name="MyBeforeBuild" BeforeTargets="Build"> 
    <Message Text="### MyBeforeBuild ###" Importance="high" /> 
</Target> 

Sie auch mit dem DependsOnTargets aussehen mögen Attribut, wenn Sie Ihr Pre-Build brauchen Ereignis nach einem anderen Ziel zu laufen.

<Target Name="MyTarget" DependsOnTargets="$(CoreCompileDependsOn)"> 
</Target> 
+0

Wir haben * nie * mehr als ein Element benötigt, um es vor dem Build auszuführen. Aber jetzt, wo ich das gesagt habe, wird es für uns zur Norm werden. :) Ich probiere das aus und melde mich zurück. – kettch

+0

Es hat funktioniert. Vielen Dank! – kettch

Verwandte Themen