То, как мы это делаем, - это изменение сборки проекта для преобразования перед упаковкой.
Целью является вызов TransformXml и является частью Microsoft.Web.Publishing.Tasks.dll
В ваших собственных целях его
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
Но он будет включен в сборку VS C # по умолчанию.
Итак
<TransformXml Source="web.config" Transform="web.release.config" Destination="$(DeployPath)\web.config" />
Делает трюк для нас.
Установите эти пути с правильной ItemGroup (скорее всего, «content») и убедитесь, что цель запускается до вызова Package в вашем .csproj, а выходные данные сборки будут содержать «Web.config», как обычно , с правыми преобразованными значениями.
В качестве альтернативы (мы использовали это для пакетов, которые должны быть всем для всех), вы можете использовать этот трюк, чтобы сделать ВСЕ преобразования и включить каждое из них в окончательный пакет.
Затем вы вызываете Msdeploy вручную и используете его директивы пропуска и замены (забыл технический термин), чтобы вывести только правильное во время развертывания
Предполагается, что в вашем пакете есть файл web.usethisone.config, который выглядит как
-skip:objectname=filepath,absolutepath=web\..*\.config
-replace:objectName=filepath,match=.*web\.usethisone\.config,replace=web.config