我想阻止从其他应用程序加载程序集。这样它只能从我的应用程序加载。
现在我正在使用Assambly.LoadFrom
加载程序集。
答案 0 :(得分:3)
最终,没有。听起来你正在部署一个DLL,但你想保留对它的使用方式的唯一控制。那只是一场军备竞赛;最终,如果有人真的,真的想(ab)使用它,他们可以。即使这意味着您已经添加了任何预防性代码的反汇编,去混淆和解除武装。
阻止它的唯一方法是:不要给它们。考虑为某些功能使用Web服务。然后他们没有集会。
答案 1 :(得分:1)
您可以在程序集中使用InternalsVisibleToAttribute
并将应用程序程序集指定为“朋友”。这将阻止使用类型的其他程序集,前提是它们被标记为internal
但允许您的应用程序仍然使用这些类型。
来自MSDN:
通常,类型和成员用 内部范围(在C#中)和朋友 范围(在Visual Basic中)是可见的 只在它们所在的组件中 定义。该 InternalsVisibleToAttribute属性 使它们对类型也可见 在指定的程序集中。
该属性应用于 装配水平。这意味着它可以 被包括在一个开头 源代码文件,或者它可以 包含在一个AssemblyInfo文件中 Visual Studio项目。你可以使用 用于指定单个程序集的属性 可以访问内部类型和 当前集会的成员。至 制作程序集的内部类型和 成员可见附加 程序集,你必须包括一个 单独的InternalsVisibleToAttribute 每个集合的属性。
并不是说这不会阻止任何人加载你的程序集,它只是阻止他们使用程序集中的内部类型(至少不需要付出一些努力,最后,任何人都可以反汇编代码并以这种方式使用它。)
答案 2 :(得分:1)
您无法阻止人们使用技术方法来使用您的DLL。您可以尝试使其更加困难,但是足够熟练的用户将能够修改程序集以便他们可以使用它。
你可以尝试一种法律方法。您可以在许可协议中包含一个条款,该条款禁止人们在另一个应用程序中使用您的程序集。但它不会阻止所有人。
答案 3 :(得分:1)
您可以尝试在“受保护”程序集中的某处验证条目程序集(Assembly.GetEntryAssembly
)。
答案 4 :(得分:0)
对其进行模糊处理并保密文档。还包括一个密钥,如: http://www.codeguru.com/columns/experts/article.php/c4643