使用VS2015中的C#交互式控制台,我想访问标记为internal
的属性和类。通常,这是通过将InternalsVisibleAttribute添加到有问题的项目中来完成的。我尝试将csc.exe添加为"朋友"程序集,但访问问题仍然存在。
- 这是通过C#交互控制台访问内部类成员的正确方法吗
- 如果是,我需要什么dll/exe才能使内部可见
这是可能的,但我不确定您为什么需要这样做。类型是内部的是有原因的。以下是如何做到这一点-
使用以下代码创建控制台应用程序-
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
添加内部类-
internal class MyClass
{
internal string MyMethod()
{
return "Hello world!";
}
}
构建您的解决方案。在您的c#交互式窗口-
>#r "C:Users...Project.dll"
>using System;
>using System.Reflection;
>Assembly assembly = >Assembly.LoadFrom("C:Users...Project.dll");
> Object mc = assembly.CreateInstance("AccessInternal.MyClass");
> Type t = mc.GetType();
> BindingFlags bf = BindingFlags.Instance | BindingFlags.NonPublic;
> MethodInfo mi = t.GetMethod("MyMethod", bf);
> string result = (string)mi.Invoke(mc, null);
> Console.WriteLine(result);
Hello world!
>
注意:假设这是c#交互式窗口,它不会加载目标组件的依赖对象,即,如果您的程序集引用了内部方法中引用的其他程序集,那么c#交互式将无法执行方法,除非它有权访问这些程序集并能加载它们。