Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Références des espaces de nom (Namespace)
Les composantes
ASP.NET Core Identity
Protection des données
SignalR
Structure typique du code et du projet
Préface
Notes légal
Dictionnaire
Recherche

Structure typique du code et du projet

Plus un projet grossit, plus est nécessaire d'avoir de l'ordre une structure solide dans un projet. La raison est fort, simple vous risquez d'introduire des illogismes et ou des incohérences dans votre projet lorsqu'il devra plus gros. Il est vrai que si le but d'un projet est simple d'afficher un «Hello World», il n'est pas nécessaire d'avoir de tel structure, mais les logiciels répondant à des demandes de toute sorte, mettre très vite à l'épreuve une structure mal pensés.

Structure de répertoire

La structure de répertoire d'un projet ASP.NET Core suit généralement une organisation claire et modulaire pour faciliter la gestion du code, la maintenance et le déploiement. À la racine du projet, le répertoire principal contient divers sous-dossiers et fichiers essentiels, tels que global.json pour spécifier la version du .NET SDK utilisée, README.md pour documenter le projet, et .gitignore pour exclure certains fichiers du contrôle de version. Cette structure garantit une meilleure organisation et un repérage rapide des éléments clés du projet.

Les fichiers et répertoires liés aux builds et configurations sont souvent centralisés dans des dossiers spécifiques. Par exemple, .build contient les scripts de construction (build.ps1) et les configurations de déploiement comme azure-pipelines.yml pour Azure DevOps. De plus, .config regroupe les fichiers de configuration locale pour les machines de développement, tandis que artifacts stocke les artefacts générés lors des builds, tels que les binaires ou les journaux. Cette séparation permet de bien distinguer les phases de développement et de déploiement.

Le dossier azure est dédié à l'infrastructure infonuagique et contient des sous-dossiers comme infrastructure pour les scripts de provisionnement et gabarits pour les fichiers ARM/Bicep définissant l'infrastructure Azure. D'autre part, bd regroupe les scripts de construction de la base de données, facilitant ainsi la gestion des migrations et des mises à jour des schémas. Cette organisation est essentielle pour assurer une bonne gouvernance du projet, en particulier lorsqu'il est déployé dans des environnements infonuagique ou hybrides.

La section docs centralise toute la documentation du projet, avec des sous-dossiers pour l'architecture (architecture), l'API (api, pouvant inclure des fichiers Swagger), et les guides d'utilisation (guides). Pour les dépendances externes, le dossier lib contient les bibliothèques non gérées par NuGet, ce qui permet d'éviter des dépendances inutiles dans le code source. Ainsi, la documentation et les dépendances sont bien organisées et facilement accessibles.

Le coeur du projet se trouve dans src, hébergeant le code source de l'application. Ce dossier peut contenir plusieurs sous-projets, comme MyApp.Api pour l'API ASP.NET Core, MonApp.Library pour une bibliothèque réutilisable, et Site pour l'interface utilisateur. Chaque projet suit la structure MVC avec des répertoires Controllers, Models et Views. On y retrouve aussi des fichiers fondamentaux comme Program.cs, servant de point d'entrée, et Startup.cs, configurant l'application (si applicable). Cette organisation modulaire facilite la mise à l'échelle et la réutilisation du code.

Les ressources statiques sont regroupées dans resources, contenant des sous-dossiers pour le CSS (css/site.css), le JavaScript (js/site.js), la localisation (locales), les images (images), et des fichiers de configuration supplémentaires (config). De plus, samples fournit des exemples de code et des preuves de concept (SampleApp), permettant ainsi aux développeurs d'expérimenter avec des implémentations spécifiques sans impacter le projet principal.

Enfin, le dossier tests contient les tests de l'application, avec des sous-dossiers dédiés aux tests unitaires (MyApp.Tests.Unit), aux tests d'intégration (MyApp.Tests.Integration) et aux tests fonctionnels (MyApp.Tests.Functional). De son côté, tools héberge des outils de développement et de migration, y compris des scripts SQL pour les bases de données. Cette séparation des tests et des outils de développement garantit une meilleure qualité du code et simplifie le travail des équipes en charge de la maintenance et du déploiement.

La structure de répertoire typique d'un projet ASP.NET Core bien organisé, incluant des éléments comme la documentation, des API, des pipelines Azure, des scripts, des bibliothèques, des exemples, des tests, des outils, et des ressources, pourrait ressembler à ceci :

