0

我想对自定义文件使用配置转换,如果我替换???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  

使用转换进行预览的目标的正确名称是什么(不更改解决方案中的文件)?web.config使用 webDeploy 进行预览时的工作方式

<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"

但是预览仍然没有改变配置(当我定义输出消息时它也不会出现)。当我在发布屏幕中单击“预览”时会发生什么黑魔法?

我已经尝试过目标:TransformWebConfigCore,,,CopyAllFilesToSingleFolderForPackageGatherAllFilesToPublish

4

1 回答 1

2

我成功了。

目标名称应该是不存在的自定义名称。那么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>

当然可能有更好的方法:在 from 的目标CollectWebConfigsToTransformMicrosoft.Web.Publishing.targets,它应该以某种方式知道有更多用于转换的配置文件。但目前不知道。

于 2019-03-14T14:17:17.413 回答