在 .NET Core 上使用 Microsoft XML 序列化程序生成器
本教程介绍如何在 C# .NET Core 应用程序中使用 Microsoft XML 序列化程序生成器。 在本教程中可学习:
- 如何创建 .NET Core 应用
- 如何添加 Microsoft.XmlSerializer.Generator 包引用
- 如何编辑 MyApp.csproj,以添加依赖项
- 如何添加类和 XmlSerializer
- 如何生成并运行应用程序
正如适用于 .NET Framework 的 Xml Serializer Generator (sgen.exe),Microsoft.XmlSerializer.Generator NuGet 包 是适用于 .NET Core 和 .NET 标准项目的等效项。 它为程序集中包含的类型创建 XML 序列化程序集,从而提高使用 XmlSerializer 序列化或反序列化这些类型对象时,XML 序列化的启动性能。
先决条件
完成本教程:
- .NET Core 2.1 SDK 或更高版本。
- 最喜爱的代码编辑器。
提示
需要安装代码编辑器? 试用 Visual Studio!
在 .NET Core 控制台应用程序中使用 Microsoft XML 序列化程序生成器
以下说明将展示如何在 .NET Core 控制台应用程序中使用 XML 序列化程序生成器。
创建 .NET Core 控制台应用程序
打开命令提示符,创建一个名为“MyApp”的文件夹。 导航到创建的文件夹,并键入以下命令:
dotnet new console
在 MyApp 项目中向 Microsoft.XmlSerializer.Generator 包添加引用
使用 dotnet add package
命令在项目中添加引用。
类型:
dotnet add package Microsoft.XmlSerializer.Generator -v 1.0.0
添加包后,验证对 MyApp.csproj 的更改
打开代码编辑器并开始操作! 仍从生成了应用的 MyApp 目录中进行操作。
在文本编辑器中打开 MyApp.csproj。
运行 dotnet add package
命令后,以下行会添加到 MyApp.csproj 项目文件中:
<ItemGroup>
<PackageReference Include="Microsoft.XmlSerializer.Generator" Version="1.0.0" />
</ItemGroup>
为 .NET CLI 工具支持添加其他 ItemGroup 部分
在已检查的 ItemGroup
部分后添加以下行:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.XmlSerializer.Generator" Version="1.0.0" />
</ItemGroup>
在应用程序中添加类
在文本编辑器中打开 Program.cs。 在 Program.cs 中添加名为“MyClass”的类 。
public class MyClass
{
public int Value;
}
为 MyClass 创建 XmlSerializer
在 Main 中添加以下行,为 MyClass 创建 XmlSerializer
:
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
编译和运行应用程序
还是在 MyApp 文件夹中,通过 dotnet run
运行应用程序,它会在运行时自动加载和使用预生成的序列化程序。
在控制台窗口中键入以下命令:
dotnet run
注意
dotnet run
调用 dotnet build
来确保已生成要生成的目标,然后调用 dotnet <assembly.dll>
运行目标应用程序。
重要
本教程中用来运行应用程序的命令和步骤仅用于开发过程。 准备好部署应用后,查看适用于 .NET Core 应用的不同部署策略和 dotnet publish
命令。
如果一切顺利,则会在输出文件夹中生成名为“MyApp.XmlSerializers.dll”的程序集。
祝贺你! 你刚才已完成:
- 创建 .NET Core 应用。
- 向 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>