ReflectionMagic 5.0.1

dotnet add package ReflectionMagic --version 5.0.1                
NuGet\Install-Package ReflectionMagic -Version 5.0.1                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="ReflectionMagic" Version="5.0.1" />                
对于支持 包引用 的项目,请将此 XML 节点复制到项目文件中,以引用此包。
paket add ReflectionMagic --version 5.0.1                
#r "nuget: ReflectionMagic, 5.0.1"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。请将此内容复制到交互式工具或脚本源代码中,以引用包。
// Install ReflectionMagic as a Cake Addin
#addin nuget:?package=ReflectionMagic&version=5.0.1

// Install ReflectionMagic as a Cake Tool
#tool nuget:?package=ReflectionMagic&version=5.0.1                

ReflectionMagic

Build Status

私有反射允许您访问其他程序集中的私有和内部成员。通常,被认为是一件坏事,因为它将您与可能以后破坏您的非官方实现细节绑定。此外,它在中信任度下不可用。

此库的目的并不是鼓励任何人在本可以不这样做的情况下使用私有反射。相反,目的是在您决定需要使用它时允许您更容易地做到这一点。

换一种说法,我并不是告诉你要违法,但我告诉你如何更有效地违法,如果你感兴趣的话!

场景

假设你在使用一个包含如下代码的库:

public class Foo1 
{
    private Foo2 GetOtherClass() 
    { 
        // Omitted
    }
}

internal class Foo2 
{
    private string SomeProp { get { /* Omitted */ } }
}

并且假定你有一个公共类 Foo1 的实例 foo1,而你邪恶的自我告诉你要调用其私有方法 GetOtherClass(),然后获取该方法的 SomeProp 属性。

使用反射

使用普通的反射,这可能是这样的:

object foo2 = typeof(Foo1).InvokeMember("GetOtherClass", 
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
                null, foo1, null);
                
PropertyInfo propInfo = foo2.GetType().GetProperty("SomeProp",    
                BindingFlags.Instance | BindingFlags.NonPublic);

string val = (string)propInfo.GetValue(foo2, null);

这是可行的,但看起来相当糟糕。

使用 ReflectionMagic

做同样的事情,但这次使用 ReflectionMagic 库

string val = foo1.AsDynamic().GetOtherClass().SomeProp;

下载

此库可通过 NuGet 获取。

更多信息

更多详情,请查看 David Ebbo 的原始博客文章:https://blogs.msdn.microsoft.com/davidebb/2010/01/18/use-c-4-0-dynamic-to-drastically-simplify-your-private-reflection-code/

已知限制

.NET Core 1.x 运行时不可用对 'out' 和 'ref' 参数的支持。这是一个运行时限制,会导致 PlatformNotSupportedException。

产品 兼容和额外计算的目标框架版本。
.NET net5.0已计算。 net5.0-windows已计算。 net6.0兼容。 net6.0-android已计算。 net6.0-ios已计算。 net6.0-maccatalyst已计算。 net6.0-macos已计算。 net6.0-tvos已计算。 net6.0-windows已计算。 net7.0已计算。 net7.0-android已计算。 net7.0-ios已计算。 net7.0-maccatalyst已计算。 net7.0-macos已计算。 net7.0-tvos已计算。 net7.0-windows已计算。 net8.0已计算。 net8.0-android已计算。 net8.0-browser已计算。 net8.0-ios已计算。 net8.0-maccatalyst已计算。 net8.0-macos已计算。 net8.0-tvos已计算。 net8.0-windows已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET标准 netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容目标框架
包含目标框架(在包中)
了解更多关于 目标框架.NET 标准化

NuGet 包 (26)

显示依赖 ReflectionMagic 的前 5 个 NuGet 包

下载
Lime.Transport.WebSocket

C# LIME WebSocket 传输库

RazorGenerator.Testing

允许对预编译的 Razor 视图进行单元测试的辅助工具

Wyam.Less

Wyam 是一个简单易用、高度模块化和极其可配置的静态内容生成器。此库提供了解析 Less CSS 内容的支持。

Kledex

Kledex是一个.NET Core框架,可用来创建简单而清晰的设计,通过强制执行单一责任和关注点的分离。其高级功能非常适合领域驱动设计(DDD)、命令查询责任分离(CQRS)和事件溯源。Kledex还支持Azure Service Bus和RabbitMQ的集成。

MoeLib.Web

MoeLib.Web

GitHub 仓库 (9)

显示依赖ReflectionMagic的GitHub最受欢迎的前5个仓库

仓库 星标
Tyrrrz/DiscordChatExporter
将Discord聊天记录导出为文件
rnwood/smtp4dev
smtp4dev - 用于开发和测试的模拟SMTP邮件服务器
UiPath/CoreWF
将WF运行时移植到.NET 6上运行的版本
CodeMazeBlog/CodeMazeGuides
所有Code Maze指南的主仓库
RazorGenerator/RazorGenerator
Visual Studio的自定义工具,允许在运行时而不是设计时处理Razor文件,从而允许它们被构建到程序集以便更容易重用和分发。
版本 下载 最后更新
5.0.1 68,535 1/29/2024
5.0.0 127,105 6/9/2023
4.1.0 2,348,769 6/24/2019
4.1.0-beta1 1,038 6/17/2019
4.0.0 133,108 11/15/2018
4.0.0-beta1 1,209 9/10/2018
3.2.0-beta1 4,312 5/29/2018
3.1.0 533,887 11/13/2017
3.1.0-beta1 1,329 11/1/2017
3.0.0 119,486 3/9/2017
3.0.0-beta5 2,538 12/27/2016
3.0.0-beta1 1,486 11/22/2016
2.1.0 106,144 12/31/2014
2.0.3 53,150 10/14/2014
2.0.2 19,932 3/7/2014
2.0.0 191,854 4/26/2013
1.1.0 101,831 10/27/2011
1.0.1 46,577 8/10/2011