Атрибут InternalsVisibleTo не работает - PullRequest
7 голосов
/ 17 августа 2010

Прежде чем я продолжу, я прошел через это Атрибут InternalsVisibleTo не работает!

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

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

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

В файле Properties / AssemblyInfo.cs с внутренним содержимым, к которому я хочу получить доступ. До проверки это работало. но после такого объединения в Team Foundation IDK WTF неверен, но, похоже, мой AssemblyInfo.cs не видит атрибута, но я убедился, что в файле ничего не изменилось, но все равно я получаю ошибку "innaccessable due to its protection level.". (Gama Radiation? Sunspot? Маленькие злые гномы, которые обучают жуков, чтобы превратить рабочий код в неработающий код, lol)

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

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

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

Когда я пытаюсь это сделать, я получаю 'Stuff.Internal.AssemblyWithIdentifer' is inaccessible due to protection level.

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

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

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

Я также попытался просто добавить новый проект, скомпилировать его с любыми ссылками, и да, это действительно сработало, но после этого я попытался создать новый проект и добавить весь материал в проект Stuff.Test.Support, чтобы включить ссылки и и добавьте это в AssemblyInfo.cs, который находится в проекте, к которому я хочу получить доступ, но, как только я пытаюсь скомпилировать, я получаю ту же ошибку "innaccessable due to its protection level."

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

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

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

2 голосов
/ 17 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...