2009-09-12 9 views
6

C'è un modo per avere un assembly .NET accessibile solo per le fonti autorizzate?Limita l'accesso all'assembly .NET?

Voglio dire che voglio avere una DLL che contiene componenti, ma non voglio che nessuno sia in grado di utilizzare questi componenti, ma gli altri EXE delle DLL nella mia soluzione. Tuttavia, voglio che siano in DLL separate.

La restrizione sullo spazio dei nomi potrebbe anche essere una buona idea se questa funzione esiste già.

C'è un modo?

+0

sta utilizzando l'elenco di controllo di accesso del sistema operativo OK? Prendi l'utente e controlla l'accesso ad alcuni file, dir, ecc ... – kenny

+0

QUALSIASI COSA è gradito, per favore pubblica una risposta della tua idea, così le persone possono votare. – Shimmy

risposta

6

È possibile creare classi interne. E dare gli assembly specificati per accedere a queste classi utilizzando l'attributo InternalsVisibleTo.

L'assemblea deve avere un nome sicuro. È possibile trovare ulteriori informazioni sull'attributo in this article.

+0

Vedi anche http://www.bryancook.net/2008/05/tdd-tips-internalsvisibleto-keep-your.html – TrueWill

5

Il problema con Classi interni è Interno non ha significato in IL e le classi possono essere richiamate tramite riflessione. Quindi usare InternalsVisibleTo è più un aiuto per il compilatore che altro.

È possibile fare un ulteriore passo avanti con lo StrongNameIdentityPermission che controlla la chiave pubblica dell'assembly con nome sicuro chiamando nel codice: se la chiave pubblica non corrisponde, viene generata un'eccezione di sicurezza. Questo viene applicato anche quando il codice viene chiamato tramite riflessione.