相关疑难解决方法(0)

你在MSIL中可以做些什么,你不能用C#或VB.NET做什么?

用.NET语言编写的所有代码都编译为MSIL,但是只有使用MSIL才能直接执行特定的任务/操作吗?

让我们在MSIL中比C#,VB.NET,F#,j#或任何其他.NET语言更容易完成.

到目前为止我们有这个:

  1. 尾递归
  2. 通用Co/Contravariance
  3. 重载仅在返回类型上有所不同
  4. 覆盖访问修饰符
  5. 有一个不能从System.Object继承的类
  6. 过滤的异常(可以在vb.net中完成)
  7. 调用当前静态类类型的虚方法.
  8. 获取值类型的盒装版本的句柄.
  9. 做一个尝试/错误.
  10. 使用禁用名称.
  11. 为值类型定义自己的无参数构造函数.
  12. 使用raise元素定义事件.
  13. CLR允许一些转换,但C#不允许转换.
  14. 做一个非main()方法作为.entrypoint.
  15. 直接使用本机int和本机unsigned int类型.
  16. 玩瞬态指针
  17. MethodBodyItem中的emitbyte指令
  18. 抛出并捕获非System.Exception类型
  19. 继承枚举(未验证)
  20. 您可以将字节数组视为(4x更小)整数数组.
  21. 您可以使字段/方法/属性/事件具有相同的名称(未验证).
  22. 您可以从自己的catch块分支回try块.
  23. 您可以访问famandassem访问说明符(protected internal是fam assem)
  24. 直接访问<Module>类以定义全局函数或模块初始值设定项.

.net c# clr cil

161
推荐指数
13
解决办法
9231
查看次数

.Net:加载程序集时运行代码

是否可以在加载程序集时运行某些代码,而无需在加载代码中执行任何特定操作?我正在寻找的就像一个类型的静态构造函数.

例如:

程序集A不知道程序集B,但B确实知道A.如果加载B,程序集A需要知道关于B的某些事情.当程序集B由运行时加载(引用或显式)时,我想要执行一段调用程序集A中的方法的代码(静态方法或属性).

此问题的根本原因是序列化A中的类型时遇到的未知类型,该类型包含B中的类型,这些类型在编译时未知,因为使用了接口.

.net wcf assemblies

37
推荐指数
4
解决办法
1万
查看次数

C#中的模块初始值设定项

模块初始值设定项是CLR的一项功能,无法在C#或VB.NET中直接使用.它们是名为的全局静态方法.cctor,保证在执行程序集中的任何其他代码(类型初始化程序,静态构造函数)之前运行.我最近想在一个项目中使用它并使用Mono.Cecil 将我自己的解决方案(控制台程序/ msbuild任务)一起攻击,但我想知道:

  1. 有没有办法欺骗C#编译器发射模块初始化器?任何属性(例如CompilerGenerated,SpecialName)或其他可以使用的技巧?

  2. C#/ VB.NET是否会出于某种目的自己发出这些初始化器?从我所看到的它们被托管C++用于某些互操作目的,但我找不到任何引用它们用于其他目的.有任何想法吗?

c# clr clr-module-initializer

23
推荐指数
3
解决办法
8654
查看次数

标签 统计

.net ×2

c# ×2

clr ×2

assemblies ×1

cil ×1

clr-module-initializer ×1

wcf ×1