2013-10-28 14 views
12

C'è un progetto di winforms (NET 3.5) foo.csproj con file di risorse localizzate. Uso msbuild per creare il progetto e creare una struttura di distribuzione.Configura il percorso di uscita di msbuild

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

esso copia foo.exe e distribuire cartella \ foo tutto DLL localizzata, ma ho bisogno localizzato dll da copiare nella cartella separata, dovrebbe essere:

  • Deploy \ foo \ foo. exe
  • deploy \ locales \ it-it \ foo.resources.dll
  • deploy \ locales \ pt-BR \ foo.resources.dll

c'è un modo per confi gure msbuild per copiare exe e dll in diverse cartelle?

+0

Se si parla di file resx, devono essere generati e copiati in una sottocartella corrispondente al nome della cultura durante 'GenerateSatelliteAssemblies' e' CopyFilesToOutputDirectory'. Come hai chiamato i tuoi file di risorse? – JoeBilly

+0

Sì, voglio dire file resx. Ho aggiunto i file Res.resx, Res.ru-RU.resx etc al progetto e msbuild crea queste sottocartelle nella cartella di output, nella stessa posizione in cui crea il file foo.exe. Ma ho bisogno che queste sottocartelle vengano copiate in una posizione separata - deploy \ locales – wince

risposta

3

Le risorse di generazione e copia dei file vengono eseguite in un processo MSBuild interno durante la compilazione: GenerateSatelliteAssemblies e CopyFilesToOutputDirectory. Sono copiati nella directory di output.

Per quanto ne so, non è possibile modificare questo comportamento.

È necessario spostare i file delle risorse dopo la fase di creazione. Vorrei consigliare di utilizzare l'attività Move da MSBuild community tasks.

<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

Grazie, immagino che questa sia una soluzione. Proverò a eseguire le attività di community di msbuild ora. – wince

+0

Questa risposta potrebbe essere un po 'esagerata per te. Prova a provare prima la risposta di Jerome per salvarti un po 'di tempo. –

18

Utilizzando riga di comando MSBuild è possibile specificare il percorso di uscita come qui di seguito;

 

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

Nota:

  1. Se si modifica l'ordine di specificare OutDir immobili per/p, questo non funziona.
  2. La proprietà OutDir consente di specificare un percorso completo per un dirctory alternativo. OutputPath è per la directory relativa.
  3. Ha un nome di progetto + nome configurazione build nel percorso di output di generazione personalizzato poiché msbuild non aggiunge queste cose all'OutDir.
+0

Grazie, ha funzionato per me! –

+0

Questo era perfetto! Ho dovuto cambiare l'ordine ed è stato, sbloccato!^_^ –

+0

Questo non funziona per me con ToolsVersion = "14.0", MSBuild non è in grado di trovare riferimenti. Sto copiando manualmente con PowerShell. –

Problemi correlati