2010-12-01 37 views
3

如何禁止在其他解决方案中引用dll类库?如何禁止引用.NET DLL类库

+0

可能重复:http://stackoverflow.com/questions/96624/how-to-prevent-others-from-using-my-net-assembly – 2010-12-01 10:40:11

+0

它是一个问题,使所有的类内部,使其只适用于您指定的程序集? – leppie 2010-12-01 10:42:22

+0

Becouse我需要在与MyProgram.exe相同的解决方案中引用我的SecreteLibrary.dll – Simon 2010-12-01 11:22:19

回答

6

你可以考虑将你希望能够与使用它的程序的strong name匹配的StrongNameIdentityPermission你的类库。

或者,您可以探索使用InternalsVisibleToAttribute,虽然它可能需要在您的库代码中进行一些设计更改。只要这两个程序集都没有签名,或者两者都用强名称签名,这应该工作。在属性上指定的参数应该与您希望能够访问其内部成员的程序集的公钥和程序集名称匹配。

但实际上,这样做只会阻止那些不努力使用你的库的人。他们将无法添加引用,但它不会阻止某人通过Reflection或反汇编代码绕过它。几乎所有的安全措施都有你实施的方法。

5

你可以使用一些叫做StrongNameIdentityPermission的东西来防止他人引用你的库。

+0

我想知道为什么该页的英文版缺少德文版的非常有用的示例:http://msdn.microsoft.com/de- de/library/system.security.permissions.strongnameidentitypermission.aspx – VVS 2010-12-01 10:35:30

+0

在en版本中切换到.net 3.5。 – Simon 2010-12-01 11:18:16

-1

通过将“Build Action”属性设置为“Embedded ressource”,可以将DLL嵌入到EXE中。您的DLL不作为单个文件发货,也没有人可以使用它。

-1

如果您的主程序没有使用某些dll类方法,那么您可以使其失败。

Assembly main = System.Reflection.Assembly.GetExecutingAssembly(); 

if (main.FullName != .....) 
    throw new NotSupportedException(); 

if (IsSignedWith(main, myCompanysX509Certificate)) 
    throw new NotSupportedException();