InternalsVisibleTo не работает со всеми сборками.Некоторые работают, некоторые не работают - PullRequest
3 голосов
/ 08 декабря 2011

У меня есть общая DLL, которая имеет несколько внутренних методов для внутреннего использования.Кроме того, у меня есть еще 3 проекта WebServices, UnitTests и PATs

В AssemblyInfo.cs проекта Common я добавил следующие строки:

[assembly: InternalsVisibleTo("WebServices, PublicKey=00240...b59a0")]
[assembly: InternalsVisibleTo("UnitTests, PublicKey=00240...dcf98")]
[assembly: InternalsVisibleTo("PATs, PublicKey=00240...e65cf")]

Эти внутренние методы прекрасно работают с UnitTests и PAT, ноВеб-сервис.Странно, что я вижу эти внутренние методы в поле IntelliSense, когда пишу код в проекте WebService.Когда я пишу код, оповещение об ошибке отсутствует, но при сборке проекта появляется сообщение об ошибке

«Common» не содержит определения « имя внутреннего метода »

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

[assembly: InternalsVisibleTo("WebSer, PublicKey=00240...b59a0")]

Затем в проекте WebService он сразу становится красным в строке, которую я использую Общие внутренние методы без компиляции с этим сообщением:

Невозможно получить доступ к внутреннему методу ' имя внутреннего метода ' здесь

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

1 Ответ

0 голосов
/ 23 июня 2016

Первое сообщение об ошибке, которое вы дали здесь, предполагает, что вы используете неправильное пространство имен:

«Общий» не содержит определения «внутреннего имени метода»

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

Как вы, наверное, заметили, вторая ошибка, возникшая после ввода неверного имени в выражение InternalsVisibleTo, отличается:

Невозможно получить доступ к внутреннему методу 'внутреннее имя метода' здесь

Только вторая ошибка связана с раскрытием других dll.

Также возможно, что Visual Studio сошла с ума, и было бы достаточно перезапустить / перестроить.

...