跳至頁尾內容
開發者更新

Microsoft Logging C#(開發者的工作原理)

記錄是C#中的一項基本技術,它在應用程式運行時捕獲資訊、警告、錯誤以及其他相關的資料。 它可以幫助開發者觀察程式的行為、排查問題,以及瞭解應用程式在不同情境下的運作方式。 C#提供了一些記錄框架和套件,使記錄任務更為簡單。 Microsoft.Extensions.Logging 是 .NET Core 應用程式中最常用的記錄框架之一。 適用於 .NET Core 的 NuGet 套件 Microsoft.Extensions.Logging 為我們提供了多個延伸方法,以幫助我們撰寫不同的記錄層級。 在本文中,我們將更深入瞭解 MS 記錄。

如何設置 MS 記錄

  1. 建立一個新的 Visual Studio 專案。
  2. NuGet 上的 Microsoft.Extensions.Logging 套件頁面 安裝 Microsoft.Extensions.Logging 程式庫。
  3. 向控制台注入 Logger 介面。
  4. 配置記錄輸出。
  5. 在不同層級撰寫記錄。
  6. 執行程式碼。

步驟1:建立一個新的 Visual Studio 專案

首先,在 Visual Studio 中建立一個新的專案。

步驟2:安裝 Microsoft.Extensions.Logging 程式庫

using NuGet 上的 Microsoft.Extensions.Logging 套件頁面 安裝 Microsoft.Extensions.Logging 程式庫。 此程式庫為 .NET Core 應用程式中的記錄提供所需的類別和方法。

步驟3:向控制台注入 Logger 介面

若要使用記錄功能,您需要將 ILogger 介面的實例注入您的控制台應用程式中。 可以通過使用一個記錄工廠來完成這一點。

using Microsoft.Extensions.Logging;

// Create a logger for the application
ILogger<Program> logger = LoggerFactory.Create(builder =>
{
    builder.AddConsole(); // Adding console logging
}).CreateLogger<Program>();
using Microsoft.Extensions.Logging;

// Create a logger for the application
ILogger<Program> logger = LoggerFactory.Create(builder =>
{
    builder.AddConsole(); // Adding console logging
}).CreateLogger<Program>();
Imports Microsoft.Extensions.Logging

' Create a logger for the application
Private logger As ILogger(Of Program) = LoggerFactory.Create(Sub(builder)
	builder.AddConsole() ' Adding console logging
End Sub).CreateLogger<Program>()
$vbLabelText   $csharpLabel

步驟4:配置記錄輸出

配置記錄應該如何輸出。 可以通過向記錄器構建器新增一個或多個記錄提供者來完成這一點。 最常用的提供者是控制台記錄器,它將記錄輸出到控制台。

builder.AddConsole(options =>
{
    options.TimestampFormat = "[HH:mm:ss] "; // Setting the timestamp format for logs
});
builder.AddConsole(options =>
{
    options.TimestampFormat = "[HH:mm:ss] "; // Setting the timestamp format for logs
});
builder.AddConsole(Sub(options)
	options.TimestampFormat = "[HH:mm:ss] " ' Setting the timestamp format for logs
End Sub)
$vbLabelText   $csharpLabel

步驟5:在不同層級撰寫記錄

現在可以使用記錄器物件在不同層級撰寫記錄。 可用的記錄方法有 LogError()LogCritical()

logger.LogDebug("This is a debug message");
logger.LogInformation("This is an information message");
logger.LogWarning("This is a warning message");
logger.LogError("This is an error message");
logger.LogCritical("This is a critical message");
logger.LogDebug("This is a debug message");
logger.LogInformation("This is an information message");
logger.LogWarning("This is a warning message");
logger.LogError("This is an error message");
logger.LogCritical("This is a critical message");
logger.LogDebug("This is a debug message")
logger.LogInformation("This is an information message")
logger.LogWarning("This is a warning message")
logger.LogError("This is an error message")
logger.LogCritical("This is a critical message")
$vbLabelText   $csharpLabel

步驟6:運行程式碼

最後,運行您的程式碼,並根據配置的設定觀察記錄的輸出。

