3

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

4

1 回答 1

6

对于 SDK 样式的 .csproj 文件

当您在 SDK 样式的 .csproj 文件(如与 .NET Core 或 .NET 5+ 一起使用的文件)中添加PackageReferenceNuGet 包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 的更新和删除功能来自定义 codegen 中包含的项目。

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

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

对于“经典” .csproj 文件

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

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

有一个简单的例子展示了 BondCodegen ItemGroup 如何在 Bond 源代码树中工作。该 .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>
于 2016-09-22T19:26:11.687 回答