為 ASP.NET Core 建構 Web 部署包時如何指定自定義 parameters.xml?
概述
我正在建構一個可部署的 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 1.1 上使用 .NET Framework 創建了一個 ASP.NET Core Web 應用程序
然後我去發布我的網站
然後我編輯了配置文件並將其更改
WebPublishMethod為Package並在其下方添加了三行。<DesktopBuildPackageLocation>bin\$(Configuration)\$(MSBuildProjectName).zip</DesktopBuildPackageLocation> <PackageAsSingleFile>true</PackageAsSingleFile> <DeployIisAppPath>External</DeployIisAppPath>然後我又發表了一篇。現在我得到了一個可以部署到 IIS 的 WebDeploy 包。
偉大的!但…
我想自定義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>






