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

最佳答案

对于 SDK 样式的 .csproj 文件
当您将 PackageReference 添加到 SDK 样式的 .csproj 文件(如与 .NET Core 或 .NET 5+ 一起使用的文件)中的 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 自定义代码生成中包含的项目。
有关目标支持的更多详细信息,例如可用于自定义代码生成的元数据,请查看 Bond.CSharp package READMEthe targets themselves 。 (请注意,私有(private)属性中以下划线开头的任何属性/目标。这些属性不是代码生成目标的公共(public)接口(interface)的一部分,可以随时更改。)
Bond.CSharp 包引入了许多其他 Bond 包以获得 Bond 序列化的全部功能,这通常是您想要的。但是,您还可以使用 finer-grained packages 对依赖项进行更精确的控制(例如,不添加对 Newtonsoft.JSON 的依赖项)。
对于“经典”.csproj 文件
当您使用 Visual Studio 添加对 NuGet 包 Bond.CSharp 的引用时,NuGet 会将对 Bond codegen .targets 文件的引用添加到 .csproj 文件。此 .targets 文件将自动在 BondCodegen ItemGroup 中的任何 .bond 文件上运行 codegen,并且生成的 .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>

关于c# - 在 C# 项目中使用 Microsoft Bond,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39571388/

10-13 06:00