在 .NET Core 上使用 Microsoft XML 序列化程序生成器

本教程介绍如何在 C# 应用程序中使用 Microsoft XML 序列化程序生成器。 在本教程的过程中,你将了解:

  • 如何创建 .NET 控制台应用
  • 如何添加对 Microsoft.XmlSerializer.Generator 包的引用
  • 如何编辑 MyApp.csproj 以添加依赖项
  • 如何添加类和 XmlSerializer
  • 如何生成和运行应用程序

与 .NET Framework 的 Xml 序列化程序生成器(sgen.exe) 一样, Microsoft.XmlSerializer.Generator NuGet 包 等效于 .NET Core/.NET 5+ 和 .NET Standard 项目。 它为程序集中包含的类型创建 XML 序列化程序集,以便在使用 XmlSerializer 对这些类型的对象进行序列化或反序列化时提高 XML 序列化的启动性能。

先决条件

若要完成本教程,

小窍门

需要安装代码编辑器? 请尝试 Visual Studio

以下说明演示如何在 .NET Core 控制台应用程序中使用 XML 序列化程序生成器。

创建应用

  1. 打开命令提示符并创建名为 MyApp 的文件夹。 导航到创建的文件夹并键入以下命令:

    dotnet new console
    
  2. 添加对 Microsoft.XmlSerializer.Generator 包的引用。

    dotnet add package Microsoft.XmlSerializer.Generator -v 8.0.0
    

    运行此命令后,以下行将添加到 MyApp.csproj 项目文件中:

    <ItemGroup>
       <PackageReference Include="Microsoft.XmlSerializer.Generator" Version="8.0.0" />
    </ItemGroup>
    
  3. 通过将以下 ItemGroup 部分添加到项目文件来添加工具引用。

    <ItemGroup>
       <DotNetCliToolReference Include="Microsoft.XmlSerializer.Generator" Version="8.0.0" />
    </ItemGroup>
    
  4. 在文本编辑器中打开 Program.cs 。 在 Program.cs 中添加名为 MyClass类。

    public class MyClass
    {
       public int Value;
    }
    
  5. 创建一个 XmlSerializer 用于 MyClass。 将以下行添加到 Program.cs 文件:

    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
    
  6. 生成并运行应用程序。 通过dotnet run运行应用程序:

    dotnet run
    

    应用会在运行时自动加载和使用预生成的序列化程序。

    小窍门

    dotnet run 调用 dotnet build 以确保生成目标已生成,然后调用 dotnet <assembly.dll> 以运行目标应用程序。

重要

本教程中显示的用于运行应用程序的命令和步骤仅在开发期间使用。 准备好部署应用后,请查看 .NET 应用和命令的不同dotnet publish

如果一切成功,则会在输出文件夹中生成名为 MyApp.XmlSerializers.dll 的程序集。

祝贺! 你只需:

  • 创建了 .NET 控制台应用。
  • 添加了对 Microsoft.XmlSerializer.Generator 包的引用。
  • 编辑了 MyApp.csproj 以添加依赖项。
  • 添加了一个类和一个XmlSerializer。
  • 生成并运行应用程序。

进一步自定义 XML 序列化程序集(可选)

将以下 XML 添加到 MyApp.csproj 以进一步自定义程序集生成:

<PropertyGroup>
    <SGenReferences>C:\myfolder\abc.dll;C:\myfolder\def.dll</SGenReferences>
    <SGenTypes>MyApp.MyClass;MyApp.MyClass1</SGenTypes>
    <SGenProxyTypes>false</SGenProxyTypes>
    <SGenVerbose>true</SGenVerbose>
    <SGenKeyFile>mykey.snk</SGenKeyFile>
    <SGenDelaySign>true</SGenDelaySign>
</PropertyGroup>