msbuild - String.Replace导致替换“;”用“%3B”

时间:2018-01-28 21:28:34

标签: msbuild

Target Element (MSBuild)

输入 :可选属性。 形成此目标输入的文件。多个文件由分号分隔。将文件的时间戳与输出中文件的时间戳进行比较,以确定目标是否是最新的。有关更多信息,请参阅增量构建,如何:增量构建和转换。

我将文件与分号分开,如文档所述。

此外,在使用这些文件的命令(aka recipe)中,它们被消耗了!

问题
为什么MSBuild告诉我没有输入存在?

XML是:

<Target Name="micropython_prebuild_create_qstrdefs" Inputs="$(uP_PrebuildSrc)" Outputs="$(uP_GenHdrFolder)\qstrdefs.generated.h">

输出结果为:

  

输入文件“Source \ py \ _vm.c; Source \ py \ vstr.c; Source \ py \ warning.c”   不存在。

更新

我发现日志看起来在哪里 的 XML

<Target Name="micropython_prebuild">

    <PropertyGroup>
        <PreBuildProperties> 
        uP_PrebuildPyExe="$(ProjectDir)\Source\micropython\py\make_prebuild_wrapper.exe";   
        uP_GenHdrFolder=$(ObjectFolder)\genhdr;
        uP_QSTR_GEN_EXTRA_CFLAGS=-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB -DN_ARM -DN_XTENS;
        uP_SrcFolder=$(ProjectDir)\Source\micropython;
        uP_MpyCrossExe="$(ProjectDir)\Source\micropython\mpy-cross\mpy-cross.exe";
        uP_PrebuildSrc=$(CppFiles.Replace('Source\micropython\minimal\frozen_mpy.c;',''));
        </PreBuildProperties>
    </PropertyGroup>

    <MakeDir Directories="$(ObjectFolder)\genhdr" />

    <MSBuild
        Projects="$(MSBuildProjectFile)"
        Condition="'' == ''"
        Targets="micropython_prebuild_mpversion"
        Properties="$(PreBuildProperties)"
    />
...

日志:

Task "MSBuild" (TaskId:7)
  Task Parameter:Projects=ATI_micropython.vcxproj (TaskId:7)
  Task Parameter:Targets=micropython_prebuild_mpversion (TaskId:7)
  Task Parameter:
      Properties=
uP_PrebuildSrc=Source\micropython\extmod\machine_i2c.c;Source\micropython\extmod\machine_mem.c;

Global Properties: (TaskId:7)
uP_PrebuildSrc=Source\micropython\extmod\machine_i2c.c%3bSource\micropython\extmod\machine_mem.c%3b

进行测试,如果我更改了行uP_PrebuildSrc=$(CppFiles.Replace('Source\micropython\minimal\frozen_mpy.c;',''));

uP_PrebuildSrc=$(CppFiles);
NOT %3b中获得了奇怪的uP_PrebuildSrc字符。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

带有AppendFormat()的StringBuilder类也会给出错误的结果,所以我想这不仅仅是您所建议的Replace函数的问题。 使用内联任务通过以下操作重现了该问题:

ssh root@app.xxx.com
cd /home/xxx/source/

这是试图在C ++ Linux项目中使用$(AdditionalSourcesToCopyMapping)。 然后,在输出日志中,我看到我的FileMap用“%3b”字符代替了“;”。 有人怀疑为什么会发生这种情况吗?