C#仅使用代码(没有IDE“添加引用”函数)添加一个引用(C# add a reference us

2019-07-17 19:33发布

我一个书面方式插件程序,我希望把我的代码DLL内,所以我可以自由地共享插件不暴露(放弃)我的代码。

这是基本结构我有机会获得:

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

然后我就引用.cs文件我的代码是在和节目“吃”了这个插件。 现在,我已经把几个逻辑在里面,包括主要的arent直接与功能“初始化()”,仅在的doWork()函数,启动整个系统。

现在,我希望把我所有的代码DLL里面,然后刚从里面初始化(),myDll.doWork(呼叫)(或类似的东西)。

PS:这个DLL会被OFC编译的C#库(可以把它称为动态组装进口它wouldnt真的是动态的,因为它会反正编译执行前,右?)

PS2:这样我还可以添加喜欢的形式,图片和自定义资源,无权太大的困难?

PS3:是否有保护代码中的DLL里面一个免费的工具? (即从beeing轻松地重新设计的保护)

由于事先=)

Answer 1:

发现正是我一直在寻找的,那就是:

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


Answer 2:

最好的办法是使用一个框架来创建可扩展的应用程序:

  • 托管扩展性框架 (MEF)
  • Mono.Addins

如果你想要做手工,您可以使用Assembly.Load *()方法在运行时加载的程序集。 您可以搜索组件,其实现一个特定的接口,然后创建一个使用实例类型Activator.CreateInstance 。 所述组件可单独被编译,你只需要引用包含由应用和插件共享接口的组件。

对于模糊,有一对夫妇的混淆工具可用。



Answer 3:

使用静态Assembly.Load()/ Assembly.LoadFile()/ Assembly.LoadFrom()方法来动态加载组件。



Answer 4:

仅供参考,请记住使用类似的工具红门的.net反射检查你的DLL,以确保它是正确的混淆。 这个免费的,可视化的工具可以让你看到的DLL的用户将看到它,所以如果你的代码是暴露你就知道

替代文字http://img149.imageshack.us/img149/2025/screenshotfullscreen.gif

.NET自带的Dotfuscator社区版可以用来混淆你的代码。 无需编码,看到自己的用户手册 ,了解周围的GUI自己的方式,如果你需要帮助。



文章来源: C# add a reference using only code (no IDE “Add Reference” functions)