C # ajoute une référence en utilisant uniquement du code (pas de fonction IDE & # 8220; Ajouter une référence & # 8221;)

StackOverflow https://stackoverflow.com/questions/1413831

Question

J'écris un plugin pour un programme et je veux insérer mon code dans une DLL afin de pouvoir le partager librement sans exposer (céder) mon code.

Voici la structure de base à laquelle j'ai accès:

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

Ensuite, je référence simplement le fichier .cs où se trouve mon code et le programme "mange". ce plugin. Maintenant, j’ai mis plusieurs logiques, principalement des fonctions qui ne sont pas liées directement à "Initialize ()", uniquement sur la fonction doWork (), qui démarre l’ensemble du système.

Maintenant, je veux mettre tout mon code dans une DLL, puis appeler de Initialize (), myDll.doWork () (ou quelque chose comme ça).

PS: Cette dll serait souvent une bibliothèque C # compilée (pourrait-elle s'appeler importation dynamique d'assemblage? elle ne serait pas vraiment dynamique puisqu'elle serait de toute façon compilée pré-exécution, non?)

PS2: De cette manière, je peux aussi ajouter des ressources personnalisées telles que des formulaires, des images, etc. sans trop de difficulté, non?

PS3: Existe-t-il un outil gratuit pour protéger le code dans une telle DLL? (c.-à-d. protéger de la facilité de réingénierie)

Merci d'avance =)

Était-ce utile?

La solution

J'ai trouvé exactement ce que je cherchais, le voici:

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);            
}

Autres conseils

La meilleure option serait d'utiliser un framework pour créer des applications extensibles:

Si vous voulez le faire manuellement, vous pouvez utiliser Assembly.Load * () pour charger un assembly au moment de l'exécution. Vous pouvez rechercher dans l'assembly des types qui implémentent une interface spécifique, puis créer des instances à l'aide de Activator.CreateInstance . Les assemblys peuvent être compilés séparément, il vous suffit de référencer un assembly contenant l'interface partagée par l'application et le plugin.

Pour l'obscurcissement, il existe un couple de Outils de dissimulation disponibles.

Utilisez les méthodes static Assembly.Load () / Assembly.LoadFile () / Assembly.LoadFrom () pour charger dynamiquement des assemblys.

Pour votre information, pensez à utiliser un outil comme le réflecteur .Net de Red-Gate . inspecter votre DLL pour s’assurer qu’elle est correctement masquée. Cet outil visuel gratuit vous permet de voir la DLL comme vos utilisateurs la verront pour que vous sachiez si votre code est exposé

texte de remplacement http://img149.imageshack.us/img149/2025/screenshotfullscreen .gif

.Net est livré avec Édition communautaire Dotfuscator qui peut être utilisé pour obscurcir votre code. Aucun codage n'est requis. Consultez leur guide de l'utilisateur pour apprendre à utiliser l'interface graphique. si vous avez besoin d'aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top