2009-09-17 3 views
0

В настоящее время я работаю над проектом .net, который я разделяю на разные сборки.Необходимо ли защищать частные сборки .Net?

Одна сборка (dll) будет содержать большую часть логики домена, а другие сборки (.exe) будут содержать большую часть логики представления и управления.

Мой вопрос: если я хочу, чтобы кто-то не получал мою DLL, и добавив его в качестве ссылки на Visual Studio и разработав новый интерфейс для модели без моего разрешения, могу ли я сделать это, просто построив сборки как частный? Строит ли сборка как частное означает, что только сборки, которые были построены вместе, могут ссылаться друг на друга?

Самый простой способ создания приложения и его библиотеки DLL и EXE-функции функционируют как единый логический блок, на котором сборку DLL можно ссылать только на ссылочные сборки при создании проекта.

С уважением,

ответ

2

InternalsVisibleToAttribute может помочь. Просто хлопнуть его на .dll, используя .exe сборки полное имя и сделать все, что в .dll internal:

[assembly:InternalsVisibleTo("full name of the .exe")] 

internal class Whatever { } 
internal interface IWhatever { } 

Если вы используете strong names, что будет еще безопаснее, потому что в противном случае я мог бы просто создать EXE-файл с то же имя файла, что и ваш.

Существует также страница MSDN о Friend Assemblies.

0

Вы пытаетесь защитить от случайного или преднамеренного неправильного использования ваших сборок? Для случайного неправильного использования будет использоваться декларирование полуобщинного API через использование сборок друзей. Тем не менее, любой полностью доверенный код сможет вызывать даже элементы с низкой видимостью в ваших сборках посредством отражения, поэтому ограничение видимости не защищает от преднамеренного неправильного использования. Для таких сценариев иногда стоит запутывать ваш полудоступный API, чтобы сделать его более трудным для непреднамеренных вызовов, чтобы его использовать.