84 votes

dotnet publier ne pas publier de corriger appsettings.{env.EnvironmentName}.json

Quand je exécutez la commande suivante dans la ligne de commande:

dotnet publish -o "./../output" -c Release

L' dotnetcli publie le projet correctement. Cependant, il ne copie pas le appsettings.Production.json le dossier, seuls les appsettings.json.

Pourquoi est-ce? J'ai googlé autour et lire le fondement officiel docs, mais je n'ai pas trouvé comment l'environnement approprié appsettings.json est censé se retrouver dans l'publier la sortie.

Dois-je copier appsettings.Production.json manuellement le dossier publié?

105voto

Set Points 21500

Mise à jour: Pour le courant (nouveau) .csproj format de l' CopyToPublishDirectory attribut doit être utilisé. Il décide alors de copier le fichier à la publication du répertoire et peut avoir une des valeurs suivantes:

  • Toujours,
  • PreserveNewest
  • Jamais

Ajoutez la section suivante dans votre .csproj:

<ItemGroup>
   <None Include="appsettings.Production.json" CopyToPublishDirectory="Always" />
</ItemGroup>

Regarder dans @nover réponse et DONC Exclure ou inclure des fichiers sur publier pour plus d'informations à propos du fichier de contrôle en cours de publication.


"Dans votre project.json fichier que vous avez la section publishOptions avec le paragraphe include, où vous avez déjà des fichiers comme "appsettings.json":

"publishOptions": {
  "include": [
    "appsettings.json",
    "hosting.json",
    "project.json",
    "web.config"
  ]
},

Vous devez ajouter "appsettings.Production.json" dans ce tableau.

Les mises à jour sur la base des commentaires:

  • Gardez à l'esprit que tous les appsettings.*.json fichiers comme appsettings.development.json, appsettings.staging.json et appsettings.production.json finiront toujours dans tous les environnements. Vous ne pouvez simplement gérer à l'aide de cette project.json, car il ne prend pas en charge toutes les règles de l'état. Ce sera modifiée dans l'avenir, lorsque project.json sera remplacé retour à l' msbuild et .csproj. Si cela est essentiel pour votre application, pensez à utiliser un autre magasin de configuration, comme la Variable d'Environnement de la base de données, etc.

  • Notez que l'ordre est important, de déterminer les paramètres qui seront appliqués si ils existent en de multiples endroits. À partir de la documentation:

    L'ordre dans lequel la configuration de sources sont spécifiées est important, car cela établit l'ordre de priorité, avec les paramètres qui seront appliqués si ils existent en de multiples endroits. Dans l'exemple ci-dessous, si le même paramètre existe dans les deux appsettings.json et dans une variable d'environnement, le paramètre de la variable d'environnement sera celui qui est utilisé. La dernière configuration de la source spécifiée "gagne" si un paramètre existe dans plus d'un endroit. L'ASP.NET l'équipe recommande de spécifier des variables d'environnement, de sorte que l'environnement local peut remplacer quoi que ce soit réglé en déploiement, les fichiers de configuration.

17voto

Sock Points 3300

Dans votre project.json il y a une section publishOptions. Cette liste tous les fichiers et dossiers qui seront inclus lors de la publication. Vous aurez besoin de mettre à jour le vôtre à ressembler à quelque chose comme ceci

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

Vous pouvez également utiliser des modèles d'expansion, de sorte que vous devez trouver ce qui fonctionne trop (je n'ai pas testé celui-ci)

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

16voto

nover Points 524

Pour le nouveau csproj format de projet, vous devez ajouter un nouveau ItemGroup avec le contenu

<ItemGroup>
  <Content Include="appsettings.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
  <Content Include="appsettings.Production.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

Dans le cas où vous avez plusieurs appsettings.{env}.json des fichiers il suffit de répéter l' Content balise à l'intérieur de la même ItemGroup et tous les paramètres de votre fichiers seront dans le dossier de publication.

Comme mentionné dans les commentaires une meilleure solution est d'utiliser un caractère générique comprennent:

<ItemGroup>
  <Content Include="appsettings*json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

Et tous vos appsettings fichiers seront publiés!

8voto

Ben Anderson Points 1454

Après Visual Studio 2017 15.3

Modifier la .csproj fichier à exclure manuellement les fichiers/dossier d'être publié

<ItemGroup>
  <Content Remove="appsettings.Development.json" />
</ItemGroup>

ref: https://www.danielcrabtree.com/blog/273/fixing-the-duplicate-content-error-after-upgrading-visual-studio-2017

original source

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