C # aggiunge un riferimento usando solo il codice (nessuna funzione IDE "Aggiungi riferimento")
-
06-07-2019 - |
Domanda
Sto scrivendo un plugin per un programma e voglio inserire il mio codice all'interno di una DLL in modo da poter condividere il plugin liberamente senza esporre (regalare) il mio codice.
Ecco la struttura di base a cui ho accesso:
using System;
public class Plugin
{
public void Initialize()
{
//do stuff here
doWork();
}
}
Quindi faccio solo riferimento al file .cs in cui si trova il mio codice e il programma "mangia" questo plugin. Ora, ho inserito diverse logiche, costituite principalmente da funzioni che non sono direttamente legate 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 dall'interno Initialize (), myDll.doWork () (o qualcosa del genere).
PS: questa dll sarebbe spesso una libreria C # compilata (potrebbe essere chiamata importazione dinamica di assembly? non sarebbe davvero dinamica poiché 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: esiste uno strumento gratuito per proteggere il codice all'interno di tale DLL? (vale a dire proteggere da essere facilmente riprogettato)
Grazie in anticipo =)
Soluzione
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);
}
Altri suggerimenti
L'opzione migliore sarebbe quella di utilizzare un framework per la creazione di applicazioni estensibili:
Se vuoi farlo manualmente, puoi usare Assembly.Load * () per caricare un assembly in fase di esecuzione. È possibile cercare nell'assieme 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 dall'applicazione e dal plug-in.
Per offuscamento, ci sono una coppia di strumenti di offuscamento disponibili.
Utilizzare i metodi statici Assembly.Load () / Assembly.LoadFile () / Assembly.LoadFrom () per caricare in modo dinamico gli assembly.
Cordiali saluti, ricordati di usare uno strumento come .Net Reflector di Red-Gate ispezionare la DLL per assicurarsi che sia correttamente offuscata. Questo strumento visivo gratuito ti consente di vedere la DLL come la vedranno i tuoi utenti, così saprai se il tuo codice è esposto
alt text http://img149.imageshack.us/img149/2025/screenshotfullscreen .gif
.Net include Dotfuscator Community Edition che può essere utilizzato per offuscare il codice. Non è richiesta alcuna codifica, consultare la guida dell'utente per apprendere la GUI se hai bisogno di aiuto.