Reputation: 531
There is a Windows Forms (NET 3.5) project, foo.csproj, with localized resources files. I use MSBuild to build the project and create a deployment structure:
<MSBuild Projects="foo.csproj" Properties="Configuration=Release;OutputPath=..\deploy\foo" Targets="Build" />
It copies foo.exe and all localized DLL files to the deploy\foo
folder, but I need localized DLL files to be copied into a separate folder. It should be:
Is there a way to configure MSBuild to copy EXE and DLL files to different folders?
Upvotes: 33
Views: 75924
Reputation: 8021
Using MSBuild command line, you can specify the output path like below:
C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe <path_to_project_file> /t:Build /p:OutDir=c:\custom_build_out\;Configuration=PRODUCTION;Platform=x64
Note:
OutDir
property for /p, this doesn't work. OutDir
property is for specifying a full path to an alternate directory. OutputPath
is for a relative directory.OutDir
.Upvotes: 55
Reputation: 3107
Resource files generation and copy is done in an internal MSBuild process during the build: GenerateSatelliteAssemblies
and CopyFilesToOutputDirectory
. They are copied in the output directory.
As far as I know, you can't modify this behavior.
You have to move your resources files after the build step. I would advise to use the Move
task from 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)')"/>
Upvotes: 10