 <p>I know I'm coming really late to the game, but we were struggling with this exact same problem and here is how we solved it.</p> <p>First, we edited the csproj files of all non-merged or satellite projects to use a <a href="http://msdn.microsoft.com/en-us/library/7szfhaft.aspx" rel="nofollow">conditional reference</a> to an external assembly based upon existence of a file. In this case, we're going to test for the existence of the merged assembly. Then we ran a build script which does the following:</p> <ol> <li>Builds the solution.</li> <li>Runs ILMerge on your primary assemblies with the output being the file in the conditional reference.</li> <li>Rebuild the solution, but this time because the merged assembly exists, the non-merged or satellite assemblies will now have the correct reference.</li> </ol>