C # agrega una referencia usando solo código (sin IDE & # 8220; Agregar referencia & # 8221; funciones)

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

Pregunta

Estoy escribiendo un complemento para un programa, y ??quiero poner mi código dentro de una DLL para poder compartir el complemento libremente sin exponer (regalar) mi código.

Aquí está la estructura básica a la que tengo acceso:

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

Entonces solo hago referencia al archivo .cs en el que se encuentra mi código y el programa "come" arriba este complemento. Ahora, he puesto varias lógicas allí, que consisten principalmente en funciones que no están vinculadas directamente a " Initialize () " ;, solo en la función doWork (), que inicia todo el sistema.

Ahora, quiero poner todo mi código dentro de una DLL, y luego simplemente llamar desde Inicializar (), myDll.doWork () (o algo así).

PD: este dll sería una biblioteca C # compilada (¿podría llamarse importación de ensamblaje dinámico? Realmente no sería dinámico ya que de todos modos se compilaría antes de la ejecución, ¿verdad?)

PS2: De esta manera también puedo agregar recursos personalizados como formularios, imágenes y demás sin mucha dificultad, ¿verdad?

PS3: ¿Existe una herramienta gratuita para proteger el código dentro de dicha DLL? (es decir, proteger de ser rediseñado fácilmente)

Gracias de antemano =)

¿Fue útil?

Solución

Encontré exactamente lo que estaba buscando, aquí está:

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

Otros consejos

La mejor opción sería utilizar un marco para crear aplicaciones extensibles:

Si desea hacerlo manualmente, puede utilizar Assembly.Load * () métodos para cargar un ensamblaje en tiempo de ejecución. Puede buscar en el ensamblado tipos que implementen una interfaz específica y luego crear instancias usando Activator.CreateInstance . Los ensamblajes se pueden compilar por separado, solo debe hacer referencia a un ensamblaje que contenga la interfaz compartida por la aplicación y el complemento.

Para ofuscación, hay una pareja de herramientas de ofuscación disponibles.

Use los métodos estáticos Assembly.Load () / Assembly.LoadFile () / Assembly.LoadFrom () para cargar ensamblajes dinámicamente.

Para su información, recuerde usar una herramienta como .Net Reflector de Red-Gate para inspeccionar su DLL para asegurarse de que esté ofuscada correctamente. Esta herramienta visual gratuita le permite ver la DLL tal como la verán sus usuarios para que sepa si su código está expuesto

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

.Net viene con Dotfuscator Community Edition que puede usarse para ofuscar su código. No se requiere codificación, consulte su guía del usuario para conocer la GUI si necesitas ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top