web-dev-qa-db-ja.com

ASP.NET Core用のWeb配置パッケージを構築するときにカスタムparameters.xmlを指定するにはどうすればよいですか?

概要概要

IISにインポートできるデプロイ可能なWebパッケージを構築しています。これにより、ASP.NET Coreアプリケーションに必要な設定の入力が自動的に求められます。デプロイ後を除いて、正常にデプロイされるパッケージを既に作成しました。 、appsettings.jsonファイルを手動で検索/編集する必要があります。

このパッケージには、アプリをIISにインポートするときにappsettings.jsonに自動的にプロンプ​​トを表示して入力するparameters.xmlファイルを含めることができることを知っています。すでにparameters.xmlファイルを作成し、ビルド後に手動でパッケージに追加しました。期待どおりに機能しました。 msbuildにparameters.xmlファイルをパッケージに自動的に追加してもらいたいのですが。

私の別のプロジェクト(ASP.NET MVC 4)はすでにこれを行っています。そのためには、parameters.xmlを.csprojと同じフォルダーに配置するだけで済みました。ここでも同じことをしてみましたが、うまくいきませんでした。

再現手順

ASP.NET Core Webアプリケーションを作成しました ASP.NET Core Web Application ASP.NET Core1.1での.NETFrameworkの使用 .NET Framework with ASP.NET Core 1.1 それから私は自分のウェブサイトを公開しに行きました

Publish dropdown

選択された「フォルダ」(テンプレートを取得するためだけに) Folder Publish

次に、プロファイルを編集してWebPublishMethodPackageに変更し、その下に3行を追加しました。

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

Modified publish profile

その後、もう一度公開しました。これで、IISに展開できるWebDeployパッケージを入手できます。

すごい!だが...

Parameters.xmlをカスタマイズしたいのですが。

Parameters.xml I'd like to customize

以前のプロジェクトでは、parameters.xmlファイルをプロジェクトルートに追加することができ、VS/msbuildはそれを公開パッケージに自動的に追加しました。これは現在、ASP.NET MVC4を使用する別のプロジェクトで機能します。

それで、私はこのプロジェクトで同じことを試みました。まず、非常に単純な設定でsettings.jsonを追加しました。

{
  "SettingName": ""
}

次に、動作することがわかっているparameters.xmlファイルをプロジェクトルートに追加しました。 (Sample.Zipパッケージのparameters.xmlファイルを手動で置き換えると、デプロイ時に設定が正しく表示され、置き換えられます)

<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>

もう一度、右クリックしてPublishをもう一度押します。今回はparameters.xmlファイルを使用します。

Project structure with Publish menu shown

Sample.Zipには、プロジェクトルートに追加したparameters.xmlが含まれていると思いますが、含まれていません。それは私の最初の出版物とまったく同じです。

質問

Webデプロイパッケージを作成する際のビルドプロセス中に、parameters.xmlにカスタム設定をどのように含めますか?

私はすでにこれを試しました...

私はすでに https://stackoverflow.com/a/46338042/2494785 を見ましたが、私のコマンドは元のポスターとは少し異なっていましたが、運がありませんでした。

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"
8
Josh Schultz

GitHubに投稿された問題からのpeteawoodのコメントからこれを解決することができました。

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

ASP.NET Core 2.0以降では、.csprojに以下を追加できます。

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

SourceFilesは、parameters.xmlファイルの観点から.csprojファイルの場所を指している必要があります。私のparameters.xmlは、私のプロジェクトファイルと同じディレクトリにあります。

5
Josh Schultz

Msbuildのプロパティとしてcmd-lineを介してパラメータを渡すことができると思います。それはあなたが私が理解していることを完全に求めたものではありません。
たとえば、次のコマンドでは、DeployIisAppPathプロパティを渡します。

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

出力フォルダーに、次のxxx.SetParameters.xmlファイルを取得します。

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