2016-05-25 5 views
0

У меня есть class Foo в проекте библиотеки, который я бы хотел предотвратить в моем проекте приложения. Я перерабатываю свое приложение, чтобы не использовать class Foo, но я должен сделать это постепенно. Class Foo используется в библиотеке, поэтому исключение файла не является приемлемым ответом. Итак, как я могу сделать свое приложение слепым до class Foo? Также обратите внимание, что я не могу сделать это internal, потому что другим библиотекам нужно class Foo.Как я могу сделать класс «общедоступным, кроме» этой сборки?

+1

Сколько точек входа имеет эта библиотека? Вы можете добавить свой собственный проект-оболочку, который действует как декоратор и перехватывает любые вызовы public Foo и, например, возвращает исключение. – KingCronus

+2

[InternalsVisibleToAttribute] (https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute (v = vs.110) .aspx) может помочь – Rhumborl

+0

Не существует механизма, позволяющего классу использоваться во всех библиотеках _специфически. Вы можете использовать 'InternalsVisibleTo', чтобы сделать внутренний класс видимым для _specific_ библиотек, но это похоже на то, что вы не хотите. Я думаю, что статический анализ кода (или поиск) - ваш лучший выбор. Невозможно «предотвратить» его. –

ответ

4

protected internal - это то, что вы ищете.

Доступность модификаторов доступа в C#:

enter image description here

+0

К сожалению, этот ответ не позволяет 'class Foo' использоваться другими библиотеками. Если этот класс использовался только в собственной сборке, тогда он работает. –

+0

Также защищенный внутренний не работает с элементами пространства имен, такими как класс и интерфейс. –

1

Вы можете сделать копию вашей библиотеки и в том, что изменить Foo модификатор класса к внутренней. после его создания замените старую ссылку на эту новую и сохраните другие ссылки на проекты старой библиотеки.

Я рекомендую это решение для временного обслуживания.

Смежные вопросы