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?
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.
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
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>
Cela a fonctionné pour moi:
web.release.config
à la racine du projet. 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>
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