MsBuild TransformXml导致“错误:无法写入目标文件:路径中的非法字符”

时间:2019-05-16 11:25:19

标签: deployment msbuild web-config webdeploy web.config-transform

我正在尝试编写MsBuild代码以使用在项目内部文件夹中找到的不同转换文件来转换我的Web配置。我想使用这些转换将我的基本web.config映射到不同的结果web.configs,例如“ Transform.Customer1.config”会将“ web.config”转换为“ Web.Customer1.config”。我正在尝试使用包含所有可用的web.config转换文件的ItemGroup来实现此目的,该文件使用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,并引发错误“无法写入目标文件:路径中的非法字符”。我试图在其他MsBuild函数(例如,可以正常工作的Copy标记)中使用OutputFilePath,因此似乎问题已隔离到TransformXml。这有什么问题吗?使用String.Copy时出现某种编码问题?

0 个答案:

没有答案