Qu'est-ce que deps.json, et comment utiliser les chemins relatifs?

je mets en place un ASP.NET projet de base sur TeamCity. Les binaires qu'il construit s'écrasent au démarrage sur d'autres machines. Le message d'erreur montre qu'il recherche des dlls dans des chemins qui n'existent que sur le serveur de compilation. DotPeek montre qu'il y a un fichier de ressources intégré dans le .exe called!--1-->. Dans la section des cibles, il y a des références aux dlls en utilisant des chemins absolus. Cela signifie que ASP.NET les binaires Core ne vont jamais fonctionner que sur la machine sur laquelle ils étaient construire.

Comment puis-je résoudre ce problème? Qu'est-ce que ce fichier, et comment le faire utiliser des chemins relatifs? Après quelques fouilles, on dirait que les chemins viennent de project.fragment.lock.json, qui est un fichier généré. Si je l'édite pour utiliser des chemins relatifs, le fichier est juste réécrit. Ce qui l'engendre, et comment peut-il être fixe, ou arrêté?

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%" ]
  }
}
27
demandé sur TarkaDaal 2016-11-28 20:05:56

5 réponses

La réponse à votre première question, par le Documentation Du Fichier De Configuration De L'Exécution:

Et la réponse à votre deuxième question, est à supprimer pour supprimer conservecompilationcontext dans votre projet.fichier json (et de reconstruction).

MyApp.deps.json est une liste de dépendances, ainsi que de données de contexte de compilation et de dépendances de compilation. Non techniquement nécessaire, mais requis pour utiliser l'entretien ou le paquet les fonctionnalités d'installation de cache/paquet partagé.

selon votre commentaire à Dimitry, Je ne pourrais pas dire si vous avez .net core installé dans votre machine cible et donc inférer le type de déploiement que vous essayez de faire. Mais en supposant qu'il est installé, vous devriez être en mesure de régler votre myproject.Runtime.json pour régler vos problèmes. Dans le cas contraire, je recommande fortement de lire sur les deux types différents de . application de base de réseau Déploiement:

vous pouvez créer deux types de déploiements pour les applications .net Core:

déploiement dépendant du cadre. Comme son nom l'indique, le déploiement dépendant du cadre (FDD) repose sur un système partagé à l'échelle du système. version de .net Core à être présent sur le système cible. Parce que .NET Core est déjà présent, votre application est également portable entre installation de .net Core. Votre application ne contient que son propre code et un tiers dépendances à L'extérieur du noyau. net bibliothèque. Fdds contain .fichiers dll qui peuvent être lancés en utilisant le dotnet utilitaire en ligne de commande. Par exemple, dotnet app.dll fonctionne une application appelée app.

déploiement autonome. Contrairement au FDD, un déploiement autonome (SCD) ne s'appuie sur aucun composant partagé pour être présent sur le système cible. Tous les composants, y compris les bibliothèques. net Core et l'exécution. net Core, sont inclus avec la demande et sont isolé des autres applications.net Core. Dcg inclure un fichier exécutable (comme app.exe sur les plateformes Windows pour une application nommée app), qui est une version renommée de L'hôte principal .net spécifique à la plate-forme., et un .fichier dll (tel que app.dll), qui est de l'application réelle.

15
répondu ciriarte 2016-12-06 17:55:49

*.deps.json vient preserveCompilationContext.

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

  1. Supprimer preserveCompilationContext à partir de Company.* bibliothèque référencée par votre application.
  2. Si cela ne fonctionne pas, enlevez aussi preserveCompilationContext de votre application principale.

il y a une conversation impliquée ici: https://github.com/aspnet/Mvc/issues/5141

7
répondu Shaun Luttin 2016-12-06 17:07:30

Si vous utilisez la version plus récente .format csproj

ajouter <PreserveCompilationContext>false</PreserveCompilationContext><TargetFramework> balise résolu le problème pour moi.

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

3
répondu Kevin Somers-Higgins 2017-05-19 16:06:33

Après une recherche complète enfin trouvé ma solution, c'était mon cas: - ne se produit lorsque vous exécutez

dotnet publier

alors pour résoudre ceci, éditez 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 permet également de résoudre des problèmes liés à

"erreur CS0246: le type ou le nom d'espace de noms 'System' ne peut pas être trouvé"

réf.: https://github.com/aspnet/MvcPrecompilation/issues/162 https://github.com/dotnet/dotnet-docker/issues/279

2
répondu german1311 2018-06-04 20:44:15

J'ai mis en place Team City pour construire deux de mes projets et il n'y a aucun problème à les utiliser plus tard sur des machines différentes. J'utilisais ce guide pour créer la configuration de build:Construire, tester et déployer .NET de Base des projets avec TeamCity.

le plugin TeamCity peut être téléchargé à partir d'ici: .NET Core Support

voici le code source sur GitHub si vous voulez jeter un oeil: TeamCity .net Core Plugin

Et voici quelques infos concernant l'installation des plugins TeamCity:Installation De Plugins Supplémentaires

-3
répondu Dawid Rutkowski 2016-12-04 19:20:43