Прежде всего, существует важное различие между эталонными сборками и сборками в GAC. Чтобы скомпилировать код, вам нужна справочная сборка. Для запуска кода вам потребуется либо копия сборки в той же папке, что и ваш .exe, либо сборка в GAC.
Обычно, когда вы устанавливаете приложение .NET, его установщик копирует сборки, которые он использует в GAC. Эти сборки не могут использоваться в качестве ссылочных сборок, вы не можете узнать, в какой папке они хранятся, поэтому вы не можете указать компилятору правильное значение аргумента командной строки / reference. Что ж, вы можете узнать, но Microsoft пыталась сделать это как можно сложнее с помощью надстройки оболочки.
При установке приложения .NET, которое позволяет использовать его сборки в собственной программе, происходит что-то другое. Как .NET Framework. Он сделает две копии каждой сборки. Один идет в GAC, другой идет в «известную» локацию. Для платформы .NET эти общеизвестные местоположения - это c: \ windows \ microsoft.net \ и c: \ program files \ reference сборки. Последняя папка начала использоваться .NET 3.0 и выше.
В диалоговом окне «Добавить ссылку» Visual Studio используется раздел реестра, в котором перечислены эти известные местоположения. Есть пара, но важным является HKLM\Software\Microsoft\.NETFramework\AssemblyFolders
.
Короче говоря: вы можете использовать этот раздел реестра для создания того же списка, что и в диалоговом окне Добавить ссылку. Но это не на 100% надежно, вы можете пропустить эталонные сборки, которые какой-либо продукт скопировал в другое место. Вы должны использовать вкладку Обзор в VS, чтобы добавить ссылки на них. И обыщите весь диск, чтобы найти их самостоятельно.