C# 从 DLL 中反射引用另一个 class

C# Reflection reference to another class from inside a DLL

我有 2 个 classes,一个是 DLL,另一个是 .cs 文件,我想从 DLL 调用 .cs 文件中的方法。

DLL

namespace SimpleDebugFormatting
{
    public static class DebugLog
    {
        private static Type debugFormat;
        private static Type DebugFormat
        {
            get
            {
                if (debugFormat == null)
                    return debugFormat = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(_Type => _Type.Name.Contains("DebugFormat"));

                return debugFormat;
            }
        }

        public static List<string> GetMessages(IEnumerable _Parameters)
        {
            return (List<string>)DebugFormat.GetMethod("ConcatMessages", BindingFlags.Static | BindingFlags.NonPublic).Invoke(DebugFormat, new object[] { _Parameters });
        }
    }
}

.cs 文件

namespace SimpleDebugFormatting
{
    internal static class DebugFormat
    {
        internal static List<string> ConcatMessages(object[] _Messages) { }
    }
}

当两个 class 都是 .cs 文件时,一切正常,但是当“DebugLog”-class 是一个 DLL 时,它找不到“DebugFormat”-class.

当我尝试打印 DLL 程序集中的所有类型时
"Assembly.GetExecutingAssembly().GetTypes()",
它只显示这些 2:

SimpleDebugFormatting.DebugLog
SimpleDebugFormatting.DebugLog+<>c

为什么会这样,我怎样才能让它工作?

您的 DebugFormat class 被标记为 internal

Internal types or members are accessible only within files in the same assembly, as in this example:

所以,您明确要求 DebugFormat 不能被 DebugLog 访问。如果您希望它易于访问,请将其设置为 public。

用这个修复它:

private static Type DebugFormat
{
    get
    {
        if (debugFormat == null)
            return debugFormat = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(
                _Assembly => _Assembly.FullName.Contains("SimpleDebugFormattingAssembly")).GetTypes().FirstOrDefault(
                _Type => _Type.Name.Contains("DebugFormat"));

        return debugFormat;
    }
}

@JonasH,@Selvin,感谢快速回复。