繁体   English   中英

C#仅使用代码添加引用(没有IDE“添加引用”功能)

[英]C# add a reference using only code (no IDE “Add Reference” functions)

我正在为一个程序编写一个插件,我想把我的代码放在一个DLL中,这样我就可以自由地共享插件而不暴露(赠送)我的代码。

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

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

然后我只引用我的代码所在的.cs文件,程序“吃掉”这个插件。 现在,我已经在其中放置了几个逻辑,主要包括不直接绑定到“Initialize()”的函数,仅在启动整个系统的doWork()函数上。

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

PS:这个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);            
}

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

如果要手动执行此操作,可以使用Assembly.Load *()方法在运行时加载程序集。 您可以在程序集中搜索实现特定接口的类型,然后使用Activator.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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM