C# 如何访问.Net CLR blob项

C# 如何访问.Net CLR blob项,c#,clr,C#,Clr,我在和Roslyn玩游戏,到目前为止,我已经了解到C字符串文字是使用System.Reflection.Metadata,特别是使用getOradUserString()方法放置在CLR#US(用户字符串)堆中的。然后在运行时,通过ldstrIL指令访问这些字符串 我可以看到System.Reflection.Metadata还包含一个getOradConstantBlob()方法,该方法可以将数据(包括UTF16字符串)放置在blob堆上。这大概就是dotPeek可以看到的Blob元数据,这可

我在和Roslyn玩游戏,到目前为止,我已经了解到C字符串文字是使用
System.Reflection.Metadata
,特别是使用
getOradUserString()
方法放置在CLR#US(用户字符串)堆中的。然后在运行时,通过
ldstr
IL指令访问这些字符串

我可以看到
System.Reflection.Metadata
还包含一个
getOradConstantBlob()
方法,该方法可以将数据(包括UTF16字符串)放置在blob堆上。这大概就是dotPeek可以看到的Blob元数据,这可以从这篇博客文章的屏幕截图中看到:


我的问题是,如何访问这个blob数据?是否有与ldstr对应的IL指令执行此操作?
System.Reflection.Metadata
中的某些方法?有关于这方面的文件吗?(我试过用谷歌搜索各种关键字,但没有运气。)

没有IL指令访问
#Blob
流中的数据。相反,blob由元数据表中的字段引用。例如,
MemberRef
元数据表的
Signature
列是
#Blob
流中成员签名的偏移量


文件格式(包括#Blob流、IL指令和元数据表)由ECMA-335定义(特别是分区II和III)。

感谢您的回答。是否有可能通过反射访问此#Blob流上的项目?我要寻找的是一种偷偷摸摸的或非标准的方法,让我修改后的Roslyn编译器提供可由生成的程序访问的数据。我见过的最接近直接/任意访问#Blob流的方法是Module.ResolveSignature(int),但我怀疑这对您描述的内容是否有帮助。您可以使用本机代码/pinvoke访问blob,但是如果您要这样做,那么只使用Win32资源可能更容易。如果您需要可移植的东西,那么嵌入式资源可能是更好的选择(您可以使用Assembly.GetManifestResourceStream(string)读取)。