背景
在有些时候,由于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 } }