instanceof
является оператором Javascript. Правый операнд должен быть значением времени выполнения (функцией или конструктором), чтобы он работал.
express.Application
определяется как интерфейс. Интерфейсы существуют только во время компиляции, чтобы помочь в проверке типов. Это означает, что во время выполнения нет значения express.Application
, которое будет операндом в операции instanceof
, и поэтому машинопись выдает ошибку.
Существует несколько опций, ни одно очень эффективное, поскольку они просто сделают вещи крошечным битом трудный, но не предотвратили бы переданного пользователя для работы вокруг любого ограничения:
На каждых из Ваших точек входа можно назвать блок. GetCallingAssembly () и сравнивают результат со списком блоков, которым позволяют звонить в Вашу библиотеку и выдать исключение иначе.
Вы могли использовать инструмент как ilmerge, чтобы объединить Ваши блоки в Ваше главное приложение и отметить все внутренности как частные. Объединение с obfuscator для создания результатов немного лучше защищенными.
Но обеспечение блока так же серьезно как обеспечение компьютера, где у взломщика есть физический доступ к нему: существует очень мало, что можно сделать для защиты содержания, после того как физический доступ предоставляется.
Необходимо добавить StrongNameIdentityPermissionAttributeattributes для требования безопасности
например,
[assembly:StrongNameIdentityPermissionAttribute(SecurityAction.RequestMinimum,
PublicKey="00240000048000009400000006020000002400005253413100040000010001005" +
"38a4a19382e9429cf516dcf1399facdccca092a06442efaf9ecaca33457be26ee0073c6bde5" +
"1fe0873666a62459581669b510ae1e84bef6bcb1aff7957237279d8b7e0e25b71ad39df3684" +
"5b7db60382c8eb73f289823578d33c09e48d0d2f90ed4541e1438008142ef714bfe604c41a4" +
"957a4f6e6ab36b9715ec57625904c6")]
посмотрите эту страницу MSDN для большего количества информации
или сделайте это в коде видит этот пример
Я предложил бы, чтобы Вы использовали атрибут LicenseProvider для обеспечения использования к Вашему блоку. Больше информации о точном использовании доступно здесь на MSDN
Сначала я думал, что Вы могли сделать своих участников/классы в Вашем блоке со знаком частными и применить уровень ассемблера, который InternalsVisibleTo приписывают Вашим другим блокам. Я предполагаю, что отражение позволит Вам расколоться через это все же.
Возможно, StrongNameIdentityPermission - то, что Вы ищете.
Не уверенный, если это - наилучший вариант, но Вы могли бы сделать все "общедоступные" классы в своем блоке внутренними, и затем использовать атрибут уровня ассемблера [InternalsVisibleTo] для явного определения других блоков со знаком.
[assembly: InternalsVisibleTo('MyAssembly,Version=1.0.0.1, Culture=neutral,PublicKeyToken=...");
Вот документы MSDN об атрибуте.
Звуки мне как невозможная проблема. Вы не можете доверять своей среде. Это - фундаментальный вычислительный принцип и причина для общественности/шифрования с закрытым ключом.