Ajoutez les propriétés suivantes dans le fichier projet (.csproj) pour limiter la génération à une seule culture et à un runtime conteneurisé :
<PropertyGroup>
<SelfContained>false</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SatelliteResourceLanguages>fr-FR</SatelliteResourceLanguages>
</PropertyGroup>
Remaruqe : Remplacez fr-FR par la culture principale de votre application (par exemple zh-CN pour le chinois simplifié).
La bibliothèque SourceGrid‑huanlin, reprise sur NuGet, n’est plus maintenue et génère un grand nombre de DLL système non nécessaires dans le dossier de sortie de .NET 8. Pour les éliminer, vous pouvez utiliser un script batch ou PowerShell. Voici une approche en deux étapes :
- Lister les DLL à supprimer dans un fichier texte.
- Exécuter une boucle de suppresison via un script.
Exemple avec un fichier clean_dlls.bat :
@echo off
setlocal enabledelayedexpansion
:: Liste des DLL redondantes (à adapter selon votre version)
set DLL_LIST=Microsoft.Win32.Registry.AccessControl.dll System.CodeDom.dll System.Data.Odbc.dll System.Data.OleDb.dll System.Data.SqlClient.dll System.Collections.Immutable.dll System.ComponentModel.Composition.dll System.ComponentModel.Composition.Registration.dll System.Diagnostics.EventLog.dll System.Diagnostics.PerformanceCounter.dll System.Diagnostics.EventLog.Messages.dll System.DirectoryServices.dll System.DirectoryServices.AccountManagement.dll System.DirectoryServices.Protocols.dll System.Formats.Asn1.dll System.Formats.Nrbf.dll System.IO.Packaging.dll System.Private.ServiceModel.dll System.Reflection.Context.dll System.Reflection.Metadata.dll System.Runtime.Caching.dll System.ServiceModel.dll System.ServiceModel.Duplex.dll System.ServiceModel.Http.dll System.ServiceModel.NetTcp.dll System.ServiceModel.Primitives.dll System.ServiceModel.Security.dll System.ServiceModel.Syndication.dll System.ServiceProcess.ServiceController.dll System.Speech.dll System.Text.Encoding.CodePages.dll System.Threading.AccessControl.dll System.Web.Services.Description.dll System.Security.AccessControl.dll System.Security.Cryptography.Pkcs.dll System.Security.Cryptography.ProtectedData.dll System.Security.Cryptography.Xml.dll System.Security.Permissions.dll Microsoft.Bcl.AsyncInterfaces.dll Microsoft.Bcl.Cryptography.dll Microsoft.Extensions.ObjectPool.dll
for %%f in (%DLL_LIST%) do (
if exist "%%f" (
del /q "%%f"
echo Suppression de %%f
) else (
echo Fichier introuvable : %%f
)
)
endlocal
pause
Vous pouvez également utiliser PowerShell pour une exécution plus propre :
$dlls = @(
"Microsoft.Win32.Registry.AccessControl.dll",
"System.CodeDom.dll",
"System.Data.Odbc.dll",
# ... (ajoutez toutes les DLL de la liste ci‑dessus)
"Microsoft.Extensions.ObjectPool.dll"
)
$dlls | ForEach-Object {
if (Test-Path $_) {
Remove-Item $_ -Force
Write-Host "Supprimé : $_"
} else {
Write-Warning "Absent : $_"
}
}
Conseil : Exécutez ce script après chaque compilation, ou intégrez‑le en tant qu’événement post‑build dans Visual Studio.