Запретить загрузку сборки в c # - PullRequest
1 голос
/ 19 февраля 2011

Я хочу запретить загрузку сборки из другого приложения.Так что он может быть загружен только из моего приложения.

Rigth теперь я использую Assambly.LoadFrom для загрузки сборки.

Ответы [ 5 ]

3 голосов
/ 19 февраля 2011

В конечном итоге, нет.Похоже, вы развертываете dll, но вы хотите сохранить единоличный контроль над тем, как он используется.Это просто гонка вооружений;в конечном счете, если кто-то действительно, действительно хочет (а) использовать его, он может.Даже если это означает, что вы разбираете, удаляете с толку и снимаете с охраны любой добавленный вами предупредительный код.

Единственный способ заблокировать это: не передавайте его им.Подумайте об использовании веб-сервиса для некоторых функций.Тогда у них нет сборки.

1 голос
/ 19 февраля 2011

Вы можете попытаться проверить входную сборку (Assembly.GetEntryAssembly) где-нибудь в вашей "защищенной" сборке.

1 голос
/ 19 февраля 2011

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

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

1 голос
/ 19 февраля 2011

Вы можете использовать InternalsVisibleToAttribute в своей сборке и указать свою сборку приложения как "друга".Это предотвратит использование другими сборками типов при условии, что они помечены как internal, но позволит вашему приложению по-прежнему использовать эти типы.

Из MSDN:

Обычно типы и элементы с внутренней областью (в C #) и дружественной областью (в Visual Basic) видны только в сборке, в которой они определены.Атрибут InternalsVisibleToAttribute делает их также видимыми для типов в указанной сборке.

Атрибут применяется на уровне сборки.Это означает, что он может быть включен в начало файла исходного кода или в файл AssemblyInfo в проекте Visual Studio.Вы можете использовать атрибут, чтобы указать одну сборку, которая может обращаться к внутренним типам и членам текущей сборки.Чтобы сделать внутренние типы и элементы сборки видимыми для дополнительных сборок, необходимо включить отдельный атрибут InternalsVisibleToAttribute для каждой сборки.

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

0 голосов
/ 19 февраля 2011

Запутывайте и храните документацию в секрете. Также включите ключ как в: http://www.codeguru.com/columns/experts/article.php/c4643

...