我正在为一个程序编写一个插件,我想将我的代码放入 DLL 中,这样我就可以自由地共享该插件,而无需暴露(泄露)我的代码。

这是我可以访问的基本结构:

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

然后我只需引用我的代码所在的 .cs 文件,程序就会“吃掉”这个插件。现在,我在那里放置了几个逻辑,主要由不直接与“Initialize()”绑定的函数组成,仅在启动整个系统的 doWork() 函数上。

现在,我想将所有代码放入 DLL 中,然后从 Initialize()、myDll.doWork() (或类似的东西)内部调用。

附:该 dll 将是一个已编译的 C# 库(可以称为动态程序集导入吗?它不会真正是动态的,因为无论如何它都会在执行前进行编译,对吧?)

PS2:这样我还可以轻松添加自定义资源,例如表单、图像等,对吗?

PS3:有没有免费的工具来保护此类 DLL 中的代码?(即防止被轻易地重新设计)

预先感谢 =)

有帮助吗?

解决方案

找到我正在寻找的东西,这里是:

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

其他提示

最好的选择是使用框架来创建可扩展的应用程序:

如果您想手动执行此操作,可以使用 程序集.加载*() 在运行时加载程序集的方法。您可以在程序集中搜索实现特定接口的类型,然后使用以下命令创建实例 激活器.CreateInstance. 。程序集可以单独编译,您只需引用包含应用程序和插件共享的接口的程序集即可。

为了混淆,有 一对夫妇混淆工具 可用的。

使用静态Assembly.Load()/ Assembly.LoadFile()/ Assembly.LoadFrom()方法动态加载程序集。

仅供参考,请记得使用 Red-Gate的.Net Reflector 等工具。检查您的DLL以确保它被正确混淆。这个免费的可视化工具让您可以看到DLL,因为您的用户将看到它,因此您将知道您的代码是否暴露

alt text http://img149.imageshack.us/img149/2025/screenshotfullscreen .gif注意

.Net附带 Dotfuscator Community Edition 可用于混淆代码。无需编码,请参阅用户指南,了解GUI的使用方法如果你需要帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top