Lorsque je publie mon application .NET Core, elle génère un répertoire runtimes
avec les sous-répertoires suivants:
- publish/runtimes/
- debian.8-x64/
- Fedora.23-x64/
- Fedora.24-x64/
- opensuse.13.2-x64/
- opensuse.42.1-x64/
- osx/
- osx.10.10-x64/
- rhel.7-x64/
- ubuntu.14.04-x64/
- ubuntu.16.04-x64/
- ubuntu.16.10-x64/
- unix/
- win/
Sur mon serveur CI/CD, je publie mes applications avec cette commande:
dotnet publish -c Release -o ..\publish
Mes paramètres de publication dans le fichier de projet sont les suivants:
Je prévois uniquement de publier cette application sur Windows 2016 Server, de sorte que les dossiers runtimes
OSX/Linux/Unix ne sont pas nécessaires. Pire, dans plusieurs cas, ces dossiers runtimes
contiennent des vulnérabilités dlls
connues qui conduisent à des analyses faussement positives du système OSA.
Existe-t-il un moyen de configurer le projet pour ne générer que le dossier d'exécution win
?
Mettre à jour
J'ai essayé les suggestions de @ahsteele et le résultat de l'ajout des RID à mes fichiers csproj est le même que si je n'avais pas spécifié les RID.
Lorsque j'exécute l'exemple de commande CI/CD
dotnet publish -c Release -r win10-x86 -o ..\publish
Je crois que cela crée un déploiement autonome. Comme mon répertoire de publication passe de 55 Mo à 120 Mo et de 237 fichiers à 482 fichiers.
Mise à jour 2
J'ai essayé de spécifier mon projet de démarrage pour l'étape de publication et cela crée des répertoires d'exécution plus compacts.
Voici la commande de construction que je lance:
dotnet publish .\startupProject.csproj -c Release -o ..\publish
Et voici le résultat:
- publish/runtimes/
- unix/
- win/
Certains des projets de ma solution spécifient netstandard2.0 et d'autres, netcoreapp2.0. Microsoft indique-t-il que si vous ne spécifiez pas de framework cible ni de fichier csproj spécifique, tous les frameworks cibles vous seront fournis pour toutes les exécutions possibles?
Vous devriez pouvoir spécifier votre runtime avec le commutateur dotnet publish-r
. Dans le Catalogue .NET Core RID - Windows RID les RID Windows 10/Windows Server 2016 sont les suivants:
Cela signifie que votre commande CI/CD peut spécifier le temps d'exécution:
dotnet publish -c Release -r win10-x86 -o ..\publish
Vous pouvez également définir un seul RID dans l'élément <RuntimeIdentifier>
de votre fichier de projet:
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
Plusieurs RID peuvent être définis en tant que liste délimitée par des points-virgules dans le fichier <RuntimeIdentifiers>
du fichier projet:
<RuntimeIdentifiers>win10-x64;win10-x86</RuntimeIdentifiers>