2010-12-01 54 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();