2013-10-28 15 views
12

Es gibt ein winforms (NET 3.5) -Projekt foo.csproj mit lokalisierten Ressourcendateien. Ich benutze msbuild, um das Projekt zu erstellen und eine Deployment-Struktur zu erstellen.Konfigurieren des Msbuild-Ausgabepfads

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" /> 

kopiert foo.exe und alle \ foo Ordner bereitstellen lokalisierten dll, aber ich brauche DLL lokalisiert in separaten Ordner kopiert werden, sollte es sein:

  • deploy \ foo \ foo. exe
  • deploy \ locales \ ru-RU \ foo.resources.dll
  • deploy \ locales pt-BR \ foo.resources.dll \

gibt es eine Möglichkeit Konfi gure msbuild, um exe und dlls in verschiedene Ordner zu kopieren?

+0

Wenn Sie resx Dateien sprechen, sollten Sie generiert und in einem Unterordner kopiert werden entsprechend dem Kulturnamen während der 'GenerateSatelliteAssemblies' und' CopyFilesToOutputDirectory'. Wie haben Sie Ihre Ressourcendateien benannt? – JoeBilly

+0

Ja, ich meine resx-Dateien. Ich habe die Dateien Res.resx, Res.ru-RU.resx usw. zum Projekt hinzugefügt und msbuild erstellt diese Unterordner im Ausgabeordner - am selben Ort, an dem die Datei foo.exe erstellt wird. Aber ich muss diese Unterordner an den separaten Speicherort kopiert werden - deploy \ locales – wince

Antwort

3

Die Generierung und Kopie von Ressourcendateien erfolgt in einem internen MSBuild-Prozess während des Builds: GenerateSatelliteAssemblies und CopyFilesToOutputDirectory. Sie werden in das Ausgabeverzeichnis kopiert.

Soweit ich weiß, können Sie dieses Verhalten nicht ändern.

Sie müssen Ihre Ressourcendateien nach dem Build-Schritt verschieben. Ich würde empfehlen, die Aufgabe von MSBuild community tasks zu verwenden.

<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" /> 

<CreateItem Include="..\deploy\foo\**\*.resources.dll"> 
    <Output TaskParameter="Include" ItemName="ResourcesToMove" /> 
</CreateItem> 

<Move SourceFiles="@(ResourcesToMove)" DestinationFiles="@(ResourcesToMove->'..\deploy\locales\%(RecursiveDir)\%(Filename)%(Extension)')"/> 
+0

Danke, ich denke, das ist eine Lösung. Ich werde diese msbuild Community-Aufgaben jetzt ausprobieren. – wince

+0

Diese Antwort ist vielleicht etwas zu viel für Sie. Überlegen Sie, ob Sie Jeromes Antwort zuerst versuchen sollten, um sich Zeit zu sparen. –

18

Mit der MSBuild-Befehlszeile können Sie den Ausgabepfad wie unten angeben;

 

C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe /t:Build /p:OutDir=c:\custom_build_out\;Configuration=PRODUCTION;Platform=x64 
 

Hinweis:

  1. Wenn Sie die Reihenfolge der Angabe OutDir Eigenschaft für/p zu ändern, das funktioniert nicht.
  2. OutDir-Eigenschaft dient zum Angeben eines vollständigen Pfads zu einer alternativen Direktive. OutputPath ist für ein relatives Verzeichnis.
  3. Es ist ein Projektname + Build-Konfigurationsname im benutzerdefinierten Build-Ausgabepfad, da Msbuild diese Dinge nicht an OutDir anfügt.
+0

Danke, das hat für mich funktioniert! –

+0

Das war perfekt! Ich musste die Reihenfolge ändern und das war es, nicht blockiert!^_^ –

+0

Dies funktioniert nicht mit ToolsVersion = "14.0", das MSBuild kann keine Referenzen finden. Ich kopiere manuell mit Powershell. –

Verwandte Themen