Get Started with OCR in C# and VB.NET

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR est une bibliothèque logicielle C# permettant aux développeurs de logiciels de la plateforme .NET de reconnaître et de lire du texte à partir d'images et de documents PDF. Il s'agit d'une bibliothèque OCR purement .NET utilisant le moteur Tesseract le plus avancé que l'on connaisse, où que ce soit.

Installation

Installer avec NuGet Package Manager

Installez IronOcr dans Visual Studio ou en ligne de commande avec le gestionnaire de paquets NuGet. Dans Visual Studio, accédez à la console avec :

  • Outils ->
  • Gestionnaire de paquets NuGet ->
  • Console de gestion des paquets
Install-Package IronOcr

Et consultez IronOcr sur NuGet pour en savoir plus sur les mises à jour de versions et l'installation.

Il existe d'autres Packages NuGet IronOcr disponibles pour différentes plateformes :

IronOcr.Extensions.AdvancedScan pour Linux et macOS

Ce pack est destiné aux utilisateurs qui utilisent Linux et Mac et qui souhaitent également bénéficier des fonctionnalités avancées pour IronOcr.

Dépannage

Avec la nouvelle mise à jour de ce paquet, IronOcr combine les dépendances OpenCV au sein du paquet pour le rationaliser comme tel, si les développeurs qui importent actuellement les dépendances OpenCV obtiennent l'erreur suivante.

The type of namespace name `OpenCvSharp` could not be found(are you missing a using directive or an assembly reference)

Vous pouvez supprimer les espaces de noms OpenCV en toute sécurité et le problème sera résolu.

Télécharger l'IronOCR .ZIP

Vous pouvez également choisir de télécharger IronOcr via un fichier .ZIP à la place. Cliquez pour télécharger directement la DLL. Une fois le fichier .zip téléchargé :

Instructions pour l'installation de .NET Framework 4.0+:

  • Inclure la dll IronOcr.dll dans le dossier net40 dans votre projet
  • Ajoutez ensuite les références de l'Assemblée à :

    • Configuration.du.système
    • System.Drawing
    • System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Inclure la dll IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Puis ajoutez une référence de paquet NuGet à :

    • System.Drawing.Common 4.7 ou supérieur

Télécharger le programme d'installation d'IronOCR (Windows uniquement)

Une autre option consiste à télécharger notre programme d'installation IronOcr qui installera toutes les ressources requises pour qu'IronOCR fonctionne prêt à l'emploi. N'oubliez pas que cette option ne s'applique qu'aux systèmes Windows. Pour télécharger le programme d'installation, veuillez cliquer ici. Une fois le fichier .zip téléchargé :

Instructions pour l'installation de .NET Framework 4.0+:

  • Inclure la dll IronOcr.dll dans le dossier net40 dans votre projet
  • Ajoutez ensuite les références de l'Assemblée à :

    • Configuration.du.système
    • System.Drawing
    • System.Web

Instructions pour .NET Standard & .NET Core 2.0+, & .NET 5

  • Inclure la dll IronOcr.dll dans le dossier netstandard2.0 dans votre projet
  • Puis ajoutez une référence de paquet NuGet à :

    • System.Drawing.Common 4.7 ou supérieur

Pourquoi choisir IronOCR?

IronOCR est une bibliothèque logicielle .NET facile à installer, complète et bien documentée.

Choisissez IronOCR pour obtenir une précision OCR de 99,8 %+ sans avoir recours à des services web externes, à des frais permanents ou à l'envoi de documents confidentiels sur internet.

Pourquoi les développeurs C# choisissent IronOCR plutôt que Vanilla Tesseract:

  • Installation en tant que DLL unique ou NuGet
  • Inclut les moteurs Tesseract 5, 4 et 3 dans la boîte.
  • La précision 99,8 % est nettement supérieure à celle de Tesseract.
  • Vitesse fulgurante et multithreading
  • Compatible avec les applications MVC, WebApp, Desktop, Console et Server
  • Pas d'Exes ou de code C++ à travailler
  • Prise en charge complète de l'OCR des PDF
  • Effectuer l'OCR sur presque n'importe quel fichier image ou PDF
  • Prise en charge complète de .NET Core, Standard et Framework
  • Déploiement sur Windows, Mac, Linux, Azure, Docker, Lambda, AWS
  • Lire les codes-barres et les codes QR
  • Exporter les résultats de l'OCR au format XHTML
  • Exportation de l'OCR vers des documents PDF consultables
  • Prise en charge du multithreading
  • 125 langues internationales toutes gérées via des fichiers NuGet ou OcrData
  • Extraction d'images, de coordonnées, de statistiques et de polices. Pas seulement du texte.
  • Peut être utilisé pour redistribuer Tesseract OCR dans des applications commerciales et propriétaires.

