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.
J'ai créé une application Web ASP.NET Core Utilisation de .NET Framework sur ASP.NET Core 1.1 Je suis ensuite allé publier mon site
'Dossier' sélectionné (juste pour obtenir un modèle)
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>
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.
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="(?<=\"SettingName\"\s*:\s*\")[^\"]*" />
</parameter>
</parameters>
Encore une fois, je fais un clic droit et Publish
une fois de plus. Cette fois avec le fichier parameters.xml.
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.
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à 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"
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.
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>