web-dev-qa-db-fra.com

Comment définir un fichier paramètres.xml personnalisé lors de la création d'un package Web Deploy pour ASP.NET Core?

Vue d'ensemble

Je construis un package Web déployable pouvant être importé dans IIS qui invite automatiquement à définir les paramètres requis par mon application ASP.NET Core. J'ai déjà créé un package qui se déploiera parfaitement, sauf qu'après le déploiement, je dois rechercher/modifier manuellement mon fichier appsettings.json.

Je sais que ce package peut inclure un fichier parameters.xml qui invite et remplit automatiquement mon fichier appsettings.json lors de l'importation d'une application dans IIS. J'ai déjà créé un fichier parameters.xml et je l'ai ajouté manuellement à mon paquet après l'avoir construit. cela a fonctionné comme prévu. J'aimerais juste que msbuild ajoute automatiquement le fichier parameters.xml au paquet pour moi.

Cela se produit déjà dans un projet distinct (ASP.NET MVC 4). Pour cela, je devais simplement placer mon parameters.xml dans le même dossier que mon .csproj. J'ai essayé de faire la même chose ici, mais je n'ai pas eu de chance.

Étapes de reprographie

J'ai créé une application Web ASP.NET Core  ASP.NET Core Web Application Utilisation de .NET Framework sur ASP.NET Core 1.1  .NET Framework with ASP.NET Core 1.1 Je suis ensuite allé publier mon site

 Publish dropdown

'Dossier' sélectionné (juste pour obtenir un modèle)  Folder Publish

J'ai ensuite édité le profil et changé le WebPublishMethod en Package et ajouté les trois lignes en dessous.

<DesktopBuildPackageLocation>bin\$(Configuration)\$(MSBuildProjectName).Zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath>External</DeployIisAppPath>

 Modified publish profile

J'ai ensuite publié une fois de plus. Je reçois maintenant un package WebDeploy que je peux déployer sur IIS.

Génial! mais...

J'aimerais personnaliser le parameters.xml.

 Parameters.xml I'd like to customize

Pour les projets précédents, j'ai pu ajouter un fichier parameters.xml à la racine de mon projet et VS/msbuild l'ajoutait automatiquement à mon paquet publié. Cela fonctionne actuellement pour un projet différent utilisant ASP.NET MVC 4.

J'ai donc essayé la même chose pour ce projet. J'ai d'abord ajouté un fichier settings.json avec un paramètre très simple:

{
  "SettingName": ""
}

Ensuite, j'ai ajouté un fichier parameters.xml qui, je le sais, fonctionne à la racine de mon projet. (Si je remplace manuellement le fichier parameters.xml dans le package Sample.Zip, il invite et remplace correctement mon paramètre lors du déploiement)

<parameters>
  <parameter name="IIS Web Application Name" value="External" tags="IisApp">
    <parameterEntry kind="ProviderPath" scope="IisApp" match="^c:\\users\\joshs\\documents\\visual\ studio\ 2017\\Projects\\Sample\\Sample\\obj\\Release\\net461\\win7-x86\\PubTmp\\Out\\$" />
  </parameter>
  <parameter name="Setting Name" description="Enter a custom app setting" defaultValue="Default Setting Value">
    <parameterEntry kind="TextFile" scope="obj\\Debug\\net461\\win7-x86\\PubTmp\\Out\\appsettings\.json$" match="(?&lt;=\&quot;SettingName\&quot;\s*:\s*\&quot;)[^\&quot;]*" />
  </parameter>
</parameters>

Encore une fois, je fais un clic droit et Publish une fois de plus. Cette fois avec le fichier parameters.xml.

 Project structure with Publish menu shown

Je m'attends à ce que le fichier Sample.Zip contienne le fichier parameters.xml que j'ai ajouté à la racine de mon projet, mais ce n'est pas le cas. C'est exactement la même chose que dans ma publication originale.

Question

Lors de la création d'un package de déploiement Web, comment inclure des paramètres personnalisés dans le fichier parameters.xml?

J'ai déjà essayé ça ...

J'ai déjà regardé https://stackoverflow.com/a/46338042/2494785 , mais sans succès, bien que ma commande diffère légèrement de celle de l'affiche originale.

PS C:\Users\joshs\Documents\Visual Studio 2017\Projects\Sample> & 'C:\Program Files (x86)\Microsoft Visual Studio\2017\E
nterprise\MSBuild\15.0\Bin\MSBuild.exe' .\Sample.sln /t:Sample /p:DeployOnBuild=true /p:PublishProfile=FolderProfile /p:
ProjectParametersXMLFile="C:\Temp\parameters.xml"
6
Josh Schultz

J'ai pu résoudre ce problème à partir du commentaire de peteawood d'un numéro publié sur GitHub.

https://github.com/aspnet/websdk/issues/201#issuecomment-349990389

Dans ASP.NET Core 2.0+, vous pouvez ajouter les éléments suivants à votre fichier .csproj.

<Project Sdk="Microsoft.NET.Sdk.Web">
    .
    .
    <Target Name="AddMoreParameters" AfterTargets="_CreateParameterFiles">
        <Copy SourceFiles="Parameters.xml" DestinationFiles="$(_MSDeployParametersFilePath)" />
    </Target>
</Project>

SourceFiles doit pointer sur l’emplacement de votre fichier parameters.xml du point de vue du fichier .csproj. Mon parameters.xml se trouve dans le même répertoire que mon fichier de projet.

5
Josh Schultz

Je crois que je peux juste passer des paramètres via cmd-line en tant que propriétés pour msbuild. Je comprends pas tout à fait ce que vous avez demandé.
Par exemple, dans la commande suivante, je passe la propriété DeployIisAppPath:

dotnet publish /p:WebPublishMethod=Package /p:DeployIisAppPath=mysite/myapp /p:PublishProfile=rnddev03-core-dev 

et dans le dossier de sortie, nous aurons le fichier xxx.SetParameters.xml avec:

<parameters>
  <setParameter name="IIS Web Application Name" value="mysite/myapp" />
</parameters>
1
Shrike