ironOCR se distingue lorsqu'il s'agit de travailler avec des images du monde réel et des documents imparfaits tels que des photographies ou des scans de faible résolution qui peuvent présenter des bruits numériques ou des imperfections

D'autres librairies OCR gratuites pour la plateforme .NET, telles que d'autres API et services web Tesseract .NET, ne sont pas aussi performantes dans ces cas d'utilisation réels.

OCR avec Tesseract 5 - Commencez à coder en C#

L'exemple de code ci-dessous montre à quel point il est facile de lire du texte à partir d'une image à l'aide de C# ou de VB .NET.

OneLiner

:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
$vbLabelText   $csharpLabel

Hello World configurable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Add multiple images
input.LoadImage("images/sample.jpeg");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Add multiple images
input.LoadImage("images/sample.jpeg")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

C# OCR PDF

La même approche peut être utilisée pour extraire du texte de n'importe quel document PDF.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)

' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
$vbLabelText   $csharpLabel

OCR pour les fichiers TIFF multipages

:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Barcodes et QR

L'une des caractéristiques uniques d'IronOcr est qu'il peut lire les codes-barres et les codes QR des documents pendant qu'il scanne le texte. Les instances de la classe OcrResult.OcrBarcode donnent au développeur des informations détaillées sur chaque code-barres scanné.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");

OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
    // type and location properties also exposed
    Console.WriteLine(Barcode.Value);
}
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True

Using input As New OcrInput()
	input.LoadImage("img/Barcode.png")
	
	Dim Result As OcrResult = ocr.Read(input)
	For Each Barcode In Result.Barcodes
		' type and location properties also exposed
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
$vbLabelText   $csharpLabel

OCR sur des zones spécifiques d'images

Toutes les méthodes de numérisation et de lecture d'IronOcr offrent la possibilité de spécifier exactement la partie d'une page ou des pages dont nous souhaitons lire le texte. Ces outils sont très utiles lorsqu'il s'agit de formulaires standardisés et peuvent permettre de gagner beaucoup de temps et d'améliorer l'efficacité.

Pour utiliser les régions de culture, nous devons ajouter une référence système à System.Drawing afin de pouvoir utiliser l'objet System.Drawing.Rectangle.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

input.LoadImage("document.png", contentArea);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
	.X = 215,
	.Y = 1250,
	.Height = 280,
	.Width = 1335
}

input.LoadImage("document.png", contentArea)

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

OCR pour les scans de faible qualité

La classe IronOcr OcrInput peut corriger les scans que le Tesseract normal ne peut pas lire.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Exporter les résultats de l'OCR sous forme de PDF consultable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)

Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Conversion de fichiers TIFF en fichiers PDF interrogeables

:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Exporter les résultats de l'OCR au format HTML

:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");

OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")

Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
$vbLabelText   $csharpLabel

Filtres d'amélioration d'imageOCR

IronOcr fournit des filtres uniques aux objets OcrInput pour améliorer les performances de l'OCR.

Exemple de code d'amélioration d'image

:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Liste des filtres d'images OCR

