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

问题描述 投票:0回答:1

我如何能够将一个大的文本作为参数传递给 Exec Command.一个包含新行的参数(CRLF)。

目标文件。

  <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."

猜测一个答案可能是通过一个函数转换格式,然后发送格式化的文本。

也欢迎其他方法,关键部分要保留的是,我想用一个 "main method "来运行一个控制台应用程序,得到这些参数(不在乎它是exe还是DLL),一些猜测可能是Boxunbox,如果可能的话,其他输入的参数,用DLLCompile代替exec这样的参数(不知道是否可能)。

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

有什么办法可以传递这样的参数吗(如 软件包发布说明)

visual-studio msbuild nuget console-application
1个回答
1
投票

尝试使用这里描述的解决方案之一来转义它。

https:/docs.microsoft.comen-usvisualstudiomsbuild如何在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中,你必须恢复这个操作... ...

对我来说,这似乎有点黑。也许你可以传递一个路径,指向一个包含发行说明的文件?

© www.soinside.com 2019 - 2024. All rights reserved.