C # aggiungi un riferimento usando solo il codice (nessuna funzione “Aggiungi riferimento” IDE)

Sto scrivendo un plugin per un programma, e voglio mettere il mio codice all’interno di una DLL in modo da poter condividere liberamente il plugin senza esporre (dare via) il mio codice.

Ecco la struttura di base a cui posso accedere:

using System; public class Plugin { public void Initialize() { //do stuff here doWork(); } } 

Quindi faccio riferimento al file .cs del mio codice e il programma “mangia” questo plugin. Ora, ho inserito diverse logiche, consistenti principalmente in funzioni che non sono legate direttamente a “Initialize ()”, solo sulla funzione doWork (), che avvia l’intero sistema.

Ora, voglio mettere tutto il mio codice all’interno di una DLL, e quindi chiamare semplicemente dentro Initialize (), myDll.doWork () (o qualcosa del genere).

PS: Questa DLL sarebbe una libreria C # compilata (potrebbe essere chiamata importazione di assembly dinamico? Non sarebbe davvero dynamic dato che sarebbe comunque compilata pre-esecuzione, giusto?)

PS2: In questo modo posso anche aggiungere risorse personalizzate come moduli, immagini e simili senza troppe difficoltà, giusto?

PS3: C’è uno strumento gratuito per proteggere il codice all’interno di tale DLL? (cioè proteggere da essere facilmente riprogettato)

Grazie in anticipo =)

Trovato esattamente quello che stavo cercando, eccolo qui:

 using System.Reflection; using System.IO; try { Assembly a = null; a = Assembly.LoadFrom(Application.StartupPath startupPath + "MyAssembly.dll"); Type classType = a.GetType("MyNamespace.MyClass"); object obj = Activator.CreateInstance(classType); MethodInfo mi = classType.GetMethod("MyMethod"); mi.Invoke(obj, null); } catch (Exception e) { AddLog(e.Message); } 

L’opzione migliore sarebbe utilizzare un framework per la creazione di applicazioni estendibili:

  • Managed Extensibility Framework (MEF)
  • Mono.Addins

Se si desidera eseguirlo manualmente, è ansible utilizzare i metodi Assembly.Load * () per caricare un assembly in fase di runtime. È ansible cercare l’assembly per i tipi che implementano un’interfaccia specifica e quindi creare istanze utilizzando Activator.CreateInstance . Gli assembly possono essere compilati separatamente, è sufficiente fare riferimento a un assembly che contiene l’interfaccia condivisa da applicazione e plug-in.

Per l’offuscamento, sono disponibili un paio di strumenti di offuscamento .

Utilizzare i metodi statici Assembly.Load () / Assembly.LoadFile () / Assembly.LoadFrom () per caricare gli assembly in modo dinamico.

Per tua informazione, ricorda di usare uno strumento come .Net Reflector di Red-Gate per ispezionare la tua DLL per assicurarti che sia correttamente offuscata. Questo strumento visivo gratuito ti consente di vedere la DLL come lo vedranno i tuoi utenti, così saprai se il tuo codice è esposto

testo alternativo http://img149.imageshack.us/img149/2025/screenshotfullscreen.gif

.Net viene fornito con Dotfuscator Community Edition che può essere utilizzato per offuscare il codice. Non è necessaria alcuna codifica, consulta la loro guida per l’ utente per imparare come aggirare la GUI se hai bisogno di aiuto.