就這樣! 您已經成功在您的 C# 應用程式中設置並使用 MS 記錄。

安裝 MS 記錄

若要安裝 MS 記錄,請遵循以下步驟:

  1. 啟動 Visual Studio。
  2. 導航至 工具 > NuGet 套件管理器 > 套件管理器控制台
  3. 在套件管理器控制台執行以下命令:

    Install-Package Microsoft.Extensions.Logging
  4. Enter 以執行命令。 這將下載並安裝套件 Microsoft.Extensions.Logging 到您的專案中。

記錄層級

C# 中的 Microsoft.Extensions.Logging 框架提供了多個記錄層級,使開發者能夠根據重要性和嚴重性對記錄資訊進行分類和排序。 這些層級經常用來區分不同型別的資訊,並協助管理記錄的詳細程度。

Microsoft.Extensions.Logging 提供的預設記錄層級如下:

  • Trace: 最詳盡的層級,通常用於提供深層理解程式內部運作的非常詳細的資料。
  • Debug: 除錯資訊對開發和除錯階段有用,但通常在生產環境中不需要。
  • Information: 提供應用程式正常運行時的細節資訊。 通常,程式的正常操作通過這些記錄進行監控。
  • Warning: 指出可能的問題或將來可能需要注意的事項。 用於表示異常或意外情況,可能會導致問題,但不一定會導致程式崩潰。
  • Error: 標示需要立即修復的嚴重問題或錯誤。 通常用於記錄影響應用程式運行的問題。
  • Critical: 最嚴重的狀態,用於記錄需要立即處理以免造成嚴重問題或程式崩潰的關鍵問題。

每個記錄層級都有其特定的用途,可讓開發者管理記錄框架輸出的資料量。 開發者可以根據記錄資料的嚴重性和重要性選擇合適的層級進行資訊記錄。

配置 C# 記錄

以下是一個使用 Microsoft.Extensions.Logging 配置記錄的基本範例:

using Microsoft.Extensions.Logging;
using System;

class Program
{
    // Create a LoggerFactory instance
    private static readonly ILoggerFactory LoggerFactory = LoggerFactory.Create(builder =>
    {
        // Add console logger
        builder.AddConsole();
        // You can add other logging providers here (e.g., AddDebug, AddFile, etc.)
    });

    // Create a logger
    private static readonly ILogger Logger = LoggerFactory.CreateLogger<Program>();

    static void Main(string[] args)
    {
        // Example log messages
        Logger.LogInformation("Information log");
        Logger.LogWarning("Warning log");
        Logger.LogError("Error log");

        try
        {
            // Simulate an exception
            throw new Exception("Exception occurred");
        }
        catch (Exception ex)
        {
            // Log exception details
            Logger.LogError(ex, "Exception log");
        }

        Console.ReadKey(); // Wait for a key press before closing the application
    }
}
using Microsoft.Extensions.Logging;
using System;

class Program
{
    // Create a LoggerFactory instance
    private static readonly ILoggerFactory LoggerFactory = LoggerFactory.Create(builder =>
    {
        // Add console logger
        builder.AddConsole();
        // You can add other logging providers here (e.g., AddDebug, AddFile, etc.)
    });

    // Create a logger
    private static readonly ILogger Logger = LoggerFactory.CreateLogger<Program>();

    static void Main(string[] args)
    {
        // Example log messages
        Logger.LogInformation("Information log");
        Logger.LogWarning("Warning log");
        Logger.LogError("Error log");

        try
        {
            // Simulate an exception
            throw new Exception("Exception occurred");
        }
        catch (Exception ex)
        {
            // Log exception details
            Logger.LogError(ex, "Exception log");
        }

        Console.ReadKey(); // Wait for a key press before closing the application
    }
}
Imports Microsoft.Extensions.Logging
Imports System

