Web 应用程序 Web 包 - 禁用自动参数化

问题描述

我正在尝试为 ASP.NET MVC 应用程序准备一个 Web 包,该应用程序可以手动(或使用 PowerShell 脚本)以及从 DevOps CI/CD yaml 管道部署,我想利用 XML 变量替换(使用文件转换任务)。

但我一开始就卡住了: 如果没有自动添加 web.config 连接字符串参数化(从我读到的内容会导致提到的变量替换出现问题),我无法生成 Web 包。

我正在使用如下命令:

msbuild.exe "my.WebApp.sln" 
-p:DeployOnBuild=true -p:WebPublishMethod=Package -p:PackageAsSingleFile=true
-p:PublishProfile=Release -p:PackageLocation=C:\webdeploy-package/myWebApp/
-p:AutoparameterizationWebConfigConnectionStrings=false
-p:TransformWebConfigEnabled=true -p:ProfileTransformWebConfigEnabled=true
/p:platform="any cpu" /p:configuration="Release" /nologo /nr:false

但尽管禁用了自动参数化,结果包仍包含“[name]-Web.config 连接字符串”形式的连接字符串参数。

我尝试通过在调用添加 -p:UseWPP_copyWebApplication=true -p:PipelineDependsOnBuild=false 来使用遗留任务,但没有走运。 检查通过 msbuild 参数禁用自动参数化可能是问题所在(因为我在某处看到它不起作用)并在 csproj 中第一个非条件 <AutoparameterizationWebConfigConnectionStrings>false</AutoparameterizationWebConfigConnectionStrings> 的末尾添加标签 PropertyGroup文件...还尝试通过添加带有连接字符串参数的 parameters.xml 文件自定义包的参数化,但无论如何都添加自动文件

我在生成的包中看到的不同之处在于,当禁用自动参数化时,参数没有认值,并且 parameters.xml(包内)不包含 parameterEntry 标记(因此没有匹配和范围属性也是)。

我想我遗漏了一些重要的东西......或者我匆忙检查了我需要的东西,但不知何故它滑倒了......希望有人能提供宝贵的提示或指出正确的方向。

我有一个项目在 DevOps 部署管道中运行良好,但无法发现是什么使它们的工作方式不同。

差异区域 当前项目 其他项目
.NET Framework 版本 v. 4.5 v. 4.8
ASP.NET MVC 版本 v. 4 v. 5
MSBuild 工具集版本 Toolsversion="4.0" Toolsversion="Current"
Visual Studio 版本 v. 16.9.6(2019 企业版) v. 16.9.4(2019 企业版)

parameters.xml 内容

<?xml version="1.0" encoding="utf-8" ?>
<parameters>
  <parameter name="dbContext"
             description="The connection string to the database."
             tags="sqlConnectionString">
    <parameterEntry kind="XmlFile"
                    scope="\\[Ww]eb\.config$"
                    match="/configuration/connectionStrings
                           /add[@name='dbContext']
                           /@connectionString" />
  </parameter>
</parameters>

发布.pubxml

<?xml version="1.0" encoding="utf-8"?>
<Project Toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>Package</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedplatform>Any cpu</LastUsedplatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <DesktopBuildPackageLocation>PublishPackage/Release/my.WebApp.zip</DesktopBuildPackageLocation>
    <PackageAsSingleFile>true</PackageAsSingleFile>
    <DeployIisAppPath>my.WebApp</DeployIisAppPath>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <Enableupdateable>True</Enableupdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>DonotMerge</WDPMergeOption>
    <PublishDatabaseSettings>
      <Objects xmlns="">
        <ObjectGroup Name="dbContext" Order="1" Enabled="False">
          <Destination Path="" />
          <Object Type="DbCodeFirst">
            <Source Path="DBMigration" DbContext="my.dbContext,my.WebApp" MigrationConfiguration="my.WebApp.Migrations.Configuration,my.WebApp" Origin="Configuration" />
          </Object>
        </ObjectGroup>
      </Objects>
    </PublishDatabaseSettings>
  </PropertyGroup>
  <ItemGroup>
    <MSDeployParameterValue Include="$(DeployParameterPrefix)dbContext-Web.config Connection String" />
  </ItemGroup>
</Project>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)