我使用 VSTS 来构建和发布包含多个 aspnet 项目的解决方案。在解决方案级别是一个文件夹,其中包含用于开发/测试和生产的所有数据库连接字符串。这些文件作为文件链接包含在项目中,并可选择始终复制它们。Web.config 转换根据构建配置将 configSource 更改为所需的文件。
<connectionStrings configSource="Configuration\ConnectionStrings.Development.config" xdt:Transform="Replace" />
这一切都很好。对于 VSTS VSBuild 任务,我有这些参数来为 webdeploy 生成一个 zip 文件
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)" /p:DefineConstants="$(CompilerConstants)"
现在我的问题来了:我想将当前项目名称作为连接字符串中的应用程序名称,以查看 SQL Server 探查器中查询的来源。我在过去使用了一个额外的构建目标
<Target Name="ReplaceAppNamesInConnectionStrings">
<FindAndReplaceInFile FileName="$(PublishDir)\configuration\ConnectionStrings.Development.config" SearchString="@@APPNAME@@" ReplacementString="$(ProjectName)" FileMustExist="False" />
<FindAndReplaceInFile FileName="$(PublishDir)\configuration\ConnectionStrings.Production.config" SearchString="@@APPNAME@@" ReplacementString="$(ProjectName)" FileMustExist="False" />
</Target>
我怎样才能用 VSTS 做到这一点?似乎它总是在创建 zip 文件之前将文件从链接源重新复制到输出,我可以将其替换。我尝试了构建后事件或 VSTS 替换令牌步骤。