Теперь, после того, как я это скажу, придет какая-то пропеллерная головка и вступит в противоречие со мной, но из Visual Studio нет способа сделать то, что вы хотите. Есть способ сделать это вне VS, но сначала у меня есть вопрос:
С какой стати вы хотите это сделать? Может быть, вы пытаетесь сохранить циклы процессора или сэкономить время компиляции, но если вы сделаете то, что вы предлагаете, вы внезапно окажетесь в прекрасном положении, чтобы выстрелить себе в ногу. Если у вас есть библиотека 1, которая зависит от библиотеки 2, и только изменения библиотеки 2, вы можете подумать, что вы можете создать только измененную библиотеку, но на днях вы собираетесь внести изменения в библиотеку 2, которая сломается библиотека 1, и без сборки библиотеки 2 вы не поймаете ее в компиляции. Так что по моему скромному мнению, НЕ ДЕЛАЙТЕ ЭТОГО.
Причина, по которой это не будет работать в VS2005 и 2008, заключается в том, что VS использует MSBuild. MSBuild работает с файлами проекта и проверяет ссылки проекта и сначала строит все ссылочные проекты, если их источник изменился, перед сборкой целевого проекта. Вы можете проверить это самостоятельно, запустив MSBuild из командной строки для одного проекта, который не изменился, но с измененным ссылочным проектом. Пример:
msbuild ClassLibrary4.csproj
где ClassLibrary4 не изменилась, но она ссылается на ClassLibrary5, который изменился. MSBuild сначала соберет lib 5, прежде чем соберет 4, даже если вы не упомянули 5.
Единственный способ обойти все эти ошибки - использовать компилятор напрямую, а не через MSBuild. Уродливый, уродливый, но это все. По сути, вы будете вынуждены повторно реализовать MSBuild в той или иной форме, чтобы делать то, что вы хотите.
Оно того не стоит.