创建一个包含另一个DLL的DLL是否可能?

4

我正在开展一个项目,任务是创建一个 DLL 项目。在这个项目中,我有一个现有的 DLL,其中包含一组方法。使用现有的 DLL,我可以调用一些方法并在新的 DLL 中创建一些方法。

在 C# 中是否可能?创建这样一个项目的可能性和方法是什么?


1
像 DLLception 一样...? - Thomas Ayoub
1
你是想在运行时创建方法,还是只是调用现有 DLL 上的方法?如果需要的话,你可以将另一个 DLL 嵌入为资源,并在运行时提取和加载它。但目前这个问题还有点不清楚。如果你需要澄清任何事情,请注意不要让它变得太广泛... - James Thorpe
是的。您可以使用 ILMerge 工具将现有的 DLL 合并成一个文件。更多信息请参见 http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge。 - Fka
集成开发环境是Visual Studio 2008。DLL可能会隐藏在我们生成的DLL中。我正在使用C#代码。 - Ahamed Nafeel
詹姆斯。我的问题很简单。我需要使用现有的DLL创建一个新的DLL。现有的DLL功能可能会在新的DLL中使用。现有的DLL位于原始DLL后面。 - Ahamed Nafeel
显示剩余3条评论
1个回答

6
如果您想要将DLL隐藏在自己的DLL内容中,您只需将其放入资源中即可。从资源的角度来看,DLL就像任何其他文件一样,您只需将其添加到程序资源中,并在需要时放置文件即可。
但是,这将禁止您使用隐式链接,您将不得不显式链接DLL。MSDN已经提供了一个相当合理的教程,请点击这里
using System;
using System.Reflection;

public class Asmload0
{
    public static void Main()
    {
        // Use the file name to load the assembly into the current 
        // application domain.
        Assembly a = Assembly.Load("example");
        // Get the type to use.
        Type myType = a.GetType("Example");
        // Get the method to call.
        MethodInfo myMethod = myType.GetMethod("MethodA");
        // Create an instance. 
        object obj = Activator.CreateInstance(myType);
        // Execute the method.
        myMethod.Invoke(obj, null);
    }
}

如果您想创建自己的 DLL,只需使用旧的 DLL,您可以直接 添加引用。然后您可以设置 "使用本地副本",但是您需要分发两个文件:

Copy Local Visual Studio Screenshot


如果您想通过编译器/链接器(内置于visual studio中)来制作“静态链接”,则需要使用静态链接库(LIB),而不是动态链接库(DLL)...
或者您可以尝试阅读“如何静态链接.DLL?”这篇文章,它似乎提供了一些指导(专有软件)来完成这个过程。

主要问题是我需要创建一个带有现有项目的DLL项目。我想通过引用在我的项目中使用现有项目。您能告诉我如何在C#中创建一个带有现有DLL的DLL吗? - Ahamed Nafeel
老板,我没有“旧的DLL项目”,我只有一个DLL。我正在创建一个新的DLL项目,以增强某些功能并使用旧DLL的现有功能创建一个新的DLL。 - Ahamed Nafeel
非常感谢....但是我已经参考了这个页面。我通过创建一个网络模块来完成了以下方法。但是它显示了一些错误。这就是为什么我对我的路径是否正确感到怀疑的原因。 - Ahamed Nafeel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接