У меня есть относительно большой проект C#. Я хочу разрешить другим разработчикам сотрудничать со мной в проекте. Но я боюсь, что они скопируют исходный код дословно. Я хочу защитить свой код. Есть ли способ предоставить сотрудникам использование существующих .dll без возможности чтения исходного кода? Или предоставить им временный доступ к файлам .dll, а затем, когда они откатываются от проекта, просто отключите их способность использовать .dll?.NET Assembly. Шифрование и использование DLL в командах
ответ
Абсолютно, вы можете дать другим пользователям библиотеки DLL без доступа к исходному коду. В большинстве ситуаций, подобных этому, вы бы запутали dll (многие инструменты для этого, я бы начал с Dotfuscator, включенного в Visual Studio), чтобы они не могли декомпилировать его.
Если вы хотите, чтобы они могли видеть источник, вы не можете сделать это, чтобы избежать их копирования, так же, как «отключить их способность использовать его». Если у них есть копия файла, вы не можете прекратить их делать (технологически говоря). Единственная безопасность, о которой я могу думать, - это проверить, чтобы все публичные функции проверялись на каком-либо сервере перед выполнением (таким образом, чтобы DLL была бесполезной, если у вас есть сервер, который не позволяет им запускать), но это не 100%, и это сделает за ужасный опыт для конечных пользователей кода.
Чтобы добавить к ответу LordTakkera, часть о лицензировании.
Вариант лицензирования должен позволить DLL работать только на 30 дней или около того, а DLL проверяет местное время (или удаляет сервер времени), чтобы узнать, прошло ли оно. Затем вы можете предоставить DLL-файлы ограниченного времени своим сотрудникам и каждый месяц обновлять их с помощью новой копии, пока они остаются в проекте. Это меньше связано с тем, что он не требует наличия сервера лицензий и поддержки лицензионных ключей и необходимой криптологии, чтобы убедиться, что кто-то не может подделать лицензию, но также менее безопасен, поскольку часы можно легко манипулировать и обновлять каждый с ежемесячной сборкой будет довольно унынием от участия в проекте ... О, эти компромиссы ...
+1 Это еще один хороший способ «тайм-аута» dll с упомянутыми компромиссами. – BradleyDotNET
- 1. .net-assembly resolution
- 2. Dot net assembly viewer?
- 3. Использование внешнего .dll в ядре net net
- 4. Использование .Net DLL в [R]
- 5. Использование C++ DLL в .NET
- 6. Использование Dll для .NET-приложения
- 7. Non-Assembly DLL in bin
- 8. Использование .NET dll на PHP
- 9. Использование источника в командах Git
- 10. Visual Studio WPF Assembly и решение DLL
- 11. Как подписать DLL-файл .NET Assembly с сильным именем?
- 12. Интерполировать класс и методы в .NET Assembly
- 13. Matlab .NET assembly with C#
- 14. .NET Assembly Version
- 15. .Net assembly issue
- 16. .NET Module vs Assembly
- 17. Newtonsoft.Json Assembly Conflict - DLL Hell
- 18. .NET Assembly Culture
- 19. Encrypt .net assembly/Анти-отладочные методы
- 20. Использование .NET DLL в Node.js/serverside javascript
- 21. Использование старых DLL в C# .Net 4.0
- 22. .NET Assembly Method Loads
- 23. AES Шифрование в .net
- 24. Использование .Net DLL в Microsoft Access VBA
- 25. Использование VB6 dll в C# .net
- 26. Преобразование dll .Net в .Net Core dll
- 27. nopCommerce assembly dont find dll reference
- 28. Assembly :: LoadFrom вызван из управляемой C++ dll
- 29. .NET assembly cache/ngen/jit image разминка и охлаждение поведение
- 30. Динамически Загрузка .NET DLL Обертывание C++ DLL
Не нужно выполнять каждую проверку функции. Вам нужно будет сделать это только один раз при загрузке или при первой функции invokation. Затем вы можете кэшировать значение, указывающее, была ли проверена лицензия или нет. – LB2
Как DLL узнает, загружена ли она? И если каждая функция не проверяет, не мог ли используемый код просто вызвать функции проверки? Мне было бы очень интересно узнать, как это сделать на уровне сборки. – BradleyDotNET
А, позвольте мне уточнить. Я имел в виду, что каждая функция не требует вызова сервера лицензий; вам нужно будет проверить локальный флаг, чтобы узнать, предоставлена ли лицензия. Таким образом, первая функция несет большие затраты на удаленный вызов, устанавливает флаг, а все остальные проверяют флаг, чтобы увидеть, разрешено ли им запускаться. Что касается DLL, зная, что он загружается, я не верю, что есть прямой способ (в отличие от неуправляемого, где для этого можно использовать 'DllMain()'). Однако можно использовать статический конструктор для основных типов (типов) и IIRC, если статический конструктор выбрасывает, тогда тип не загружается и не может быть использован, поэтому эффективно отключается сборка (да, бит хаки) – LB2