web-dev-qa-db-fra.com

Lors de la publication, comment cibler des .NET Core Runtimes spécifiques?

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:

  • Cadre cible: netcoreapp2.1
  • Mode de déploiement: dépendant de la structure
  • Durée d'exécution cible: win-x64

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?

6
Nick

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:

  • win10-x64
  • win10-x86
  • win10-bras
  • win10-arm64

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>
2
ahsteele