.NET 帮助 Nswag C#(开发人员如何使用) Curtis Chau 已更新:六月 22, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article API 是当今软件开发环境中的关键,因为它们促进了各种软件系统和组件之间的通信。 为了使开发人员有效地使用 API,必须有详尽且易于理解的文档。 两个可以帮助 C# API 文档工作流程的有效工具是 NSwag C# 和 IronPDF。 这篇文章将讨论如何使用 NSwag 为 .NET Core 生成 API 规范,并使用 IronPDF 从这些规范生成高质量的 PDF 文档。 如何在 C# 中使用 NSwag 使用 Swagger UI 创建 RESTful Web API。 创建一个 C# 控制台应用程序。 安装 NSwag 库。 导入命名空间并创建对象。 将 Swagger JSON 处理为 C# 代码。 执行代码并显示结果。 了解 NSwag .NET Swagger 工具链 NSwag 的创建旨在简化为使用 ASP.NET Web API、ASP.NET Core 或其他 .NET 框架构建的 API 创建 Swagger 规范或 OpenAPI 文档的过程。 NSwag 的功能 生产 Swagger 规格 NSwag 可以通过控制器、模型和 .NET 程序集自动生成 Swagger 规格。 通过检查 API 代码的结构,NSwag 生成涵盖 API 端点、请求/响应格式、身份验证技术等的详细文档。 与 .NET 项目的连接性 开发人员可以通过将 NSwag 与 .NET 项目集成,轻松将 Swagger 生成包含在其开发流程中。 开发人员可以通过将 NSwag 添加到 .NET Core 项目中来确保文档与代码库同步,这将在每次构建项目时自动生成 Swagger 规范。 个性化和扩展 通过 NSwag 提供的广泛定制选项,开发人员可以轻松调整生成的 Swagger 规范以满足其独特需求。 开发人员可以通过配置设置和注释控制生成文档的许多组件,包括响应代码、参数说明和路由命名约定。 NSwag 入门 在 C# 控制台应用中设置 NSwag NSwag 基础类库包括核心、注释和代码生成命名空间,可通过从 NuGet 安装来获取。 了解如何在 C# 应用程序中集成 NSwag 以生成代码和 Swagger 规格,以及 NSwag 如何提高开发过程的效率。 在 Windows 控制台和窗体中实现 NSwag 通过自动化客户端生成,开发人员可以通过将 NSwag 集成到 Windows 桌面应用程序中,在桌面应用内直接高效地产生访问 API 的代码。 在开发与在线服务或 RESTful API 通信的桌面应用程序时,这非常有用。 NSwag 可用于 Web 应用程序,以为内部 API 生成 API 文档,为使用外部 API 生成客户端代码。这有助于开发人员保持应用程序前端和后端组件的一致性。 NSwag C# 示例 以下是一个示例代码,显示如何使用 NSwag 生成 C# 客户端代码: using NSwag.CodeGeneration.CSharp; using NSwag; using System.Reflection; using System.CodeDom.Compiler; using Microsoft.CodeAnalysis; using System.Net.Http; using System.IO; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { using (var wclient = new System.Net.WebClient()) { // Create JSON file data from the Swagger .NET Core web API var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json")); var settings = new CSharpClientGeneratorSettings { ClassName = "Weather", CSharpGeneratorSettings = { Namespace = "Demo" } }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var assembly = CompileCode(code); var clientType = assembly.GetType("Demo.WeatherClient"); // Replace with your actual client class name using (var httpClient = new HttpClient()) { var client = (IApiClient)Activator.CreateInstance(clientType, httpClient); var result = await client.GetWeatherForecastAsync(); foreach (var item in result) { Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}"); } } } } static Assembly CompileCode(string code) { using (var memoryStream = new MemoryStream()) { var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location); var references = new List<MetadataReference> { MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Private.CoreLib.dll")) }; var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient") .WithOptions(new Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) .AddReferences(references) .AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)); var emitResult = compilation.Emit(memoryStream); if (!emitResult.Success) { Console.WriteLine("Compilation errors:"); foreach (var diagnostic in emitResult.Diagnostics) { Console.WriteLine(diagnostic); } return null; } memoryStream.Seek(0, SeekOrigin.Begin); return Assembly.Load(memoryStream.ToArray()); } } public interface IApiClient { // Replace with your actual method name and return type Task<List<WeatherForecast>> GetWeatherForecastAsync(); } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF { get; set; } public string Summary { get; set; } } } using NSwag.CodeGeneration.CSharp; using NSwag; using System.Reflection; using System.CodeDom.Compiler; using Microsoft.CodeAnalysis; using System.Net.Http; using System.IO; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { using (var wclient = new System.Net.WebClient()) { // Create JSON file data from the Swagger .NET Core web API var document = await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json")); var settings = new CSharpClientGeneratorSettings { ClassName = "Weather", CSharpGeneratorSettings = { Namespace = "Demo" } }; var generator = new CSharpClientGenerator(document, settings); var code = generator.GenerateFile(); var assembly = CompileCode(code); var clientType = assembly.GetType("Demo.WeatherClient"); // Replace with your actual client class name using (var httpClient = new HttpClient()) { var client = (IApiClient)Activator.CreateInstance(clientType, httpClient); var result = await client.GetWeatherForecastAsync(); foreach (var item in result) { Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}"); } } } } static Assembly CompileCode(string code) { using (var memoryStream = new MemoryStream()) { var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location); var references = new List<MetadataReference> { MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Private.CoreLib.dll")) }; var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient") .WithOptions(new Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) .AddReferences(references) .AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)); var emitResult = compilation.Emit(memoryStream); if (!emitResult.Success) { Console.WriteLine("Compilation errors:"); foreach (var diagnostic in emitResult.Diagnostics) { Console.WriteLine(diagnostic); } return null; } memoryStream.Seek(0, SeekOrigin.Begin); return Assembly.Load(memoryStream.ToArray()); } } public interface IApiClient { // Replace with your actual method name and return type Task<List<WeatherForecast>> GetWeatherForecastAsync(); } public class WeatherForecast { public DateTime Date { get; set; } public int TemperatureC { get; set; } public int TemperatureF { get; set; } public string Summary { get; set; } } } Imports NSwag.CodeGeneration.CSharp Imports NSwag Imports System.Reflection Imports System.CodeDom.Compiler Imports Microsoft.CodeAnalysis Imports System.Net.Http Imports System.IO Imports System.Collections.Generic Imports System.Threading.Tasks Friend Class Program Shared Async Function Main(ByVal args() As String) As Task Using wclient = New System.Net.WebClient() ' Create JSON file data from the Swagger .NET Core web API Dim document = Await OpenApiDocument.FromJsonAsync(wclient.DownloadString("http://localhost:5013/swagger/v1/swagger.json")) Dim settings = New CSharpClientGeneratorSettings With { .ClassName = "Weather", .CSharpGeneratorSettings = { [Namespace] = "Demo" } } Dim generator = New CSharpClientGenerator(document, settings) Dim code = generator.GenerateFile() Dim assembly = CompileCode(code) Dim clientType = assembly.GetType("Demo.WeatherClient") ' Replace with your actual client class name Using httpClient As New HttpClient() Dim client = DirectCast(Activator.CreateInstance(clientType, httpClient), IApiClient) Dim result = Await client.GetWeatherForecastAsync() For Each item In result Console.WriteLine($"Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}") Next item End Using End Using End Function Private Shared Function CompileCode(ByVal code As String) As System.Reflection.Assembly Using memoryStream As New MemoryStream() Dim assemblyPath = Path.GetDirectoryName(GetType(Object).Assembly.Location) Dim references = New List(Of MetadataReference) From {MetadataReference.CreateFromFile(GetType(Object).GetTypeInfo().Assembly.Location), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "Microsoft.AspNetCore.Mvc.dll")), MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Private.CoreLib.dll"))} Dim compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("ApiClient").WithOptions(New Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)).AddReferences(references).AddSyntaxTrees(Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(code)) Dim emitResult = compilation.Emit(memoryStream) If Not emitResult.Success Then Console.WriteLine("Compilation errors:") For Each diagnostic In emitResult.Diagnostics Console.WriteLine(diagnostic) Next diagnostic Return Nothing End If memoryStream.Seek(0, SeekOrigin.Begin) Return System.Reflection.Assembly.Load(memoryStream.ToArray()) End Using End Function Public Interface IApiClient ' Replace with your actual method name and return type Function GetWeatherForecastAsync() As Task(Of List(Of WeatherForecast)) End Interface Public Class WeatherForecast Public Property [Date]() As DateTime Public Property TemperatureC() As Integer Public Property TemperatureF() As Integer Public Property Summary() As String End Class End Class $vbLabelText $csharpLabel 对于我们想要使用的 API,我们指定了 Swagger 规范的 URL(swaggerUrl)。 然后定义生成和执行到 DLL 程序集的客户端代码。 OpenApiDocument 用于通过 FromJsonAsync 从给定 URL 异步加载 Swagger 文档。 要更改生成的客户端代码,我们调整代码生成器的设置(CSharpClientGeneratorSettings)。 在此示例中,生成的客户端代码的类名和命名空间被指定。 从加载的 Swagger 文档中,我们构造 CSharpClientGenerator 的一个实例并使用它生成客户端代码。 生成的客户端代码被保存到指定的输出路径。 我们响应程序过程中可能出现的任何异常或错误,在控制台上显示相关通知。 NSwag 操作 生成客户端代码 NSwag 可以使用 Swagger 规范生成多种语言的客户端代码,包括 Java、TypeScript 和 C#。 这使得开发人员可以轻松在他们的应用程序中使用 API。 生成服务器代码 NSwag 还可以使用 Swagger 规范作为基础生成服务器代码,例如 ASP.NET Core 控制器。 这有助于快速为 API 实现搭建服务器端代码。 生成交互式 API 文档 给定一个 Swagger 规范,NSwag 可以生成交互式 API 文档,例如 Swagger UI。 这种文档提供了一个易于使用的界面,用于浏览和测试 API 端点。 生成代理类 为了与基于 SOAP 的 API 集成,NSwag 可以生成代理类。 这使得程序员能够使用生成的客户端代码从应用程序内部访问 SOAP 服务。 验证 Swagger 规范 NSwag 具备验证 Swagger 规范的能力,以确保它们遵循 OpenAPI/Swagger 标准。 这使得开发人员更容易发现 API 文档中的任何错误或差异。 将 NSwag 与 IronPDF 集成 开发人员可以通过将 NSwag 与 IronPDF 集成来利用这两种技术的优势,从而改善 API 文档的工作流程。 开发人员可以使用 NSwag 生成 Swagger 规范,IronPDF 讲这些规范转换为 PDF,从而生成方便获取和分享的详尽、可离线使用的 .NET Web API 文档。 集成过程包括以下步骤: IronPDF在HTML到PDF转换方面表现出色,确保精确保留原始布局和样式。 它非常适合从基于Web的内容中创建PDF,如报告、发票和文档。 利用对HTML文件、URL和原始HTML字符串的支持,IronPDF轻松生成高质量的PDF文档。 using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); // 1. Convert HTML String to PDF var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"; var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent); pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf"); // 2. Convert HTML File to PDF var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath); pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf"); // 3. Convert URL to PDF var url = "http://ironpdf.com"; // Specify the URL var pdfFromUrl = renderer.RenderUrlAsPdf(url); pdfFromUrl.SaveAs("URLToPDF.pdf"); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) Dim renderer = New ChromePdfRenderer() ' 1. Convert HTML String to PDF Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>" Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent) pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf") ' 2. Convert HTML File to PDF Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath) pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf") ' 3. Convert URL to PDF Dim url = "http://ironpdf.com" ' Specify the URL Dim pdfFromUrl = renderer.RenderUrlAsPdf(url) pdfFromUrl.SaveAs("URLToPDF.pdf") End Sub End Class $vbLabelText $csharpLabel 安装 IronPDF。 启动Visual Studio项目。 选择“工具”>“NuGet包管理器”>“包管理器控制台”。 打开你的命令提示符,在包管理控制台中输入以下命令: Install-Package IronPdf 或者,您可以使用NuGet包管理器为解决方案安装IronPDF。 从搜索结果中浏览并选择 IronPDF 包,然后点击“安装”选项。 Visual Studio会代您执行下载和安装。 NuGet 将安装 IronPDF 包以及项目所需的任何依赖项。 安装完成后,便可以用于项目,调用 IronPDF。 通过NuGet网站安装 有关 IronPDF 的功能、兼容性和可用下载的更多信息,请访问 NuGet 的 IronPDF 页面。 使用DLL安装 或者,您可以使用其 DLL 文件将 IronPDF 直接集成到您的项目中。要下载包含 DLL 的 ZIP 文件,请点击 IronPDF 下载链接。 解压缩文件并将DLL添加到您的项目中。 实施逻辑 通过使用 NSwag,开发人员可以创造 API 的文档和客户端代码,用于使用 API 更快;在与 IronPDF 结合使用 CodeGeneration.CSharp 的情况下。 集成工作流程包括以下步骤: 生成客户端代码: 使用 NSwag.CodeGeneration.CSharp 从 Swagger 规范生成 C# 客户端代码。 此步骤会自动创建与 API 端点通信的客户端类和方法。 利用 NSwag 获取数据: 使用 CodeGeneration.CSharp 从 Swagger 规范生成 JSON 文档。 在此阶段,请求/响应格式、身份验证方法和 API 客户端端点被创建成人类可读的文档。 将 JSON 转换为 PDF: 使用 IronPDF 将生成的代码结果转换为 PDF 文档。 在此阶段,将 HTML 文本转换为润饰好的 PDF 文档,以便于共享和分发。 改进 PDF 文档: 使用 IronPDF 向 PDF 文档添加更多内容,例如标题、页脚、水印或唯一品牌标识。 此阶段允许开发人员定制 PDF 文档的外观和品牌化,以适应他们的喜好。 using IronPdf; using System.Text; using System.Collections.Generic; StringBuilder sb = new StringBuilder(); foreach (var item in result) { sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>"); } var renderer = new HtmlToPdf(); var pdf = renderer.RenderHtmlAsPdf(sb.ToString()); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF generated successfully!"); Console.ReadKey(); using IronPdf; using System.Text; using System.Collections.Generic; StringBuilder sb = new StringBuilder(); foreach (var item in result) { sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>"); } var renderer = new HtmlToPdf(); var pdf = renderer.RenderHtmlAsPdf(sb.ToString()); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF generated successfully!"); Console.ReadKey(); Imports IronPdf Imports System.Text Imports System.Collections.Generic Private sb As New StringBuilder() For Each item In result sb.Append($"<p>Date: {item.Date} F: {item.TemperatureF} C: {item.TemperatureC} Summary: {item.Summary}</p>") Next item Dim renderer = New HtmlToPdf() Dim pdf = renderer.RenderHtmlAsPdf(sb.ToString()) pdf.SaveAs("output.pdf") Console.WriteLine("PDF generated successfully!") Console.ReadKey() $vbLabelText $csharpLabel 上面的代码通过循环访问结果对象中的获取到的数据,并将字段 Date、TemperatureF、TemperatureC 和 Summary 附加到段落中。然后指定 PDF 的输出文件路径,然后通知您 PDF 已成功生成。 下面是上述代码的结果。 结论 CodeGeneration NSwag 技术,例如 CSharp 和 IronPDF 结合良好,以简化客户端代码生成和 API 文档过程。 通过将这些工具集成到 C# 应用程序中,开发人员可以加速 API 驱动解决方案的创建、自动化生成 API 文档,并产出具有专业外观的 PDF 文件。 NSwag.CodeGeneration.CSharp 与 IronPDF 为开发人员提供了一个完整的解决方案,不论他们是在开发桌面、Web 或基于云的应用程序时,均可有效地记录 API 并在 C# 中生成客户端代码。 Lite 包括永久式许可证、一年的软件维护和库的升级。 IronPDF提供具有重新分发和时间限制的免费许可证。用户可以在试用期期间评估解决方案,而不必看到水印。 有关价格和许可证的更多信息,请参见 IronPDF 的许可信息。 有关 Iron Software 的产品库的更多信息,请访问 Iron Software 库页面。 常见问题解答 NSwag如何帮助生成C#中的API规格? NSwag可以自动生成API规格,称为Swagger或OpenAPI文档,来自.NET Core项目。这确保API文档始终与代码库同步。 将Swagger规格转换为PDF文档的过程是什么? 要将Swagger规格转换为PDF文档,可以使用IronPDF。首先,使用NSwag生成Swagger规格,然后利用IronPDF将这些规格的HTML内容转换为高质量的PDF。 如何将NSwag集成到.NET项目中? 将NSwag集成到.NET项目中涉及通过NuGet安装NSwag库,配置它以在构建过程中生成Swagger规格,并使用生成的规格进行文档编制和代码生成。 NSwag可以从Swagger规格中生成客户端和服务器端代码吗? 可以,NSwag可以从单个Swagger规格中生成如C#、Java和TypeScript语言的客户端代码以及服务器端代码如ASP.NET Core控制器。 IronPDF如何增强API文档工作流程? IronPDF通过允许开发人员将基于HTML的API文档转换为专业的、可分享的PDF文档,从而增强API文档工作流程,使信息可离线访问。 在Visual Studio项目中使用IronPDF需要哪些步骤? 要在Visual Studio项目中使用IronPDF,可以通过NuGet包管理器搜索IronPDF并点击“安装”来安装,或使用包管理器控制台与命令Install-Package IronPdf。 如何使用NSwag生成交互式API文档? NSwag可以通过生成Swagger UI来生成交互式API文档,这为直接在浏览器中浏览和测试API端点提供了用户友好的界面。 使用NSwag进行API文档的好处是什么? NSwag自动化了API文档的生成,确保其始终与代码库同步。它还支持创建交互式文档和客户端代码,简化了开发过程。 IronPDF如何利用HTML内容创建PDF? IronPDF使用其渲染引擎将包括CSS和JavaScript在内的HTML内容转换为PDF格式,使其成为从基于网页的内容创建精确的、离线就绪文档的理想选择。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 Dapper C#(开发人员如何使用)Flunt C#(开发人员如何使用)
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多