2013-10-28 14 views
12

Istnieje projekt winForms (NET 3.5) foo.csproj z plikami zlokalizowanych zasobów. Używam msbuild do zbudowania projektu i stworzenia struktury wdrożenia.Skonfiguruj ścieżkę wyjściową msbuild

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

kopiuje foo.exe i wdrożyć folderu \ foo wszystkie zlokalizowane DLL, ale muszę zlokalizowane dll mogą być kopiowane do osobnego folderu, powinno być:

  • deploy \ foo \ foo. exe
  • Wdrażanie \ locales \ ru-RU \ foo.resources.dll
  • deploy \ locale \ pl-PL \ foo.resources.dll

Czy istnieje jakiś sposób, aby confi gure msbuild do kopiowania plików exe i dll do różnych folderów?

+0

Jeśli mówisz o plikach resx, powinny one zostać wygenerowane i skopiowane w podfolderze odpowiadającym nazwie kultury podczas 'GenerateSatelliteAssemblies' i' CopyFilesToOutputDirectory'. Jak nazwałeś swoje pliki zasobów? – JoeBilly

+0

Tak, mam na myśli pliki Resx. Dodałem do projektu pliki Res.resx, Res.ru-RU.resx itd. Msbuild tworzy te podfoldery w folderze wyjściowym - w tym samym miejscu, w którym tworzy plik foo.exe. Ale potrzebuję tych podfolderów do skopiowania do oddzielnej lokalizacji - rozmieść \ locales – wince

Odpowiedz

3

Tworzenie i kopiowanie plików zasobów odbywa się w wewnętrznym procesie MSBuild podczas kompilacji: GenerateSatelliteAssemblies i CopyFilesToOutputDirectory. Są one kopiowane w katalogu wyjściowym.

Z tego co wiem, nie można zmodyfikować tego zachowania.

Musisz przenieść swoje pliki zasobów po kroku kompilacji. Radziłbym użyć zadania Move od 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

Dzięki, myślę, że to jest rozwiązanie. Spróbuję teraz wykonać zadania społecznościowe msbuild. – wince

+0

Ta odpowiedź może być dla ciebie trochę przesadą. Zastanów się nad wypróbowaniem odpowiedzi Jerome'a, aby ewentualnie zaoszczędzić sobie trochę czasu. –

18

Korzystając z wiersza poleceń MSBuild, można określić ścieżkę wyjściową, jak poniżej;

 

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

Uwaga:

  1. Jeżeli zmienisz kolejność określania OUTDIR nieruchomości na/p, to nie zadziała.
  2. Właściwość OutDir służy do określania pełnej ścieżki do alternatywnego katalogu. OutputPath jest dla względnego katalogu.
  3. Jest to nazwa projektu + nazwa konfiguracji kompilacji w niestandardowej ścieżce wyjścia kompilacji, ponieważ msbuild nie dołącza tych rzeczy do OutDir.
+0

Dziękuję, to zadziałało dla mnie! –

+0

To było idealne! Musiałem zmienić kolejność i to było to, odblokowane!^_^ –

+0

To nie działa dla mnie z ToolsVersion = "14.0", MSBuild nie może zlokalizować referencji. Kopiuję ręcznie za pomocą programu powershell. –

Powiązane problemy