我经历了一些奇怪的装配行为。我执行调用成功并执行我想要的方法,但此方法无法访问public static
类对象的任何public static
值。如果方法访问类的空副本,则所有值都为null
,但由于类为static
,因此不可能。
要调用我加载程序集的方法,如下所示:
public static Assembly loadedAssembly = Assembly.LoadFrom( //path of the dll );
然后,被调用的方法只能访问其他static
类的空值。但是,将Assembly
设置为以下内容可使该方法正确访问所有值。
public static Assembly loadedAssembly = Assembly.GetExecutingAssembly();
我认为它们都是相同的,因为从目录加载的Assembly
i与此时执行的加载完全相同。 if
比较确认那些不相同。似乎直接从目录加载的Assembly
未“初始化”,因此其所有成员都是null
。您能告诉我那里发生了什么以及为什么Assembly
成员都是null
。
答案 0 :(得分:0)
可能尚未调用static
类上的构造函数。
如果您没有在static
类上调用任何方法,则不会调用构造函数,并且其上的字段也不会被初始化。
如果您尝试访问其中的字段,可能需要尝试将其更改为属性。
答案 1 :(得分:-1)
您不需要加载程序集,您只需要使用反射执行静态方法的类型,我使用下面的方法来调用返回字符串的静态方法。
private static string ExecuteStaticMethod(Type objectType, string methodName, string defaultValue = null)
{
var retVal = defaultValue;
if (string.IsNullOrEmpty(retVal))
{
var methodInfo = objectType.GetMethod(methodName);
if (methodInfo != null)
{
retVal = methodInfo.Invoke(null, null) as string;
}
}
return retVal;
}
答案 2 :(得分:-1)
由于没有人提供所需的答案,我会去做。我遇到的问题基本上是Assemblies
的错误理解。问题是我从目录中加载了这个Assembly
:
public static Assembly loadedAssembly = Assembly.LoadFrom( //path of the dll );
但是这个Assembly
还没有被初始化,它会包含有关成员和类型的信息,但不包括它们的值。这些包含在当前正在执行的Assembly
中,可以通过以下方式访问:
public static Assembly loadedAssembly = Assembly.GetExecutingAssembly();
在此当前执行Assembly
包含其成员的指定值。
所以Assembly.LoadFrom()
只有在需要有关此Assembly
的类型和成员的信息时才能使用,但不能用于调用指定的值。