Makra postbuild i prebuild potrafią bardzo ułatwić życie przy często wykonywanych czynnościach przed i po kompilacji.

Przykładowe zastosowanie z mojego projektu w MVC4, gdzie każdy moduł aplikacji jest w oddzielnym projekcie. Dodając referencje w głównym projekcie kopiują się tylko binarki bez widoków, cssów i jsów. Widoki można również by było skompilować ale dalej zostaną CSS i JS które trzeba przekopiować ręcznie po każdej kompilacji.

Rozwiązanie

makra postbuild prebuild

makra postbuild prebuild

PostBuildEvent modułów dodałem

1
2
3
xcopy "S:\WEB\Strony\PolaMVC\PolaMVC.Modules\PolaMVC.Modules.SelfInvoicing\Views" "S:\WEB\Strony\PolaMVC\PolaMVC\Areas\SelfInvoicing\Views" /s /i /y /EXCLUDE:S:\WEB\Strony\PolaMVC\excludefiles.txt
xcopy "S:\WEB\Strony\PolaMVC\PolaMVC.Modules\PolaMVC.Modules.SelfInvoicing\Content\Css\*.css" "S:\WEB\Strony\PolaMVC\PolaMVC\Content\Css" /s /i /y
xcopy "S:\WEB\Strony\PolaMVC\PolaMVC.Modules\PolaMVC.Modules.SelfInvoicing\Scripts\*.js" "S:\WEB\Strony\PolaMVC\PolaMVC\Scripts" /s /i /y

excludefiles.txt zawiera listę plików/katalogów do pominięcia:

1
katalogi i pliki do pominiecia

 

Dodatkowo w PreBuildEvent kasuje katalogi obj i bin:

1
2
DEL /S /Q "S:\WEB\Strony\PolaMVC\PolaMVC.Modules\PolaMVC.Modules.ProviderFiles\bin"
DEL /S /Q "S:\WEB\Strony\PolaMVC\PolaMVC.Modules\PolaMVC.Modules.ProviderFiles\obj"

Zmienne

W kodzie makra mamy dostępnych kilka zmiennych z których możemy skorzystać np do kopiowanie skompilowanej dllki do określonego katalogu na dysku:

makra postbuild prebuild

PostBuildEvent z użyciem zmiennej TargetDir:

1
xcopy "$(TargetDir)MA.ePolaNET.Common*" "S:\BIN" /s /i /y

Inne dostępne zmienne:

Macro Description
$(ConfigurationName) The name of the current project configuration, for example, „Debug”.
$(OutDir) Path to the output file directory, relative to the project directory. This resolves to the value for the Output Directory property. It includes the trailing backslash '\’.
$(DevEnvDir) The installation directory of Visual Studio (defined with drive and path); includes the trailing backslash '\’.
$(PlatformName) The name of the currently targeted platform. For example, „AnyCPU”.
$(ProjectDir) The directory of the project (defined with drive and path); includes the trailing backslash '\’.
$(ProjectPath) The absolute path name of the project (defined with drive, path, base name, and file extension).
$(ProjectName) The base name of the project.
$(ProjectFileName) The file name of the project (defined with base name and file extension).
$(ProjectExt) The file extension of the project. It includes the ’.’ before the file extension.
$(SolutionDir) The directory of the solution (defined with drive and path); includes the trailing backslash '\’.
$(SolutionPath) The absolute path name of the solution (defined with drive, path, base name, and file extension).
$(SolutionName) The base name of the solution.
$(SolutionFileName) The file name of the solution (defined with base name and file extension).
$(SolutionExt) The file extension of the solution. It includes the ’.’ before the file extension.
$(TargetDir) The directory of the primary output file for the build (defined with drive and path). It includes the trailing backslash '\’.
$(TargetPath) The absolute path name of the primary output file for the build (defined with drive, path, base name, and file extension).
$(TargetName) The base name of the primary output file for the build.
$(TargetFileName) The file name of the primary output file for the build (defined as base name and file extension).
$(TargetExt) The file extension of the primary output file for the build. It includes the ’.’ before the file extension.

źródło