Friend Class Program
	' Create a LoggerFactory instance
	Private Shared ReadOnly LoggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
		' Add console logger
		builder.AddConsole()
		' You can add other logging providers here (e.g., AddDebug, AddFile, etc.)
	End Sub)

	' Create a logger
	Private Shared ReadOnly Logger As ILogger = LoggerFactory.CreateLogger(Of Program)()

	Shared Sub Main(ByVal args() As String)
		' Example log messages
		Logger.LogInformation("Information log")
		Logger.LogWarning("Warning log")
		Logger.LogError("Error log")

		Try
			' Simulate an exception
			Throw New Exception("Exception occurred")
		Catch ex As Exception
			' Log exception details
			Logger.LogError(ex, "Exception log")
		End Try

		Console.ReadKey() ' Wait for a key press before closing the application
	End Sub
End Class
$vbLabelText   $csharpLabel

在此範例中,將控制檯記錄器新增到記錄配置中,將記錄寫入控制檯。 然而,Microsoft.Extensions.Logging 提供了多種記錄提供者,包括文件、資料庫記錄或者與其他記錄框架連接。 此外,可以建立自訂記錄提供者,可以根據特定需求格式化記錄。

包含額外的記錄提供者

您可以通過在 Create() 函式內連結相關的方法來新增額外的記錄來源。 例如:

  • 要新增除錯器輸出記錄提供者,請使用 builder.AddDebug()
  • 要新增文件記錄提供者,請使用 builder.AddFile("log.txt")

在 IronPDF 上設置 MSLogging

IronPDF 擅長於 HTML 到 PDF 的轉換,確保精確保留原始布局和樣式。 它非常適合從基於網路的內容(如報告、發票和文件)建立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 中啟用記錄,您可以使用 Microsoft.Extensions.Logging 框架以及 IronPDF 的內建記錄功能。 以下是 IronPDF 中設置記錄的範例:

using Microsoft.Extensions.Logging;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder
                .AddConsole()
                .AddDebug();
        });

        ILogger<Program> logger = loggerFactory.CreateLogger<Program>();

        // Enable logging in IronPDF
        Logger.Log = new LoggerImplementation(logger);

        // Use IronPDF and perform operations
        // ...

        // Example of logging an error in IronPDF
        Logger.Log.Error("An error occurred while processing the PDF");

        // Example of logging a warning in IronPDF
        Logger.Log.Warning("This is a warning message");

        // Example of logging an information message in IronPDF
        Logger.Log.Information("This is an information message");

        // ...

        // Close and dispose resources
        // ...

        // Flush the log messages
        loggerFactory.Dispose();
    }
}
using Microsoft.Extensions.Logging;
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder
                .AddConsole()
                .AddDebug();
        });

        ILogger<Program> logger = loggerFactory.CreateLogger<Program>();

        // Enable logging in IronPDF
        Logger.Log = new LoggerImplementation(logger);

        // Use IronPDF and perform operations
        // ...

        // Example of logging an error in IronPDF
        Logger.Log.Error("An error occurred while processing the PDF");

        // Example of logging a warning in IronPDF
        Logger.Log.Warning("This is a warning message");

        // Example of logging an information message in IronPDF
        Logger.Log.Information("This is an information message");

        // ...

        // Close and dispose resources
        // ...

        // Flush the log messages
        loggerFactory.Dispose();
    }
}
Imports Microsoft.Extensions.Logging
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim loggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
			builder.AddConsole().AddDebug()
		End Sub)

		Dim logger As ILogger(Of Program) = loggerFactory.CreateLogger(Of Program)()

		' Enable logging in IronPDF
		Logger.Log = New LoggerImplementation(logger)

		' Use IronPDF and perform operations
		' ...

		' Example of logging an error in IronPDF
		Logger.Log.Error("An error occurred while processing the PDF")

		' Example of logging a warning in IronPDF
		Logger.Log.Warning("This is a warning message")

		' Example of logging an information message in IronPDF
		Logger.Log.Information("This is an information message")

		' ...

		' Close and dispose resources
		' ...

		' Flush the log messages
		loggerFactory.Dispose()
	End Sub
End Class
$vbLabelText   $csharpLabel

在此範例中,我們從 Microsoft.Extensions.Logging 框架中建立了一個 LoggerFactory 的實例。 接著,我們為 Program 類別的工廠建立了一個記錄器。

