使用 Webdeploy 进行配置转换,预览不起作用
Config transformation with Webdeploy, Preview not working
我想对自定义文件使用配置转换,如果我用 MSDeployPublish
替换 ???
,Preview
功能不起作用,它会替换解决方案中的本地文件。然而,发布工作无需使用 Preview
保持本地文件不变。
配置文件:
AppSettings.config
└AppSettings.Test.config
└AppSettings.Stage.config
└AppSettings.Release.config
ConnectionString.config
└ConnectionString.Test.config
└ConnectionString.Stage.config
└ConnectionString.Release.config
使用转换进行预览的目标的正确名称是什么(不更改解决方案中的文件)?使用 webDeploy
进行预览时 web.config
的工作方式
<Target Name="???">
<TransformXml Source="App_Config\AppSettings.config" Destination="App_Config\AppSettings.config" Transform="App_Config\AppSettings.$(Configuration).config" />
<TransformXml Source="App_Config\ConnectionStrings.config" Destination="App_Config\ConnectionStrings.config" Transform="App_Config\ConnectionStrings.$(Configuration).config" />
</Target>
我不想使用像 SlowCheetah 这样的任何扩展,只是内置功能。
<Target Name="Build">
也有效
更新 1
我在不更改本地配置文件的情况下成功发布:
Destination="$(_PackageTempDir)\App_Config\ConnectionStrings.config"
但是预览仍然没有转换配置(当我定义输出消息时它也没有出现)。当我在发布屏幕中单击 "Preview" 时发生了什么黑魔法?
我试过目标:TransformWebConfigCore
,CopyAllFilesToSingleFolderForPackage
,GatherAllFilesToPublish
我做到了。
目标名称应该是一个不存在的自定义名称。然后 AfterTargets
属性应指定为 Package
的值。该目标几乎发生在链的末尾,并确保创建 $(_PackageTempDir)
目录。
转换是在包目录中完成的。这样可以确保在使用 webdeploy 进行预览时,它将正确比较文件并且不会更改源代码管理中的本地文件。
定义如下:
<Target Name="CustomConfigTransform" AfterTargets="Package">
<TransformXml Source="App_Config\AppSettings.config" Destination="$(_PackageTempDir)\App_Config\AppSettings.config" Transform="App_Config\AppSettings.$(Configuration).config" />
<TransformXml Source="App_Config\ConnectionStrings.config" Destination="$(_PackageTempDir)\App_Config\ConnectionStrings.config" Transform="App_Config\ConnectionStrings.$(Configuration).config" />
</Target>
当然可以有更好的方法:在 Microsoft.Web.Publishing.targets
的目标 CollectWebConfigsToTransform
中,它应该以某种方式知道有更多配置文件用于转换。但目前还不知道。
我想对自定义文件使用配置转换,如果我用 MSDeployPublish
替换 ???
,Preview
功能不起作用,它会替换解决方案中的本地文件。然而,发布工作无需使用 Preview
保持本地文件不变。
配置文件:
AppSettings.config
└AppSettings.Test.config
└AppSettings.Stage.config
└AppSettings.Release.config
ConnectionString.config
└ConnectionString.Test.config
└ConnectionString.Stage.config
└ConnectionString.Release.config
使用转换进行预览的目标的正确名称是什么(不更改解决方案中的文件)?使用 webDeploy
进行预览时web.config
的工作方式
<Target Name="???">
<TransformXml Source="App_Config\AppSettings.config" Destination="App_Config\AppSettings.config" Transform="App_Config\AppSettings.$(Configuration).config" />
<TransformXml Source="App_Config\ConnectionStrings.config" Destination="App_Config\ConnectionStrings.config" Transform="App_Config\ConnectionStrings.$(Configuration).config" />
</Target>
我不想使用像 SlowCheetah 这样的任何扩展,只是内置功能。
<Target Name="Build">
也有效
更新 1
我在不更改本地配置文件的情况下成功发布:
Destination="$(_PackageTempDir)\App_Config\ConnectionStrings.config"
但是预览仍然没有转换配置(当我定义输出消息时它也没有出现)。当我在发布屏幕中单击 "Preview" 时发生了什么黑魔法?
我试过目标:TransformWebConfigCore
,CopyAllFilesToSingleFolderForPackage
,GatherAllFilesToPublish
我做到了。
目标名称应该是一个不存在的自定义名称。然后 AfterTargets
属性应指定为 Package
的值。该目标几乎发生在链的末尾,并确保创建 $(_PackageTempDir)
目录。
转换是在包目录中完成的。这样可以确保在使用 webdeploy 进行预览时,它将正确比较文件并且不会更改源代码管理中的本地文件。
定义如下:
<Target Name="CustomConfigTransform" AfterTargets="Package">
<TransformXml Source="App_Config\AppSettings.config" Destination="$(_PackageTempDir)\App_Config\AppSettings.config" Transform="App_Config\AppSettings.$(Configuration).config" />
<TransformXml Source="App_Config\ConnectionStrings.config" Destination="$(_PackageTempDir)\App_Config\ConnectionStrings.config" Transform="App_Config\ConnectionStrings.$(Configuration).config" />
</Target>
当然可以有更好的方法:在 Microsoft.Web.Publishing.targets
的目标 CollectWebConfigsToTransform
中,它应该以某种方式知道有更多配置文件用于转换。但目前还不知道。