Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要在不添加DLL依赖项的情况下访问类的静态属性_C#_.net_Class_Inline - Fatal编程技术网

C# 需要在不添加DLL依赖项的情况下访问类的静态属性

C# 需要在不添加DLL依赖项的情况下访问类的静态属性,c#,.net,class,inline,C#,.net,Class,Inline,我在DLL(Database.DLL)中有一个类,该类具有静态属性: public class Database { public static int[] ReleasedDatabaseVersions { get { return new int[] { 5, 6, 7, 8 }; } } } 我已经创建了一个独立的可执行文件(ValidateInstall.exe),需要访问数据库类中的releasedatabaseversions) 但是,我希

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

public class Database
{
    public static int[] ReleasedDatabaseVersions
    {
        get { return new int[] { 5, 6, 7, 8 }; }
    }
}
我已经创建了一个独立的可执行文件(
ValidateInstall.exe
),需要访问
数据库
类中的
releasedatabaseversions

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

在C++内联中,P>会使这一点变得容易。这在C#中可能吗


我不想在可执行文件中重复此数据,因为这将是一个维护难题。

请查看使用DllImport属性:

已更新 如果您不想使用这种后期绑定方法,那么始终存在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;
现在,我不确定反射是否会带来所有功能。我以前没有用过这个方法,所以我不能给你一个正确的解决方案

您可以使用后期生成将包含
数据库的程序集
类嵌入到exe中:

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


ILMerge页面还链接到,详细说明了如何在不使用ILMerge的情况下实现类似的功能。

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


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

添加引用并包括对生成可执行文件的引用将是一种确保程序在未安装DLL的系统上运行的方法,方法是将其包括在生成中


如果不复制DLL或静态内容,我真的想不出任何方法来分发此应用程序。据我所知,某些项目B中的项内联到其他项目A中的唯一情况是常量和枚举。在我看来,解决问题的.NET方式是将ReleasedDatabaseVersions考虑到第三个项目中。第三个项目将被ValidateInstall.exe和Database.dll引用这与问题有关吗?好的,这是实现延迟绑定到dll文件的方法。是的,OP明确表示他们不想这样做:“我希望
ValidateInstall.exe
完全独立于
Database.dll
(即,我希望能够在没有安装此dll的情况下在PC上运行它)。Wizetux注意到Assembly.LoadFrom()将引发一个异常,如果该文件不存在,则可以捕获该异常。您也可以在尝试加载该文件之前检查该文件是否存在。编辑:尽管需要将其从数据库d=…更改为对象d=…,并且需要进行反射以访问成员。@如果正确,您可以也应该这样做,但是Assembly.LoadFrom()是OP能够在运行时加载程序集的唯一方法,而无需实际找到程序集或在系统上运行exe。谢谢-这对我很有效。我最终按照@Corey的建议创建了一个共享DLL,然后使用
ILMerge
将此共享DLL与可执行文件相结合。This删除了所有运行时依赖项。