Asp.net-Core

為 ASP.NET Core 建構 Web 部署包時如何指定自定義 parameters.xml?

  • May 2, 2018

概述

我正在建構一個可部署的 Web 包,它可以導入到 IIS 中,它會自動提示我的 ASP.NET Core 應用程序所需的設置。我已經創建了一個可以很好地部署的包,除了在部署之後,我需要手動查找/編輯我的 appsettings.json 文件。

我知道這個包可以包含一個parameters.xml文件,它會在將應用程序導入 IIS 時自動提示並填寫我的 appsettings.json。我已經製作了一個parameters.xml文件,並在建構後手動將其添加到我的包中;它按預期工作。我只想讓 msbuild 自動為我將 parameters.xml 文件添加到包中。

我的一個單獨的項目(ASP.NET MVC 4)已經這樣做了。為此,我只需將我parameters.xml的 .csproj 放在同一個文件夾中。我在這裡嘗試做同樣的事情,但沒有運氣。

複製步驟

ASP.NET Core Web 應用程序 我在 ASP.NET Core 1.1 上使用 .NET Framework 創建了一個 ASP.NET Core Web 應用程序.NET 框架與 ASP.NET Core 1.1 然後我去發布我的網站

發布下拉菜單

選定的“文件夾”(只是為了獲取模板) 文件夾發布

然後我編輯了配置文件並將其更改WebPublishMethodPackage並在其下方添加了三行。

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

修改的發布配置文件

然後我又發表了一篇。現在我得到了一個可以部署到 IIS 的 WebDeploy 包。

偉大的!但…

我想自定義parameters.xml。

Parameters.xml 我想自定義

對於以前的項目,我可以將parameters.xml文件添加到我的項目根目錄,VS/msbuild 會自動將它添加到我發布的包中。這目前適用於使用 ASP.NET MVC 4 的不同項目。

所以,我為這個項目嘗試了同樣的事情。首先,我添加了一個設置非常簡單的 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="(?<=\"SettingName\"\s*:\s*\")[^\"]*" />
 </parameter>
</parameters>

再次,我右鍵點擊Publish一次。這次是parameters.xml 文件。

顯示發布菜單的項目結構

我希望 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"

我能夠從 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。Myparameters.xml位於與我的項目文件相同的目錄中。

我相信我可以通過命令行傳遞參數作為 msbuild 的屬性。這不完全是你所要求的,我理解。

例如,在以下命令中,我正在傳遞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>

引用自:https://stackoverflow.com/questions/46777717