Атрибут InternalsVisibleTo не работает

Прежде чем продолжить, я просмотрел этот InternalsVisibleTo атрибут, который не работает!

Отсюда и название

Итак, у меня была рабочая версия моего проекта, в которой использовалось что-то вроде следующего.

[assembly: InternalsVisibleTo("Stuff.Test.Support, PublicKey="0024000004800000940000000302000000240000525341310004000001000100d158cd56401c3d90b52ca1a5f273d608c3ce12aaa21385b0f4ad7dc1b747e45ee1f1771c104c52cb4da1b587ae38b6d36fa1d8e8f14003c42f700bc62ef2ec04b231c5d930e4bc3691aa1ef7b6713926316d4be1165ede086e94190b44edd4ad0d024230ae6eb9deb728b00d71d1d468b20a9bb78f242bd6c41e640c2e5c0cd5")]

В файле Properties / AssemblyInfo.cs с внутренними данными, к которым я хочу получить доступ. Перед проверкой он работал. но после такого слияния в Team Foundation IDK WTF ошибочен, но, как и мой AssemblyInfo.cs, не видит этот атрибут, но я убедился, что в файле ничего не изменилось, но все же я получаю «недоступен из-за его уровня защиты». ошибка. (Gama Radiation? Солнечное пятно? Маленькие злые гномы, которые тренируют ошибки, чтобы превратить рабочий код в неработающий lol)

Я попытался просто добавить отдельные экземпляры, используя отражение ...

Assembly Core = Assembly.LoadFile("C:\Stuff.Internal.Core\bin\Debug\Stuff.Internal.Core.dll");

Object AssmWithIdentifier = Core.CreateInstance("AssemblyWithIdentifer", false);

Когда я пытаюсь это сделать, я получаю 'Stuff.Internal.AssemblyWithIdentifer' недоступен из-за уровня защиты.

В противном случае, если я закомментирую что-нибудь, имеющее отношение к внутреннему содержимому, мой проект компилируется нормально.

Я дважды проверил свой «PublicKey» с помощью Red Gates Reflector

, и я также пробовал использовать privateObjects для возможного доступа к методам таким образом, но как бы я ни пытался, я не могу создать ничего внутреннего.

Я также пробовал просто добавить новый проект, скомпилировать его с любыми ссылками, и да, это действительно сработало, но после этого я попытался создать новый проект и добавить все материалы в проект «Stuff.Test.Support», чтобы включить ссылки и подобное и добавьте это в AssemblyInfo.cs, который находится в проекте, к которому я хочу получить доступ, но при попытке скомпилировать я получаю ту же ошибку «недоступен из-за уровня защиты».

Изменить: Я забыл упомянуть, что использую sharedAssembly.cs, который глобально управляет сборками и имеет несколько атрибутов, настроенных аналогично тому, как в примере assembly: InternalsVisibleTo атрибут, который я показал в начале этого вопроса. Я также использую сборки со строгими именами, если это не заметно в моем примере.

7
задан Community 23 May 2017 в 11:43
поделиться

2 ответа

Оказывается, определения рабочего процесса были причиной несоответствия. Но все еще пытаюсь понять, почему .....
Хорошо, если кто-нибудь может дать ссылку на что-то, объясняющее, почему я получу +1.

4
ответ дан 7 December 2019 в 09:55
поделиться

1) если InternalsVisibleTo настроен правильно, вам не нужно отражать их для создания экземпляров из «друга», он может просто напрямую использовать ctor и т.п. Я бы пошел по этому пути, чтобы VS IDE могла быстрее давать вам обратную связь о том, действительно ли внутренности видны целевому проекту.

2) в соответствии с сообщением об ошибке, которое вы получили позже, пробовали ли вы InternalsVisibleTo ("Stuff.Test.Support")?

2
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: