C#奇怪的装配行为

时间:2017-10-30 13:26:20

标签: c# .net-assembly

我经历了一些奇怪的装配行为。我执行调用成功并执行我想要的方法,但此方法无法访问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

3 个答案:

答案 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的类型和成员的信息时才能使用,但不能用于调用指定的值。