Les filtres d'entrée visant à améliorer les performances de l'OCR qui sont intégrés à IronOcr comprennent :

  • OcrInput.Rotate(double degrees) - Fait pivoter les images d'un certain nombre de degrés dans le sens des aiguilles d'une montre. Pour une rotation dans le sens inverse des aiguilles d'une montre, utilisez des nombres négatifs.
  • OcrInput.Binarize() - Ce filtre convertit chaque pixel en noir ou en blanc, sans zone intermédiaire, ce qui peut améliorer les performances de l'OCR dans les images à très faible contraste.
  • OcrInput.ToGrayScale() - Convertit chaque pixel en une nuance de gris. Il est possible qu'elle n'améliore pas la précision, mais qu'elle permette de gagner en rapidité.
  • OcrInput.Contrast() - Augmente automatiquement le contraste, ce qui améliore souvent la vitesse et la précision des numérisations à faible contraste.
  • OcrInput.DeNoise() - Supprime le bruit numérique, recommandé uniquement lorsque du bruit est attendu.
  • OcrInput.Invert() - Inverse toutes les couleurs (le blanc devient noir et vice versa).
  • OcrInput.Dilate() - Fait progresser la morphologie, ajoute des pixels aux limites de l'objet, à l'opposé d'Erode.
  • OcrInput.Erode() - Fait progresser la morphologie, supprime les pixels des limites de l'objet, à l'opposé de Dilate.
  • OcrInput.Deskew() - Fait pivoter une image pour l'orienter correctement. Utile parce que la tolérance à l'obliquité de Tesseract est limitée.
  • OcrInput.EnhanceResolution - Améliore la résolution des images de faible qualité. Ce paramètre est généralement utilisé pour gérer automatiquement les entrées à faible DPI.
  • EnhanceResolution détecte les images à faible résolution (inférieures à 275 ppp), les met à l'échelle et accentue le texte pour de meilleurs résultats d'OCR. Bien qu'elle prenne du temps, elle permet souvent de réduire la durée totale de l'opération d'OCR.
  • Langue - Prise en charge de la sélection de 22 packs linguistiques internationaux.
  • Stratégie - Permet de choisir entre des stratégies rapides et moins précises ou avancées (utilisant l'IA pour la précision) basées sur la relation statistique des mots.
  • ColorSpace - Choisissez d'effectuer l'OCR en niveaux de gris ou en couleur ; les niveaux de gris sont généralement optimaux, mais la couleur peut être meilleure dans certains scénarios de contraste.
  • DetectWhiteTextOnDarkBackgrounds - Ajuste les images négatives, en détectant et en lisant automatiquement le texte blanc sur les arrière-plans sombres.
  • InputImageType - Guide la bibliothèque OCR, en précisant si elle travaille sur un document complet ou sur un extrait.
  • RotateAndStraighten - Permet à IronOcr de traiter correctement les documents qui sont tournés ou affectés par des distorsions de perspective.
  • ReadBarcodes - Lit automatiquement les codes-barres et les codes QR en même temps que la numérisation de texte sans ajout de temps significatif.
  • ColorDepth - Détermine les bits par pixel pour la profondeur de couleur dans le processus OCR. Une profondeur plus importante peut augmenter la qualité mais aussi le temps de traitement.

125 Packs linguistiques

IronOCR supports 125 international languages via language packs which are distributed as DLLs, available for download from this website, or from the NuGet Package Manager.

Les langues utilisées sont notamment l'allemand, le français, l'anglais, le chinois et le japonais. Il existe des packs linguistiques spécialisés pour le MRZ, les chèques MICR, les données financières, les plaques d'immatriculation, etc. En outre, des fichiers tesseract ".traineddata" personnalisés peuvent être utilisés.

Exemple de langue

// Reference to the path of the source file that demonstrates setting language packs for OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
// Reference to the path of the source file that demonstrates setting language packs for OCR
using IronOcr;

// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();

var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
' Reference to the path of the source file that demonstrates setting language packs for OCR
Imports IronOcr

' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img/arabic.gif", pageindices)
	' Add image filters if needed
	' In this case, even thought input is very low quality
	' IronTesseract can read what conventional Tesseract cannot.
	Dim result As OcrResult = ocr.Read(input)
	' Console can't print Arabic on Windows easily.
	' Let's save to disk instead.
	result.SaveAsTextFile("arabic.txt")
End Using
$vbLabelText   $csharpLabel

Exemple de langue multiple

Il est également possible de procéder à l'OCR en utilisant plusieurs langues en même temps. Cela peut améliorer l'OCR des métadonnées et des URL en anglais dans les documents Unicode.

// Reference to the path of the source file that demonstrates multi-language OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
// Reference to the path of the source file that demonstrates multi-language OCR
using IronOcr;

// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
' Reference to the path of the source file that demonstrates multi-language OCR
Imports IronOcr

' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)

Using input As New OcrInput()
	input.LoadPdf("multi-language.pdf")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("results.txt")
End Using
$vbLabelText   $csharpLabel

Objets détaillés des résultats de l'OCR

IronOCR renvoie un objet de résultat d'OCR pour chaque opération. En général, les développeurs accèdent à la propriété Text pour obtenir du texte numérisé. Cependant, l'objet des résultats contient des informations beaucoup plus détaillées.

// Reference to the path of the source file demonstrating detailed OCR result object usage
:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
// Reference to the path of the source file demonstrating detailed OCR result object usage
using IronOcr;

IronTesseract ocr = new IronTesseract();

// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);

OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
' Reference to the path of the source file demonstrating detailed OCR result object usage
Imports IronOcr

Private ocr As New IronTesseract()

' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\sample.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Dim pages = result.Pages
	Dim words = pages(0).Words
	Dim barcodes = result.Barcodes
	' Explore here to find a massive, detailed API:
	' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
	' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
$vbLabelText   $csharpLabel

Performance

IronOCR fonctionne dès sa sortie de l'emballage, sans qu'il soit nécessaire de régler les performances ou de modifier les images.

La vitesse est fulgurante : IronOcr.2020+ est jusqu'à 10 fois plus rapide et fait plus de 250 % d'erreurs en moins que les builds précédentes.

En savoir plus

Pour en savoir plus sur l'OCR en C#, VB, F# ou tout autre langage .NET, veuillez lire nos tutoriels communautaires, qui donnent des exemples concrets d'utilisation d'IronOCR et montrent les nuances d'optimisation de la bibliothèque.

Une référence API complète pour les développeurs .NET est également disponible.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer?
Nuget Téléchargements 5,044,537 | Version : 2025.11 vient de sortir