MSBuild - 控制台 (Exec) 传递一个带有新行的大字符串作为参数

MSBuild - Console (Exec) pass a large string with new lines as a parameter

如何将大文本作为参数传递给 Exec Command。 包含新行的参数 (CR/LF).

目标文件:

  <PropertyGroup>
    <Notes>$(PackageReleaseNotes)</Notes>
  </PropertyGroup>

  <Exec Command="$(ExeFile) $(Notes)" />

在我的 CsProj 文件中:

<PackageReleaseNotes>
  This is a test asdhasjdh asdkjadhkjasfh asfasfjkasd
  asdaskjhksdf asdjashdka asdkajhasd aaasdas asdkjhjasd asdaf asdasdasd asd,asdad.
  asdasda.asd asdad MHM MHM-MHM
</PackageReleaseNotes>

会出现如下错误:

Error: " exited with code 9009."

猜答案可能是 convert/format 通过函数输入,然后发送格式化文本。

也欢迎使用其他方法,要保留的关键部分是我想 运行 一个带有 "main method" 的控制台应用程序获取这些参数(不管它是否exe 或 DLL),一些猜测可能是 Box/unbox,如果可能的话,其他类型的参数,使用 DLL/Compile 而不是带有类似参数的 exec(不知道是否可能)。

如果我把文本改成单行,可以简单地传递,但我希望它是多行的。

有什么方法可以传递这样的参数吗? (如 PackageReleaseNotes

尝试使用此处描述的解决方案之一对其进行转义。

https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-escape-special-characters-in-msbuild?view=vs-2019

在这种情况下,%3B 代表分号字符,但双引号也应该有效。

<Compile Include="MyFile.cs%3BMyClass.cs"/>

编辑:

此处替换CRLF字符并插入^符号,代表CMD中的换行符。

  <PropertyGroup>
    <Notes>This is a test asdhasjdh asdkjadhkjasfh asfasfjkasd
      asdaskjhksdf asdjashdka asdkajhasd aaasdas asdkjhjasd asdaf asdasdasd asd,asdad.
      asdasda.asd asdad MHM MHM-MHM</Notes>
    <trimmed>$(Notes.Replace('%0D%0A','^'))</trimmed>
  </PropertyGroup>
  <Target Name="CustomAfterBuild" AfterTargets="Build">
    <Message Text="$(Notes)" Importance="high"/>
    <Message Text="$(trimmed)" Importance="high"/>
    <Exec Command="cmd.exe $(trimmed)"/>
  </Target>

在您的 CMD 中,您必须恢复该操作...

对我来说,这似乎有点老套。也许您可以传递指向包含发行说明本身的文件的路径?