I'd like to achieve more granularity when producing final installer for my program. For the sake of example, lets assume this is called: The Program. It consists of Client and Server. In this example, we have 5 projects.
- Client.csproj
- Server.csproj
- ClientInstaller.wixproj
- ServerInstaller.wixproj
- Bundle.wixproj
Everything's perfect if I just build the installer with through Bundle project. But how I'd like it to happen is to first build the Client and Server (separately) to run the tests and in case of success - produce artifacts, which then will be used by Budle to produce final installer.
Currently I'm doing this successfully with just Client, msbuild Client.csproj /p:OutputPath=$binariesPath produces the output in specified location, then
msbuild Bundle.wixproj /p:OutputPath=$installerPath /p:LinkerBindInputPaths=$binariesPath consumes this output and produces installer at $installerPath
I tried multiple LinkerBindInputPaths like /p:LinkerBindInputPaths=$binariesPath\Client /p:LinkerBindInputPaths=$binariesPath\Server, but this did not seem to work.
Perhaps I could squeeze one more step and build each installer. That allows me to get separate MSI for each component.
Currently each MSI is strictly related to its installer project:
<MsiPackage Id="Client" SourceFile="$(var.ClientInstaller.TargetPath)" Vital="no" /> <MsiPackage Id="Server" SourceFile="$(var.ServerInstaller.TargetPath)" Vital="no" />
So my question is: How to build Bundle.wixproj so that I can override MSI source file location with custom one, where the output of my previous builds is located?