為了在 IronPDF 中啟用記錄,我們將靜態 Logger.Log 屬性設定為一個 LoggerImplementation 的實例,該實例從 loggerFactory 中獲取記錄器。 透過這種配置,您可以使用 Logger.Log 方法在 IronPDF 中記錄訊息。

在確保 IronPDF 所需的操作完成後,您可以關閉並釋放資源,然後通過釋放 loggerFactory 來刷新記錄訊息。

注意:請確保您已經為 Microsoft.Extensions.Logging 和 IronPDF 安裝了必要的依賴項和套件。

安裝IronPDF

若要安裝 IronPDF 程式庫,請遵循以下步驟:

  1. 在 Visual Studio 中開啟套件管理器控制台。
  2. 輸入以下命令以使用 NuGet 安裝 IronPDF 程式庫:
Install-Package IronPdf

或者,您可以透過在終端中運行以下命令來使用 .NET CLI:

Install-Package IronPdf
  1. Enter 以執行命令。 這將下載並安裝 IronPDF 套件到您的專案中。

也可以使用 NuGet 套件管理器 GUI 安裝 IronPDF 程式庫。 只需在瀏覽選項卡中搜尋套件" IronPDF",從列表中選擇所需的套件,並安裝最新版的 IronPDF。

安裝完成後,您就可以在您的專案中開始使用 IronPDF 程式庫。

使用 IronPDF 設置 MS Logging

截至 2022 年 1 月,IronPDF 不能直接與 Microsoft.Extensions.Logging 交互,且不原生支持。 IronPDF 主要用作在 C# 程式中建立和修改 PDF 的工具。

然而,您仍然可以使用 Microsoft.Extensions 來整合記錄。 透過將記錄整合到您的 C# 程式中,與 IronPDF 一起使用,您可以管理和記錄 PDF 生成相關事件、應用程式工作流程,或者在使用 IronPDF 時發生的問題。

以下是如何使用 Microsoft.Extensions 將記錄與 IronPDF 整合的範例:

using Microsoft.Extensions.Logging;
using IronPdf;
using System;

class Program
{
    private static readonly ILoggerFactory LoggerFactory = LoggerFactory.Create(builder =>
    {
        builder.AddConsole(); // Add other logging providers as needed
    });

    private static readonly ILogger Logger = LoggerFactory.CreateLogger<Program>();

    static void Main(string[] args)
    {
        try
        {
            // Your IronPDF code for PDF generation or manipulation
            var Renderer = new IronPdf.HtmlToPdf();
            var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
            PDF.SaveAs("Output.pdf");
            Logger.LogInformation("PDF created successfully.");
        }
        catch (Exception ex)
        {
            Logger.LogError(ex, "An error occurred while generating the PDF.");
        }

        Console.ReadKey(); // Wait for a key press before closing the application
    }
}
using Microsoft.Extensions.Logging;
using IronPdf;
using System;

class Program
{
    private static readonly ILoggerFactory LoggerFactory = LoggerFactory.Create(builder =>
    {
        builder.AddConsole(); // Add other logging providers as needed
    });

    private static readonly ILogger Logger = LoggerFactory.CreateLogger<Program>();

    static void Main(string[] args)
    {
        try
        {
            // Your IronPDF code for PDF generation or manipulation
            var Renderer = new IronPdf.HtmlToPdf();
            var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
            PDF.SaveAs("Output.pdf");
            Logger.LogInformation("PDF created successfully.");
        }
        catch (Exception ex)
        {
            Logger.LogError(ex, "An error occurred while generating the PDF.");
        }

        Console.ReadKey(); // Wait for a key press before closing the application
    }
}
Imports Microsoft.Extensions.Logging
Imports IronPdf
Imports System

Friend Class Program
	Private Shared ReadOnly LoggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
		builder.AddConsole() ' Add other logging providers as needed
	End Sub)

	Private Shared ReadOnly Logger As ILogger = LoggerFactory.CreateLogger(Of Program)()

	Shared Sub Main(ByVal args() As String)
		Try
			' Your IronPDF code for PDF generation or manipulation
			Dim Renderer = New IronPdf.HtmlToPdf()
			Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")
			PDF.SaveAs("Output.pdf")
			Logger.LogInformation("PDF created successfully.")
		Catch ex As Exception
			Logger.LogError(ex, "An error occurred while generating the PDF.")
		End Try

		Console.ReadKey() ' Wait for a key press before closing the application
	End Sub
