dotnet 通过引用 msbuild 程序集实现自己定制编译器

本文介绍了如何在dotnet应用中引用msbuild程序集,实现自定义编译过程。通过注册msbuild实例并调用相关类,可以实现与`dotnet build`相同的效果。代码示例展示了从加载csproj文件到执行构建的完整流程,提供了一种在同一个进程中进行高度定制编译的方法。
摘要由CSDN通过智能技术生成

本来我想说的是基于引用 msbuild 程序集来自己做一个编译器,但是想想好像本文做的,和造编译器没啥关系,咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集,如何在自己的应用程序里面嵌入 msbuild 的构建代码,实现 dotnet build 的效果

大部分的代码都是采用命令行的方式去调用 dotnet build 或 msbuild 命令,然而通过命令行调用用的是跨进程的方式,如果期望做更多的定制化,最好还是放在相同的进程,此时可以更改构建的各个步骤

自己制作一个编译器最简单的方法就是引用现有的成熟的编译器作为组件,刚好 msbuild 最新版本也是使用 dotnet 框架编写的,咱的 dotnet 应用可以非常方便将 msbuild 引用进来。当然了,本文不讨论如何自己发布 msbuild 的问题,因为这又是另一个坑了。本文的方法是引用本机已安装好的 msbuild 程序集

在开始之前,请新建一个控制台项目。当然了,你要是新建一个 WPF 项目也没啥问题

编辑 csproj 文件,添加如下代码

  <ItemGroup>
    <PackageReference Include="Microsoft.Build" Version="16.10.0" ExcludeAssets="runtime" />
    <PackageReference Include="Microsoft.Build.Utilities.Core" Version="16.10.0" ExcludeAssets="runtime" />
    <PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
  </ItemGroup>

添加完成之后的 csproj 文件代码如下

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Build" Version="16.10.0" ExcludeAssets="runtime" />
    <PackageReference Include="Microsoft.Build.Utilities.Core" Version="16.10.0" ExcludeAssets="runtime" />
    <PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
  </ItemGroup>
</Project>
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值