Вы заявили, что хотите иметь возможность изменять пути поиска сборок без непосредственного изменения файлов проекта. Чтобы выполнить это требование, вам нужно установить переменную среды, которая переопределит AssemblySearchPaths. С помощью этого метода вам нужно будет указать каждый путь ссылки сборки, используемый всеми проектами в решениях. (Изменение проектов или копий проектов будет проще. См. Заключительные комментарии.)
Один из методов - создать пакетный файл, в котором ваш скрипт запускает переменную среды:
set AssemblySearchPaths="C:\Tacos;C:\Burritos;C:\Chalupas"
msbuild whatever.msbuild
Другой способ - определить группу PropertyGroup в вашем пользовательском файле msbuild (иначе называемом «ловушкой», необходимой для этой работы):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectsToBuild Include="..\Main\Main.sln" />
</ItemGroup>
<PropertyGroup>
<AssemblySearchPaths>$(MSBuildProjectDirectory)\..\..\Build\Lib1;$(MSBuildProjectDirectory)\..\..\Build\Lib2</AssemblySearchPaths>
</PropertyGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectsToBuild)" Properties="AssemblySearchPaths=$(AssemblySearchPaths);Configuration=Debug;OutputPath=$(OutputPath)" />
</Target>
</Project>
Теперь, если бы это был я, и по какой-то необъяснимой причине я не мог изменить файлы проекта, чтобы включить обновленные ссылки, с которыми я собираюсь строить, я сделал бы копии файлов проекта, загрузил бы их в IDE, и исправьте ссылки в моих копиях. Синхронизация проектов становится простой операцией сравнения / слияния, которая выполняется автоматически с помощью современных инструментов, таких как mercurial (черт, я уверен, что clearcase может справиться и с этим).