繁体   English   中英

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

[英]Need to access static property of class without adding a DLL dependency

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

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

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

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

在C ++中,内联使这变得非常容易。 这在C#中可能吗?

我不想在可执行文件中重复此数据,因为这将使维护工作头痛。

您可以使用ILMerge生成后版本将包含Database类的程序集嵌入到exe中:

ILMerge是一个实用程序,可用于将多个.NET程序集合并为一个程序集。

ILMerge页面还链接到Jeffrey Richter文章 ,其中详细介绍了如何在使用ILMerge的情况下实现相似的目标。

我只知道将某些项目B中的项目内联到其他某些项目A中的情况是const和enum。 在我看来,解决您的问题的.NET方式是将ReleasedDatabaseVersions分解到第三个项目中。 然后,第三个项目将同时由ValidateInstall.exe和Database.dll引用。

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

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

添加引用并包括对已生成的可执行文件的引用将是通过将其包含在构建中来确保该程序在未安装DLL的系统上运行的一种方式。

我真的想不出任何方法来分发此应用程序,而无需实际复制DLL或静态内容

看一下使用DllImport属性:

http://msdn.microsoft.com/zh-CN/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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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