Почему структура папок GAC не задокументирована?

Почему структура папок GAC не задокументирована?

Я читаю книгу CLR через C #, и в ней говорится, что:

Причина, по которой CSC.exe не ищет в GAC сборки, на которые имеются ссылки, заключается в том, что вам нужно знать путь к файлу сборки, а структура GAC недокументирована.

Я не могу понять, какие препятствия существуют при создании правил и их документировании для структуры папок GAC.

ОБНОВЛЕНИЕ. В комментариях было высказано предположение, что может быть техническая проблема, которая не позволяет реализовать правила для структуры папок. Но я могу доказать, что это не так, приведя пример возможного правила:

1 GAC может содержать только сборки со строгими именами. 2 По определению сборка со строгим именем - это сборка, у которой есть имя, номер версии, культура и токен открытого ключа (на самом деле открытый ключ, но мы можем использовать токен для простоты, поскольку открытый ключ слишком длинный). 1 2 -> 3 Каждую сборку можно однозначно идентифицировать по имени, версии, культуре и токену открытого ключа. 3 -> 4 Если мы воспользуемся следующим правилом структуры папок, то мы сможем удовлетворить первоначальную цель предоставления желаемого правила структуры папок: [имя] / [версия] / [культура] / [токен открытого ключа] / [сама сборка]

Я что-то упустил?


person iloveseven    schedule 02.11.2019    source источник
comment
GAC требует конкретной схемы версии и строго типизированных имен. Его структура может быть индивидуальной для каждой машины, на которой выполняется код .NET.   -  person Pavel Anikhouski    schedule 02.11.2019
comment
@PavelAnikhouski, каково определение схемы версий? Почему .Net не применяет правила для структуры папок GAC и не позволяет структуре быть специфичной для каждой машины? Спасибо.   -  person iloveseven    schedule 02.11.2019
comment
потому что каждая машина может иметь собственные сборки в GAC или одну и ту же сборку с разными версиями и строгими именами. Пожалуйста, взгляните на msdn   -  person Pavel Anikhouski    schedule 02.11.2019
comment
@PavelAnikhouski, это не ответ на мой вопрос. Немного обновлю. Спасибо.   -  person iloveseven    schedule 03.11.2019
comment
Несколько вещей, которые делают реальную структуру менее полезной: * структура GAC изменилась по сравнению с .NET Framework 4.x, * другие реализации, такие как Mono, используют другие структуры, * .NET Core даже не имеет GAC. как выглядит GAC изнутри, но просто использовать его как способ совместного использования сборок.   -  person Lex Li    schedule 03.11.2019
comment
@LexLi, хм. Я не учел Моно. Спасибо. Не могли бы вы оставить свой комментарий в качестве ответа?   -  person iloveseven    schedule 03.11.2019


Ответы (1)


Исходные стандартные документы .NET только определяют функциональные возможности GAC, но не ограничивают его реализацию. Следовательно,

  • .NET Framework 2.x / 3.x имеет начальную реализацию.
  • .NET Framework 4.x использует другую реализацию.
  • Другие реализации, такие как Mono, используют свои собственные структуры.

Самое главное, что в .NET Core даже нет GAC.

В результате компилятор C # не может полагаться на реализацию GAC для своего алгоритма поиска ссылок.

person Lex Li    schedule 03.11.2019