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 =)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top