为 ASP.NET Core 构建 Web 部署包时如何指定自定义 parameters.xml?
How to specify a custom parameters.xml when building a Web Deploy package for ASP.NET Core?
概述
我正在构建一个可以导入到 IIS 中的可部署 Web 包,它会自动提示我的 ASP.NET 核心应用程序所需的设置。我已经创建了一个可以很好部署的包,除了部署之后,我需要手动 find/edit 我的 appsettings.json 文件。
我知道这个包可以包含一个 parameters.xml
文件,当将应用程序导入 IIS 时,该文件会自动提示并填写我的 appsettings.json。我已经制作了一个 parameters.xml 文件,并在构建后手动将其添加到我的包中;它按预期工作。我只想让 msbuild 自动将 parameters.xml 文件添加到包中。
我的一个单独项目 (ASP.NET MVC 4) 已经这样做了。为此,我只需要将 parameters.xml
放在与 .csproj 相同的文件夹中。我尝试在这里做同样的事情,但没有成功。
重现步骤
我创建了一个 ASP.NET 核心 Web 应用程序
在 ASP.NET Core 1.1 上使用 .NET Framework
然后我去发布我的网站
已选择'Folder'(只为获取模板)
然后我编辑了配置文件并将 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 中包含自定义设置?
我已经试过了...
我已经看过 ,但运气不好,尽管我的命令与原始发布者略有不同。
PS C:\Users\joshs\Documents\Visual Studio 2017\Projects\Sample> & 'C:\Program Files (x86)\Microsoft Visual Studio17\E
nterprise\MSBuild.0\Bin\MSBuild.exe' .\Sample.sln /t:Sample /p:DeployOnBuild=true /p:PublishProfile=FolderProfile /p:
ProjectParametersXMLFile="C:\Temp\parameters.xml"
我相信我可以通过 cmd 行将参数作为 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>
我能够根据 peteawood 在 GitHub.
上发布的问题的评论解决这个问题
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
应该从 .csproj
文件的角度指向您的 parameters.xml
文件的位置。我的 parameters.xml
位于与我的项目文件相同的目录中。
概述
我正在构建一个可以导入到 IIS 中的可部署 Web 包,它会自动提示我的 ASP.NET 核心应用程序所需的设置。我已经创建了一个可以很好部署的包,除了部署之后,我需要手动 find/edit 我的 appsettings.json 文件。
我知道这个包可以包含一个 parameters.xml
文件,当将应用程序导入 IIS 时,该文件会自动提示并填写我的 appsettings.json。我已经制作了一个 parameters.xml 文件,并在构建后手动将其添加到我的包中;它按预期工作。我只想让 msbuild 自动将 parameters.xml 文件添加到包中。
我的一个单独项目 (ASP.NET MVC 4) 已经这样做了。为此,我只需要将 parameters.xml
放在与 .csproj 相同的文件夹中。我尝试在这里做同样的事情,但没有成功。
重现步骤
我创建了一个 ASP.NET 核心 Web 应用程序
已选择'Folder'(只为获取模板)
然后我编辑了配置文件并将 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 中包含自定义设置?
我已经试过了...
我已经看过
PS C:\Users\joshs\Documents\Visual Studio 2017\Projects\Sample> & 'C:\Program Files (x86)\Microsoft Visual Studio17\E
nterprise\MSBuild.0\Bin\MSBuild.exe' .\Sample.sln /t:Sample /p:DeployOnBuild=true /p:PublishProfile=FolderProfile /p:
ProjectParametersXMLFile="C:\Temp\parameters.xml"
我相信我可以通过 cmd 行将参数作为 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>
我能够根据 peteawood 在 GitHub.
上发布的问题的评论解决这个问题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
应该从 .csproj
文件的角度指向您的 parameters.xml
文件的位置。我的 parameters.xml
位于与我的项目文件相同的目录中。