我的构建:
生成包含以下文件的工件(nuget包):
cspkg是一个有效的可部署包。问题是它包含一个预转换的web.config,因为转换发生在部署时。请参阅transforms和variable substitution的八达通文档以供参考。
如何使用驻留在部署包中的转换后的web.config覆盖cspkg中的web.config?
我有powershell和完整的.net框架供我使用。
或者,如果解压缩cspkg更有意义,覆盖文件然后重新打包,我认为这是可以接受的。我不知道该怎么做。
我知道Save-AzureServiceProjectPackage存在,但我无法运行,缺少文档。
答案 0 :(得分:1)
我有一个包含2个步骤的Octopus项目:首先是在IIS中托管的Dev,第二个是在Azure中托管的Prod。 TeamCity推出了2个nuget包:一个是OctoPack for Dev,另一个是NuGet Pack for Prod with cspkg。
我在Azure.ccproj中有这个目标:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform" BeforeTargets="BeforeBuild" Condition="'$(TEAMCITY_VERSION)' != ''">
<PropertyGroup>
<SourceTransformFile>..\Api\Web.config</SourceTransformFile>
<TransformFile>..\Api\Web.Prod.config</TransformFile>
<DestinationTransformFile>..\Api\Web.config</DestinationTransformFile>
</PropertyGroup>
<TransformXml
Source="$(SourceTransformFile)"
Transform="$(TransformFile)"
Destination="$(DestinationTransformFile)" />
</Target>
条件允许仅在构建服务器上运行,而不是在本地运行。
答案 1 :(得分:1)
我通过将解决方案发送到Octopus Deploy解决了这个问题,它允许我在Octopus中运行.config转换。运行转换后,我使用自定义PowerShell脚本创建.cspkg包。
我已经写了一篇关于八达通部署部分的详尽文章。 You can find it here: http://henrihietala.github.io/
答案 2 :(得分:0)
根据八达通支持论坛Brad Webber's post中包含的信息,我已经找到了如何做我需要的事情。
我发布了一个公共git repo,其中包含一个简单的示例解决方案和文档here。