【抬杠.NET】如何进行IL代码的开发

背景

在有些时候,由于C#的限制,或是追求更高的性能,我们可以编写IL代码来达到我们的目的。本文将介绍几种IL代码开发的几种方式。

创建并使用IL项目

目前,visual studio 2019和dotnet命令并不支持直接创建IL项目,但实际上二者是有相关支持的,所以我们需要“救国一下”。

1.首先我们使用visual studio 2019创建一个空解决方案名为ILDevelopSamples,然后创建一个netstandard2.0的library项目ILDevelopSamples.ILProject,然后关闭解决方案。

2.然后修改该项目的.csproj文件的内容为:

<Project Sdk="Microsoft.NET.Sdk.IL">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <_HasReferenceToSystemRuntime>true</_HasReferenceToSystemRuntime>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="**\*.il" />
  </ItemGroup>

</Project>

3.将该.csproj文件的扩展名改为.ilproj

4.修改.sln文件内容,将其中对于该项目的引用路径修正,即将其扩展名由.csproj改为.ilproj

5.在解决方案根目录下打开命令行,新建一个文件名为global.json并填写内容为 

{
  "sdk": {
    "version": "5.0",
    "rollForward": "latestMajor",
    "allowPrerelease": false
  },
  "msbuild-sdks": {
    "Microsoft.NET.Sdk.IL": "5.0.0"
  }
}

 重新打开解决方案,然后此时vs就可以正常加载该项目了。

6.我们可以添加一个il文件来编写代码了,例如:

.assembly extern mscorlib {}

.assembly ILDevelopSamples.ILProject
{
  .ver 1:0:0:0
}

.module ILDevelopSamples.ILProject.dll

.class public abstract auto ansi sealed beforefieldinit System.IntHelper
{
  .method public hidebysig static int32 Square(int32 a) cil managed aggressiveinlining
  {
    .maxstack 2
    ldarg.0
    dup
    mul
    ret
  }
}

 

  

上一篇:基于IL的C#任意类型自动深拷贝与深比较工具


下一篇:OpenMax框架