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

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

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

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

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

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

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

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."

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


person Terrance    schedule 17.08.2010    source источник
comment
Эй, может тебе стоит удалить все определения рабочего процесса из этого проекта! Попробуйте это.   -  person    schedule 18.08.2010
comment
OMG, это работает. Может быть, тебе стоит записать это как ответ, чтобы получить за это доверие.   -  person Terrance    schedule 18.08.2010


Ответы (2)


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

person Terrance    schedule 18.08.2010
comment
Я удалил все определения рабочего процесса в проекте. Не лучший ответ, но сейчас он работает. И в настоящее время в Microsoft есть отчет об ошибке. И ссылка: connect.microsoft.com/VisualStudio/feedback/details/588710/ - person Terrance; 16.09.2010

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

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

person James Manning    schedule 17.08.2010
comment
1) Я пробовал использовать отражение в качестве альтернативы использованию InternalsVisibleTo, поскольку в настоящее время он не работает. В настоящее время я работаю с отражением и смотрю, есть ли что-то, что я пропустил. 2) В настоящее время я использую сборки со строгими именами, поэтому я получаю сообщение об ошибке Ссылка на сборку друга «Stuff.Tests.Support» недействительна. Сборки, подписанные строгим именем, должны указывать открытый ключ в своих объявлениях InternalsVisibleTo. Извините, я просто изменил свой вопрос, чтобы рассказать немного больше о моей настройке. Так что, может быть, это поможет тебе лучше. - person Terrance; 17.08.2010