需要访问类的静态属性而不添加DLL依赖项

时间:2011-11-08 00:46:46

标签: c# .net class inline

我在DLL(Database.dll)中有一个类,它有一个静态属性:

public class Database
{
    public static int[] ReleasedDatabaseVersions
    {
        get { return new int[] { 5, 6, 7, 8 }; }
    }
}

我创建了一个独立的可执行文件(ValidateInstall.exe),需要访问ReleasedDatabaseVersions类中的Database

但是,我希望ValidateInstall.exe完全独立于Database.dll(即我希望能够在没有安装此DLL的情况下在PC上运行它。)

在C ++中内联会使这很容易。这在C#中是否可行?

我不想在我的可执行文件中重复这些数据,因为这会让人头疼。

5 个答案:

答案 0 :(得分:1)

您可以使用ILMerge post-build将包含Database类的程序集嵌入到您的exe中:

  

ILMerge是一个可用于合并多个.NET的实用程序   装配成一个装配。

ILMerge页面还链接到article by Jeffrey Richter,详细说明了如何使用ILMerge实现类似

答案 1 :(得分:1)

我知道的唯一一些项目B中的项目被内联到其他项目A的情况是consts和enums。在我看来,.NET解决问题的方法是将ReleasedDatabaseVersions纳入第三个项目。然后,ValidateInstall.exe和Database.dll

都会引用第三个项目

答案 2 :(得分:0)

您可以添加Database类的源代码作为独立项目的链接,以便两个项目共享一个源代码文件。

使用“添加现有项目...”时,选择“添加为链接”而不是标准添加。

答案 3 :(得分:0)

添加引用并包含对构建的可执行文件的引用将是一种通过将程序包含在构建中来确保程序在没有安装DLL的系统上运行的方法。

在没有实际复制DLL或静态内容的情况下,我无法想到任何分发此应用程序的方法

答案 4 :(得分:-1)

看一下使用DllImport属性:

http://msdn.microsoft.com/en-us/library/aa984739(v=VS.71).aspx

<强>已更新 如果你不想使用这种后期绑定方法,总会有Assembly类。

Assembly a = Assembly.LoadFrom("Database.dll"); // This will throw an error that you can catch if the file does not exist.
Database d = a.CreateInstance("Database") as Database;

现在,我不确定反射是否会带来所有功能。我之前没有使用过这种方法,所以我无法给你一个正确的解决方案。