Dossier Description
/MonProjetAspNetCore Ce répertoire contient le projet
    /.build Ce répertoire contient des scripts de build et configurations spécifiques
        azure-pipelines.yml Ce fichier contient la configuration pour Azure Pipelines
        docker-compose.yml Ce fichier contient la configuration Docker
        build.ps1 Ce fichier contient le script PowerShell pour automatiser la compilation
    /.config Ce répertoire contient la configuration locale nécessaire pour installer le projet sur les machines de développement.
    /artifacts Ce répertoire contient les artifacts générés (builds, paquets, journal de bord,...)
    /azure Ce répertoire contient les scripts et la configurations Azure
        /infrastructure Ce répertoire contient les scripts pour déployer l'infrastructure Azure
        /templates Ce répertoire contient les gabarits ARM/Bicep pour l'infrastructure
    /bd Ce répertoire contient les scripts de construction de la base de données
    /docs Ce répertoire contient la documentation du projet
        /architecture Ce répertoire contient le diagrammes d'architecture
        /api Ce répertoire contient la documentation API (par exemple Swagger)
        /guides Ce répertoire contient les guides d'utilisation
    /lib Ce répertoire contient les bibliothèques externes (si non gérées par NuGet)
        external-library.dll Ce fichier contient une bibliothèque externe
    /src Ce répertoire contient le code source de l'application
        /MyApp.Api Ce répertoire contient le projet ASP.NET Core (API)
            /Controllers Ce répertoire contient les contrôleurs API
            /Models Ce répertoire contient les modèles utilisés par l'API
            /Services Ce répertoire contient les services métier
            appsettings.json Ce fichier contient la configuration de l'application
            Program.cs Ce fichier contient le point d'entrée de l'application
            Startup.cs Ce fichier contient la configuration ASP.NET Core
            MonApp.Api.csproj Ce fichier contient le projet C#
        /MonApp.Library Ce répertoire contient la bibliothèque de classes (réutilisable)
            MonApp.Library.csproj Ce fichier contient le projet de la bibliothèque
        /Site Ce répertoire contient le projet principal ASP.NET Core
            /Controllers Ce répertoire contient le contrôleurs du site
            /Models Ce répertoire contient les modèles utilisés par le site
            /View Ce répertoire contient les vues utilisés par le site
    /resources Ce répertoire contient les ressources statiques (images, fichiers,...)
        /css Ce répertoire contient les feuilles de styles CSS
            site.css Ce fichier contient les CSS principale du site
        /js Ce dossier contient les JavaScript
            site.js Ce fichier contient le code JavaScript principale du site
        /locales Ce répertoire contient les fichiers de localisation
        /images Ce répertoire contient les images du projet
        /config Ce répertoire contient les fichiers de configuration supplémentaires
    /samples Ce répertoire contient des exemples de code ou d'utilisation de l'application, des Kick-Off, des preuves de concepts,...
        /SampleApp Ce répertoire contient des exemples avec un petit projet d'application
            SampleApp.csproj Ce fichier contient les spécifications du projet SampleApp.
    /scripts Ce répertoire contient les scripts utilitaires (déploiement, build,...)
        deploy.ps1 Ce répertoire contient le script de déploiement
    /tests Ce répertoire contient les tests d'applications
        /MyApp.Tests.Unit Ce répertoire contient les tests unitaires
        /MyApp.Tests.Integration Ce répertoire contient les tests d'intégration
        /MyApp.Tests.Functional Ce répertoire contient les tests fonctionnels
    /tools Ce répertoire contient les scripts et les outils pour le développement et la maintenance
        /migration-scripts Ce répertoire contient les scripts de migration de base de données
    global.json Ce fichier contient les spécifications de la version .NET SDK utilisée
    README.md Ce fichier contient la documentation générale du projet
    .gitignore Ce fichier contient les informations pour ignorer certains fichiers dans Git

Environnement

Dans un projet ASP.NET Core, la variable ASPNETCORE_ENVIRONMENT est essentielle pour gérer la configuration en fonction du contexte d'exécution. Cette variable permet de définir si l'application fonctionne en mode Développement, Staging (préproduction) ou Production. Grâce à cette distinction, l'application peut charger des paramètres spécifiques à chaque environnement, comme les fichiers de configuration appsettings.Development.json, appsettings.Staging.json ou appsettings.Production.json. Ce mécanisme garantit que l'application utilise des réglages adaptés à chaque phase de son cycle de vie.

Le fichier de configuration principal, appsettings.json, contient les paramètres de base, mais il est complété par un fichier spécifique selon la valeur de ASPNETCORE_ENVIRONMENT. Par exemple, en mode Développement, le fichier appsettings.Development.json peut activer des journaux détaillés et un serveur de base de données local, tandis qu'en mode Production, appsettings.Production.json désactivera certaines fonctionnalités comme le Swagger et réduira la verbosité des journaux de bord. Cette flexibilité permet aux développeurs d'adapter leur application aux besoins réels de chaque environnement.

