防止在c#中加载程序集

时间:2011-02-19 18:18:19

标签: c# loading .net-assembly

我想阻止从其他应用程序加载程序集。这样它只能从我的应用程序加载。

现在我正在使用Assambly.LoadFrom加载程序集。

5 个答案:

答案 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