2017-02-08 1 views
1

Für ein MSBuild-Projekt möchte ich eine Art .config-Datei ausgeben, die entlang der generierten Binärdatei neu verteilt werden würde, so dass die zum Zeitpunkt der Erstellung verwendeten Parameter sein können von den Benutzern der Binärdatei programmgesteuert überprüft.Schreiben Sie Eigenschaften (Name = Wert) in eine Datei von einem MSBuild-Projekt

Ausgabedateiformat:

PropertyName1=ValueA 
PropertyName2=ValueB 
... 

Idealerweise würde die Liste der Eigenschaften schreiben enthalten ihre Namen nur. Vielleicht mag:

<ItemGroup> 
    <MyExposedDictionary Include="Configuration" /> 
    <MyExposedDictionary Include="Platform" /> 
    <MyExposedDictionary Include="PropertyName1" /> 
    ... 
</ItemGroup> 

Mit MyExposedDictionary das Argument ist zu einem gewissen DotConfigFileWriter Aufgabe zu geben, sowie der Pfad der Zieldatei.

fand ich several ways zu write down values in eine Datei, darunter ein Teilziel mit einigen C# code in it, aber ich bin neu in MSBuild und ich bin nicht sicher, wie ich diese Anforderungen in einer einzigen Target verschmelzen können, um es re- verwendbar.

+1

Das Schreiben in eine Datei ist einfach, aber das andere Problem besteht darin, 'den Namen einer Eigenschaft als String anzugeben, wie man ihren Wert erhält'. Was leider schwer, wenn nicht unmöglich ist; Suche nach z.B. 'msbuild benutzerdefinierte Aufgabe erhalten Eigenschaft' dann z. http://stackoverflow.com/questions/10474990/how-do-i-access-current-project-context-within-a-custom-task. Wenn Sie jedoch bereit sind, einige Duplikate hinzuzufügen, können Sie einfach folgendes verwenden: (oder erstellen Sie zuerst eine Elementgruppe) mit Zeilen, dann schreibe es in Datei) – stijn

+0

@stijn das ist eine wertvolle Eingabe, danke – polyvertex

Antwort

0

Für den Fall, dass jemand mit der gleichen Anforderung kommt, hier ist, was ich am Ende hatte. Nicht wirklich zufrieden mit dem Ergebnis, wie ich für etwas allgemeinere aber zumindest hoffte tut es die Aufgabe und fügt sich gut in meinem Projekt:

<Target Name="WriteBuildProperties" BeforeTargets="PreBuildEvent"> 
    <WriteLinesToFile File="$(DotConfigFile)" Overwrite="true" Lines="" /> 
    <WriteLinesToFile File="$(DotConfigFile)" Lines="ProjectName=$(ProjectName)" /> 
    <WriteLinesToFile File="$(DotConfigFile)" Lines="Configuration=$(Configuration)" /> 
    ... 
</Target> 

Wenn jemand eine elegantere Lösung haben, passieren, springen Sie bitte an!

0

Ich bin mir nicht sicher, wo sich Ihr Problem befindet. Ich habe eine ähnliche Anforderung, dass eine Datei von dem gerade kompilierten Programm erstellt wird. Ich bearbeitete die Eigenschaften des Projekts: in der build events geben Sie einen Post-build action wie

REM create special file 
"$(ProjectDir)$(OutDir)MyProgram.exe" /WriteFile MyFile.xml 

Natürlich müssen Sie auch Ihr Programm ändern, so dass er das Richtige tut, wenn sie mit diesem Parameter aufgerufen (und stoppt danach abgeschlossen haben action - zeigt keine GUI an oder startet als Windows-Dienst.

+0

Die generierte Binärdatei hat nicht alle erforderlichen Werte, nur das MSBuild-Projekt ** zur Build-Zeit ** tut und ändert die Art des generierten Programms hier kommt leider nicht in Frage. – polyvertex

Verwandte Themen