Совместное использование кода в C # между проектами без публикации классов - PullRequest
3 голосов
/ 29 февраля 2012

У меня есть библиотека C # с множеством внутренних функций, предоставляющая только несколько открытых классов и интерфейсов. Я хотел бы поделиться этим кодом между несколькими проектами, и каждому проекту может потребоваться расширить внутренние классы подклассами.

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

Является ли единственной реальной возможностью создать копию исходного кода и синхронизировать эти файлы между проектами? Или есть какой-то способ, которым я могу поделиться кодом и по-прежнему получать по одной библиотеке для каждого проекта, выставляя только несколько предполагаемых открытых интерфейсов и классов?

Я использую Visual Studio 2010.

UPDATE

Спасибо за разъяснения по поводу декомпиляции и "частного" доступа. Я думаю, что я мог бы рассмотреть возможность применения обфускатора к нескольким входным библиотекам, все вместе, надеюсь, запутать даже их общедоступные соединения.

С точки зрения дизайна, кажется, что ответ заключается в окончательном использовании дружественных сборок.

Ответы [ 5 ]

7 голосов
/ 29 февраля 2012

Возможно, вы захотите посмотреть на сборку друзей:

http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

[assembly:InternalsVisibleTo("someassembly")]
3 голосов
/ 29 февраля 2012

Создать новый проект. Файл> Добавить> Существующий. Выберите существующие файлы кода. Нажмите раскрывающийся список на кнопке «Открыть» и выберите «Ссылка».

создание внутренних и публичных классов абсолютно не влияет на его способность к декомпиляции.

2 голосов
/ 29 февраля 2012

Вы можете сделать это, используя InternalsVisibleToAttribute в вашей сборке

2 голосов
/ 29 февраля 2012

Вы ищете "дружеские" сборки: http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

0 голосов
/ 29 февраля 2012

Я думаю, что это слишком сильно подвергает их легкой декомпиляции

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

Еще один вопрос - «ломает дизайн».Если вы хотите использовать этот код из отдельных проектов, то сделать их общедоступными - совершенно правильная вещь.Если вы не хотите делать их общедоступными, подумайте о том, какой интерфейс этот проект действительно хочет показать внешним, который все еще будет выполнять то, что вам нужно ... и создайте этот API и сделайте it public.

...