Я пытаюсь написать код MsBuild для преобразования моих веб-настроек, используя разные файлы преобразования, найденные в папке внутри моего проекта.Я хотел бы использовать преобразования для сопоставления моего базового web.config с различными результирующими web.configs, например «Transform.Customer1.config» преобразует «web.config» в «Web.Customer1.config».Я пытаюсь добиться этого с помощью ItemGroup, содержащей все доступные файлы преобразования web.config, который использует String.Replace для вычисления результирующего имени файла:
<ItemGroup>
<TransformCustomerFile Include="$(MSBuildProjectDirectory)\Deployment\Transform.*.config">
<OutputFilePath>
$([System.String]::Copy('%(FullPath)').Replace('Transform', 'Web'))
</OutputFilePath>
</TransformCustomerFile>
</ItemGroup>
<Target Name="transform" AfterTargets="AfterBuild">
<TransformXml Source="$(MSBuildProjectDirectory)\web.config" Transform="@(TransformCustomerFile)" Destination="%(TransformCustomerFile.OutputFilePath)" />
</Target>
Однако кажется, что TransformXml не похож на OutputFilePath, выбрасываяошибка «Не удалось записать файл назначения: недопустимые символы в пути».Я пытался использовать OutputFilePath в других функциях MsBuild, таких как тег Copy, который работает правильно, поэтому кажется, что проблема изолирована от TransformXml.Что здесь может быть не так?Какая-то проблема кодирования при использовании String.Copy?