MSBuild Exec任务失败,带有Unicode文件名?

时间:2013-01-08 21:39:10

标签: msbuild

我正在使用MSBuildFLACLAME管理我的MP3收藏,但遇到文件名中包含非ASCII字符的文件时会失败。

以下,删除项目文件显示问题:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
         ToolsVersion="4.0" DefaultTargets="Default">

  <PropertyGroup>
    <FLAC>"C:\Program Files (x86)\Flac\bin\flac.exe"</FLAC>
  </PropertyGroup>

  <ItemGroup>
    <Decode
      Include="D:\Music\Artists\Kruder Dorfmeister\The K&amp;D Sessions\**" />
  </ItemGroup>

  <Target Name="Default" Inputs="@(Decode)" Outputs="%(Identity).always">
    <Exec Command="$(FLAC) --decode &quot;@(Decode)&quot;" />
  </Target>
</Project>

当它到达"D:\Music\Artists\Kruder Dorfmeister\The K&D Sessions\Part One\02 - Jazz Master (K&D Session™).flac"时,它会失败,并显示以下错误消息:

Default:
  "C:\Program Files (x86)\Flac\bin\flac.exe" --decode "D:\Music\Artists\Kruder Dorfmeister\The K&D Sessions\Part One\02
   - Jazz Master (K&D SessionT).flac"

  02 - Jazz Master (K&D SessionT).flac: ERROR initializing decoder
  init status = FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE

  An error occurred opening the input file; it is likely that it does not exist
  or is not readable.

正如您所看到的,有些事情正在改变“”并将其转换为“ T ”。

但是什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

内置的MSBuild Exec任务将给定的命令写入批处理文件,然后使用cmd /c /q运行它。不幸的是,它使用 OEM代码页编写批处理文件。

这意味着Unicode文件名被破坏了。

您必须编写自己的Exec(或Pipe,甚至ConvertMusic)任务。