InternalsVisibleTo не работает со всеми сборками. Некоторые работают, некоторые не работают
У меня есть общая 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, но с WebService. Странно, что я вижу эти внутренние методы в поле IntelliSense, когда пишу код в проекте WebService. Когда я пишу код, нет сообщения об ошибке, но при сборке проекта я получаю это сообщение об ошибке
"Общий" не содержит определения "внутреннего имени метода"
В то время я думал, что название сборки каким-то образом неверно. И я пытаюсь сделать это действительно неправильно:
[assembly: InternalsVisibleTo("WebSer, PublicKey=00240...b59a0")]
Затем в проекте WebService он сразу становится красным в строке, которую я использую Общие внутренние методы без компиляции с этим сообщением:
Не удается получить доступ к внутреннему методу 'внутреннее имя метода' здесь
Поэтому я думаю, что мое имя сборки правильное, но я все еще не знаю, почему я не могу использовать внутренние методы в своем проекте WebServices.
1 ответ
Первое сообщение об ошибке, которое вы дали здесь, предполагает, что вы используете неправильное пространство имен:
"Общий" не содержит определения "внутреннего имени метода"
Это означает, что метод, который вы хотите использовать, не существует. Скорее всего, оно находится в каком-то другом пространстве имен - особенно если вы используете методы расширения для ваших классов.
Как вы, наверное, заметили, вторая ошибка, возникшая после ввода неправильного имени в выражение InternalsVisibleTo, отличается:
Не удается получить доступ к внутреннему методу 'внутреннее имя метода' здесь
Только вторая ошибка связана с раскрытием внутренних dll других dll.
Также возможно, что Visual Studio сошла с ума, и было бы достаточно перезапустить / перестроить.