问题描述
我正在尝试为 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 企业版) |
<?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 (将#修改为@)