Au-delà des fichiers de configuration, ASPNETCORE_ENVIRONMENT influence également le comportement de l'application dans Program.cs ou Startup.cs. Par exemple, une page d'erreur détaillée (UseDeveloperExceptionPage()) peut être activée uniquement en développement, tandis qu'en production, une page d'erreur générique sera affichée. De même, certains services comme Swagger ou les outils de debugging peuvent être activés uniquement en mode Développement pour éviter toute exposition en production.

La définition de ASPNETCORE_ENVIRONMENT peut se faire de plusieurs manières. Elle peut être spécifiée dans le fichier launchSettings.json de Visual Studio, définie comme une variable d'environnement dans le terminal (export ASPNETCORE_ENVIRONMENT=Production sous Linux, ou $env:ASPNETCORE_ENVIRONMENT="Production" sous Windows), ou encore configurée via IIS ou Kestrel. Cette flexibilité permet d'adapter l'environnement d'exécution sans modifier le code source de l'application.

La gestion des environnements via ASPNETCORE_ENVIRONMENT est un atout majeur d'ASP.NET Core. Elle permet d'adapter automatiquement l'application aux besoins de chaque contexte d'exécution, en ajustant les fichiers de configuration, les services activés et les comportements de sécurité. Cette approche améliore à la fois la sécurité, la mise à l'échelle et la maintenabilité des applications, en facilitant la transition entre les différentes phases du développement et du déploiement.

Structure typique des environnements dans un projet ASP.NET Core

Un projet ASP.NET Core est généralement organisé ainsi :

Dossier Description
/MonProjet Ce répertoire contient le projet
   appsettings.json Ce fichier contient la configuration principale de l'application, incluant des paramètres globaux comme les chaînes de connexion, les options de journalisation et d'autres paramètres applicatifs. Il est chargé en premier, quel que soit l'environnement.
   appsettings.Development.json Ce fichier est une extension de appsettings.json, chargé uniquement lorsque l'environnement est défini sur Développement (ASPNETCORE_ENVIRONMENT=Development). Il contient des paramètres spécifiques comme un niveau de journalisation plus détaillé ou l'utilisation de bases de données locales.
   appsettings.Staging.json Ce fichier est utilisé lorsque l'application fonctionne en mode Staging (ASPNETCORE_ENVIRONMENT=Staging). Il permet de tester l'application dans un environnement proche de la production, avec des configurations intermédiaires, comme des bases de données de préproduction et des logs modérés.
   appsettings.Production.json Ce fichier est chargé lorsque l'environnement est défini sur Production (ASPNETCORE_ENVIRONMENT=Production). Il contient des paramètres optimisés pour la performance et la sécurité, comme la désactivation des messages d'erreur détaillés et l'utilisation de bases de données de production.
   Program.cs Ce fichier est le point d'entrée principal de l'application ASP.NET Core. Il configure l'hôte de l'application et charge la configuration (appsettings.json), les services, les middlewares et les paramètres de l'environnement. À partir d'ASP.NET Core 6, il combine également les responsabilités de Startup.cs dans une approche simplifiée basée sur WebApplicationBuilder.
   Startup.cs Pour les versions ASP.NET Core < 6. Ce fichier est utilisé pour configurer les services et le pipeline des requêtes HTTP. Il contient généralement deux méthodes : ConfigureServices(IServiceCollection services), qui définit les dépendances à injecter, et Configure(IApplicationBuilder app, IWebHostEnvironment env), configurant les middlewares (comme l'authentification, la gestion des erreurs et les fichiers statiques). Dans ASP.NET Core 6+, son rôle est intégré directement dans Program.cs.
   Properties/ Ce répertoire contient les propriétés
       launchSettings.json Ce fichier, situé dans le dossier Properties, est utilisé par Visual Studio et dotnet run pour définir les profils de lancement de l'application. Il spécifie notamment la valeur de ASPNETCORE_ENVIRONMENT, les ports utilisés et le mode d'exécution (IIS Express ou Kestrel).
   Controllers/ Ce répertoire contient les contrôleurs.
   Models/ Ce répertoire contient les modèles
   Views/ Ce répertoire contient les vues si MVC.
   wwwroot/ Ce répertoire contient la racine du site
   ... ...

Impact de ASPNETCORE_ENVIRONMENT sur la configuration

Définir ASPNETCORE_ENVIRONMENT



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Vendredi, le 6 septembre 2024