在 C# 项目中使用 Microsoft Bond

Using Microsoft Bond in a C# project

是否有在 C# 项目中引用 Microsoft Bond 架构文件的标准方法?

对于 SDK 样式的 .csproj 文件

当您在 SDK 样式的 .csproj 文件(如与 .NET Core 或 .NET 5+ 一起使用的文件)中将 PackageReference 添加到 NuGet 包 Bond.CSharp 时,类型来自项目目录中的任何 .bond 文件都将包含在程序集中:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <PackageReference Include="Bond.CSharp" Version="9.0.3" />
  </ItemGroup>
</Project>

项目目录中的所有 .bond 文件都将 运行 生成代码,生成的 .cs 文件将编译到您的程序集中。

MSBuild 项目 BondCodegen 用于收集要处理的 .bond 文件。您可以使用 MSBuild's Update and Remove functionality 自定义 codegen 中包含的项目。

有关目标支持的更多详细信息,例如可用于自定义代码生成的元数据,请查看 Bond.CSharp package README or the targets themselves。 (请注意,任何 property/target 在私有 属性 中以下划线开头。这些属性不是代码生成目标的 public 接口的一部分,并且可能随时更改。)

Bond.CSharp 包引入了许多其他 Bond 包以获得 Bond 序列化的全部功能,这通常是您想要的。但是,您还可以使用 finer-grained packages 来更精确地控制依赖项(例如,不添加对 Newtonsoft.JSON 的依赖项)。

对于“经典”.csproj 文件

当您使用 Visual Studio 添加对 NuGet 包的引用时 Bond.CSharp,NuGet 会将对 Bond codegen .targets 文件的引用添加到 .csproj 文件中。此 .targets 文件将自动 运行 对 BondCodegen ItemGroup 中的任何 .bond 文件进行代码生成,并且生成的 .cs 文件将隐式编译。

在 Visual Studio 中,这是通过更改文件属性中的“生成操作”来控制的。

Bond 源代码树中有一个 simple example showing how the BondCodegen ItemGroup works。该 .csproj 文件的摘录如下:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  ...
  <Import Project="..\..\..\..\cs\build\nuget\Bond.CSharp.props" />
  ...
  <ItemGroup>
    <BondCodegen Include="schema.bond" />
  </ItemGroup>
  ...
  <Import Project="$(BOND_PATH)\build\nuget\Bond.CSharp.targets" />
</Project>