是否有在 C# 项目中引用 Microsoft Bond 架构文件的标准方法?
1 回答
对于 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 的更新和删除功能来自定义 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>