首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#仅使用代码添加引用(无集成开发环境“添加引用”函数)

C#仅使用代码添加引用(无集成开发环境“添加引用”函数)
EN

Stack Overflow用户
提问于 2009-09-12 00:18:22
回答 4查看 19.8K关注 0票数 5

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

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

代码语言:javascript
复制
using System;
public class Plugin
{
    public void Initialize()
    {
        //do stuff here
        doWork();
    }
}

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

现在,我想把我所有的代码放在一个动态链接库中,然后从Initialize(),myDll.doWork() (或类似的东西)内部调用。

PS:这个动态链接库是一个编译过的C#库吗(它可以被称为动态程序集导入吗?它不会真的是动态的,因为它无论如何都会在执行前编译,对吧?)

PS2:通过这种方式,我还可以轻松地添加自定义资源,如表单、图像等,对吧?

PS3:有没有免费的工具来保护这些动态链接库中的代码?(即防止蜜蜂容易被重新设计)

提前感谢=)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-12 02:25:49

找到了我正在寻找的东西,如下所示:

代码语言:javascript
复制
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);            
}
票数 7
EN

Stack Overflow用户

发布于 2009-09-12 00:23:29

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

  • Managed Extensibility Framework (MEF)
  • Mono.Addins

如果要手动执行此操作,可以使用Assembly.Load*()方法在运行时加载程序集。您可以在程序集中搜索实现特定接口的类型,然后使用Activator.CreateInstance创建实例。这些程序集可以单独编译,您只需引用一个包含应用程序和插件共享的接口的程序集。

对于混淆,有obfuscation toolsa couple可用。

票数 3
EN

Stack Overflow用户

发布于 2009-09-12 00:24:17

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1413831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档