End Class
$vbLabelText   $csharpLabel

此範例展示了在使用 IronPDF 的 C# 應用程式中設置 Microsoft.Extensions.Logging 的簡單方法。 生成記錄資訊以記錄 PDF 建立成功以及可能發生的任何異常。

請確保根據應用程式特定需求以及 IronPDF 用於 PDF 建立或修改的場景,自訂記錄層級、錯誤處理和訊息。 適當區分各種型別的記錄訊息使用記錄層級可有效進行除錯和監控。

若要進一步了解 IronPDF,請存取 IronPDF 首頁,

結論

總結來說,整合 Microsoft.Extensions.Logging 讓 C# 開發者能夠有效處理記錄任務。 IronPDF 提供全面的記錄功能,能夠徹底記錄、分析和報告應用程式事件、失敗和重要資料。 這增強了應用程式的可靠性、維護性和除錯能力。

IronPDF 提供不同的軟體產品,包括價格為 $999 的 Lite 套裝。 此套裝包含永久授權、升級選項、一年的軟體維護與三十天退款保證。 在浮水印試用期內,您可以探索 IronPDF 的功能。 若要了解 Iron Software 提供的軟體產品,請存取 Iron Software 的官方網站

常見問題

如何在.NET Core應用程式中設置Microsoft.Extensions.Logging?

要在.NET Core應用程式中設置Microsoft.Extensions.Logging,您需要建立一個新的Visual Studio專案,透過NuGet安裝Microsoft.Extensions.Logging套件,將ILogger介面注入您的應用程式,並使用各種提供者配置您的日誌輸出。您還可以將日誌記錄與IronPDF整合,以增強HTML到PDF轉換過程中的能力。

Microsoft.Extensions.Logging中有哪些不同的日誌級別?

Microsoft.Extensions.Logging提供了Trace、Debug、Information、Warning、Error和Critical等日誌級別。這些級別幫助開發人員根據嚴重性和重要性分類日誌消息。

如何在.NET Core應用程式中注入ILogger介面?

在.NET Core應用程式中,您可以使用依賴注入來注入ILogger介面。這涉及在您的Startup類中配置服務容器以包含日誌記錄服務,然後將ILogger注入到需要日誌記錄的類中,其中T是型別類別。

IronPDF可以與Microsoft.Extensions.Logging框架一起使用嗎?

是的,IronPDF可以與Microsoft.Extensions.Logging整合。通過設置日誌記錄器,您可以使用IronPDF的內建功能和日誌記錄功能來跟蹤和管理PDF生成過程中的應用程式事件和問題。

如何為Microsoft.Extensions.Logging配置日誌輸出?

您可以透過將日誌記錄提供者新增到日誌記錄器生成器來配置日誌輸出。例如,使用builder.AddConsole()配置控制台輸出,使用builder.AddDebug()builder.AddFile()可將日誌重定向到其他目的地。

在應用程式開發中,日誌記錄有什麼用途?

在應用程式開發中,日誌記錄有助於監視應用程式行為、診斷問題並了解在不同情境中的應用程式功能。它對於除錯和維護應用程式的可靠性至關重要,特別是在整合像IronPDF這樣的工具來進行特定任務(如HTML到PDF轉換)時。

使用C#將HTML轉換為PDF涉及哪些步驟?

要使用C#將HTML轉換為PDF,您可以使用IronPDF。首先,確保透過NuGet安裝IronPDF。然後,使用IronPDF的API方法,例如RenderHtmlAsPdf,將HTML字串或檔案轉換為PDF,同時利用日誌記錄來監控過程。

在專案中整合日誌記錄與IronPDF有哪些好處?

在專案中整合日誌記錄與IronPDF,可以更好地監控和除錯PDF生成過程。開發人員可以跟踪應用程式事件、錯誤和性能問題,從而提高可靠性並簡化故障排除。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話