web-dev-qa-db-fra.com

Définir la transformation web.config dans Asp.NET Core

Je viens de rencontrer un problème de transformation web.config dans le noyau asp.net.

Il existe deux fichiers: base web.config et web.prod-zone-a.config. Mon objectif est d’utiliser la transformation dans web.prod-zone-a.config lors de la publication de mon projet . Je dispose des paramètres de configuration suivants:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'prod-zone-a|AnyCPU' ">
    <IntermediateOutputPath>obj\Debug\netcoreapp1.1</IntermediateOutputPath>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <DefineConstants>TRACE;DEBUG;NETCOREAPP1_1</DefineConstants>
    <Configuration>prod-zone-a</Configuration>
  </PropertyGroup>

web.prod-zone-a.config ressemble à:

<system.webServer>
    <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore>
        <environmentVariables xdt:Transform="Replace">
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="prod-zone-a" />
        </environmentVariables>
    </aspNetCore>
</system.webServer>

J'ai essayé de lancer la publication avec deux commandes:

dotnet msbuild /t:Publish /p:OutputPath=c:\delivery /p:Configuration=prod-zone-a

et

dotnet publish --configuration prod-zone-a --output c:\delivery

Mais aucune transformation ne s'applique à web.config sur la sortie - juste la valeur par défaut . Est-ce que je manque quelque chose dans la configuration ou l'exécution de la commande?

6
user1820686

Il existe un outil bien documenté sur github pour xdt-transformations . En outre, il ne dépend pas de la commande, les deux expressions de dotnet publish et dotnet msbuild fonctionnent correctement.

5
user1820686

Avec la dernière version de dotnet cli (2.1.400 ou supérieure), vous pouvez simplement définir cette propriété msbuild $ (EnvironmentName) et l'outil de publication se chargera d'ajouter ASPNETCORE_ENVIRONMENT environmentVariable à la variable web.config avec le nom d'environnement spécifié. 

De plus, le support XDT est disponible à partir de 2.2.100-preview1.

Exemple: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md

2
vijayrkn

Suite à la réponse de l'utilisateur1820686 ci-dessus:

La page github omet certaines des étapes nécessaires pour l'ajouter pour l'outillage MSBuild/csproj:

Vous devez ouvrir une invite de commande dans le répertoire de votre projet et exécuter dotnet add myProj.csproj package Microsoft.DotNet.Xdt.Tools --version 2.0.0

Ensuite, vous devez ouvrir le fichier csproj et ajouter

<ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.Dotnet.Xdt.Tools" Version="2.0.0" /> ... other package references ... </ItemGroup>

1
squeakyD

Cela a fonctionné pour moi: 

  1. Ajoutez le fichier web.release.config à la racine du projet. 
  2. Dans Visual Studio 2017, publiez à l'aide de Web Deploy (assurez-vous qu'il est défini sur Release). Les paramètres seront automatiquement repris. 

Transformation de l'échantillon:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
    <system.webServer>
      <aspNetCore>
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="PRODUCTION" xdt:Locator="Match(name)" xdt:Transform="SetAttributes" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
</configuration>
0
Sha

peut-être que je ne clarifie pas la question. Dans le cas de mines, web.config annule tous les paramètres du fichier web.Release.config.

Correction pour moi, je viens d'ajouter une référence pour le fichier de transformation xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform" to configuration.

alors, le fichier .config devrait commencer:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">

Après un certain temps, la meilleure solution consiste à utiliser outil dotnet-transform-xdt

0
Andrey R