Нет, вы взяли это настолько далеко, насколько это возможно. На самом деле не совсем очевидно, как VS решает поместить частичное имя сборки в файл проекта. Это не публичный код и не может быть подделан. Уверен, он не использует белый список и не может обращать внимание на расположение эталонной сборки.
Наиболее вероятная деталь - PublicKeyToken сборки. Сборки каркаса всегда должны иметь одинаковое значение для них, b77a5c561934e089. Его значение даже прописано в спецификации CLI (Ecma-335). Следующим, скорее всего, на значительном расстоянии является сертификат подписи, идентифицирующий сборку как принадлежащую Microsoft. Однако оба варианта представляют собой одну и ту же проблему: вы не можете получить закрытый ключ, необходимый для строгого имени или подписи сборки. Они заперты в хранилище в Редмонде, доступ к ним имеют только проверенные инженеры-строители.
Есть еще одна неприятная маленькая деталь, которую вы упускаете из виду, вы недостаточно напуганы DLL Ада. Неожиданный факт заключается в том, что если вы когда-либо выставите сборку в GAC на другой машине, которая не находится под вашим контролем, вы никогда не сможете изменить ее снова. Вы больше не можете изменять открытый интерфейс сборки. Невозможно добавить новый общедоступный метод или тип, нельзя изменить аргументы и вернуть тип метода, нельзя добавить член enum и т. Д. Еще более резким моментом, который беспокоит Microsoft, является то, что вы не можете реально изменить частные и внутренние члены либо. У программистов есть ловкость в использовании Reflection для потрясающего исправления ошибок. Но, по крайней мере, вы можете сказать им: «Не делай этого!».
Для внесения такой модификации требуется увеличение [AssemblyVersion]. Теперь вы получаете другой тип DLL Hell, возможно, ваш компьютер не обновил ваш установщик. Или хуже, решение использует проекты, которые имеют разные ссылки. Microsoft пришлось решить эту проблему для сборок фреймворка, они сделали это путем изменения CLR. Автоматическая пересылка старых версий на новые. Основная причина, по которой использование сборки, созданной для .NET 2.0, может быть использована в проекте .NET 4.x. Вы не можете получить такую услугу для своей собственной DLL.
«Не делай этого» - единственный хороший совет, попав в DLL Проблема с адом - это, однако, потрясающий опыт обучения, который я могу рекомендовать любому. Чтобы испытать страх, нужно испытать ад.
Лучший совет - опубликовать пакет Nuget. Они делают прямо противоположное, никогда не разворачиваются в GAC, и номера версий меняются очень быстро. Но всегда доступно, когда это нужно программисту.