56 votes

Qu'est-ce que deps.json, et comment faire pour qu'il utilise des chemins relatifs ?

Je suis en train de mettre en place un projet ASP.NET Core sur TeamCity. Les binaires qu'il construit se plantent au démarrage sur d'autres machines. Le message d'erreur montre qu'il recherche des dll dans des chemins qui n'existent que sur le serveur de construction. DotPeek montre qu'il y a un fichier de ressources intégré dans le fichier .exe appelé myproject.deps.json . Dans la section des cibles, il y a des références aux dlls utilisant des chemins absolus. Cela signifie que les binaires ASP.NET Core ne s'exécuteront jamais que sur la machine sur laquelle ils ont été construits.

Comment résoudre ce problème ? Quel est ce fichier, et comment faire pour qu'il utilise des chemins relatifs ? Après quelques recherches, il semble que les chemins proviennent de project.fragment.lock.json qui est un fichier généré. Si je le modifie pour utiliser des chemins relatifs, le fichier est simplement écrasé à nouveau. Qu'est-ce qui génère ce phénomène, et comment le corriger ou l'arrêter ?

Pour ceux qui ont demandé, project.json ressemble :

{
  "dependencies": {
    "CommandLineParser": "1.9.71",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "System.Configuration.Abstractions": "1.0.0"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net461": {
      "dependencies": {
        "Company.Common": {
          "target": "project"
        },
        "Company.Integration": {
          "target": "project"
        },
        "Company.Functions": {
          "target": "project"
        },
        "Company.Utils": {
          "target": "project"
        }
      }
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

0 votes

Ces références de chemin absolu sont des bibliothèques tierces ?

0 votes

@Evk Certains d'entre eux, d'autres sont des références à des bibliothèques internes.

0 votes

TeamCity est-il installé sur votre machine, ou sur un serveur séparé ? La version de dotnet est-elle à jour ? Quelle partie du fichier deps.json contient le chemin vers les bibliothèques - pouvez-vous comparer avec le fichier construit localement et nous montrer les différences ?

21voto

ciriarte Points 378

La réponse à votre première question, selon le Documentation du fichier de configuration du temps d'exécution :

Et la réponse à votre deuxième question, est d'enlever preserveCompilationContext dans votre fichier project.json (et reconstruire).

MonApp.deps.json est une liste de dépendances, ainsi que des données de contexte de compilation et des dépendances de compilation. Non requis techniquement, mais nécessaire pour utiliser les fonctionnalités de service ou d'installation de cache de paquets/paquets partagés.

Dans votre commentaire à Dimitry, je ne pouvais pas dire si .net core était installé sur votre machine cible et donc déduire le type de déploiement que vous essayez de faire. Mais en supposant qu'il soit installé, vous devriez être en mesure d'ajuster vos paramètres d'installation de monprojet.runtime.json pour régler vos problèmes. Si ce n'est pas le cas, je vous recommande vivement de vous renseigner sur les deux différents types d'aides financières. Déploiement d'applications .NET Core :

Vous pouvez créer deux types de déploiements pour les applications .NET Core :

Déploiement dépendant de la structure . Comme son nom l'indique, le déploiement dépendant du framework (FDD) s'appuie sur une version commune à tout le système. de .NET Core présente sur le système cible. Comme .NET Core est déjà présent, votre application est également portable entre les installations de .NET Core. Votre application ne contient que son propre code et dépendances tierces qui sont en dehors des bibliothèques de .NET Core. . Les FDD contiennent des fichiers .dll qui peuvent être lancés en utilisant l'utilitaire dotnet à partir de la ligne de commande. Par exemple, dotnet app.dll exécute une application nommée app.

Déploiement autonome . Contrairement à FDD, un déploiement autonome (SCD) ne dépend pas de la présence de composants partagés sur le site de la système cible. Tous les composants, y compris les bibliothèques .NET Core et le moteur d'exécution .NET Core, sont inclus dans l'application. le moteur d'exécution .NET Core, sont inclus dans l'application et sont isolés des autres applications .NET Core. Les SCD comprennent un exécutable (tel que app.exe sur les plateformes Windows pour une application nommée app), qui est une version renommée de l'hôte .NET Core spécifique à la plate-forme, et un fichier .dll (tel que app.dll), qui constitue l'application proprement dite.

0 votes

Je n'ai pas de myapp.deps.json sur le disque. Il est généré automatiquement par (je suppose) VS, et intégré dans l'application.

3 votes

@TarkaDaal si vous voulez vous débarrasser de myproject.deps.json dans votre assemblage, vous pouvez supprimer preserveCompilationContext dans votre fichier project.json (et reconstruire).

0 votes

@ciriate C'était ça ! Faites-en une réponse et vous pourrez avoir la prime.

17voto

Shaun Luttin Points 1585

*.deps.json vient de preserveCompilationContext .

La préservation du contexte de compilation est utile pour la compilation en cours d'exécution (c'est-à-dire la compilation juste à temps) et surtout pour la compilation des vues. Elle n'est généralement pas utile pour les bibliothèques. Pour résoudre votre problème :

  1. Retirer preserveCompilationContext de chaque Company.* à laquelle votre application fait référence.
  2. Si cela ne fonctionne pas, supprimez également preserveCompilationContext depuis votre application principale.

Il s'agit d'une conversation complexe : https://github.com/aspnet/Mvc/issues/5141

5 votes

J'ai ajouté ceci dans mon projet netstandard2.0 et j'obtiens toujours deps.json

13voto

Si vous utilisez le nouveau format .csproj

Ajout de <PreserveCompilationContext>false</PreserveCompilationContext> en vertu de la <TargetFramework> tag a réglé le problème pour moi.

<PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <PreserveCompilationContext>false</PreserveCompilationContext>
</PropertyGroup>

11 votes

J'ai ajouté ceci dans mon projet netstandard2.0 et j'obtiens toujours deps.json

2voto

german1311 Points 49

Après une recherche complète, j'ai finalement trouvé ma solution, c'était mon cas : - ne se produit que lors de l'exécution

publier en dotnet

Pour résoudre ce problème, modifiez votre csproj et assurez-vous d'avoir cette configuration.

Ceci s'applique à webapi netcoreapp 2.0

<PropertyGroup>
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
    <PreserveCompilationContext>false</PreserveCompilationContext>
</PropertyGroup>

cela permettra également de résoudre les problèmes liés à

"erreur CS0246 : Le nom de type ou d'espace de nom 'System' est introuvable".

ref. : https://github.com/aspnet/MvcPrecompilation/issues/162 https://github.com/dotnet/dotnet-docker/issues/279

0 votes

Que Dieu vous bénisse ! Cela a fonctionné sur mon .net framework 4.7.2.

-3voto

dawidr Points 92

J'ai configuré TeamCity pour construire deux de mes projets et il n'y a aucun problème pour les utiliser ultérieurement sur des machines différentes. J'ai utilisé ce guide pour créer la configuration de construction : Construire, tester et déployer des projets .NET Core avec TeamCity .

Le plugin TeamCity peut être téléchargé ici : Support .NET Core

Voici le code source sur GitHub si vous voulez y jeter un œil : Plugin TeamCity .NET Core

Et voici quelques informations concernant l'installation des plugins TeamCity : Installation de plugins supplémentaires

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X