.NET中的System.Runtime.CompilerServices标准库
目前,我正在将.NET 4.5
类库转换为.NET Core
类库,该过程将引用.NETStandard v1.6
。.NET中的System.Runtime.CompilerServices标准库
在我的部分代码中(主要依赖于反射),我需要确定一个对象是否位于System.Runtime.CompilerServices
命名空间中的Closure
类型。该名称空间和类型在.NETStandard v1.6
中不可用。
- 这种类型是移动还是不能访问?
- 由于我的代码依赖于它,如果在
.NETStandard
中不可用,有什么替代方法?
特定代码依靠Closure
确定参数类型一个委托的,跳过编译器生成Closure
的。
Delegate toWrap;
MethodInfo toWrapInfo = toWrap.GetMethodInfo();
var toWrapArguments = toWrapInfo.GetParameters()
// Closure argument isn't an actual argument, but added by the compiler.
.SkipWhile(p => p.ParameterType == typeof(Closure))
.Select(p => p.ParameterType);
在.net核心1.0,Closure
exists in the System.Linq.Expressions
assembly in the System.Linq.Expressions
package,但它没有暴露在参考大会。这意味着它只是Core中的一个实现细节(并且可能会在未来的版本中消失或移动)。这也意味着你不能在编译时引用它(就像你在.Net框架所做的那样),但你可以在系统运行时反射找回它(不要忘记using System.Reflection;
为GetTypeInfo()
):
Type closureType = typeof(Expression).GetTypeInfo().Assembly
.GetType("System.Runtime.CompilerServices.Closure");
在。网络框架,Closure
是在不同的程序集(即,System.Core
),但也是Expression
,所以这个代码应该在两个工作。
在这种情况下,为了列出的代码的目的,我认为我只是简单地检查类型的FullName,因为通过反射检索类型依赖于完全相同的依赖关系。无论如何,这回答了这个问题。 –
您是否尝试过使用旧的.net框架版本打印出类型,您知道它是'Closure'或类似的东西?获得该类型后,您可能很有可能在Visual Studio的对象目录中找到相应的类(以某种方式连接到您的类型)。 –
@ChrisTophski我在上面。一旦我的迁移代码编译完成后,我将运行我的测试并查看发生了什么变化。如果没有其他人回答这个问题,我会的。 ; p –
使用http://packagesearch.azurewebsites.net –