MSBuild - Консоль (Exe c) передает большую строку с новыми строками в качестве параметра - PullRequest
0 голосов
/ 17 июня 2020

Как передать большой текст в качестве параметра 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."

Предположительно, ответ можно преобразовать / отформатировать с помощью функции, а затем отправить форматированный текст.

Альтернативные способы также приветствуются, ключевую часть следует сохранить: я хочу запустить консольное приложение с «основным методом», получая эти параметры (неважно, будет ли это exe или DLL), некоторые предположения могут быть Box / unbox, другие типизированные параметры, если возможно, используя DLL / Compile вместо exe c с таким параметром (не знаю, возможно ли это).

Если я изменю текст на одиночный строку, можно передать ее просто, но я хочу, чтобы она была многострочной.

Есть ли способ передать такой параметр? (например, PackageReleaseNotes )

1 Ответ

1 голос
/ 17 июня 2020

попробуйте избежать его с помощью одного из описанных здесь решений.

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

EDIT :

Здесь заменяются символы 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 вам нужно отменить эту операцию, хотя ...

Мне это кажется немного взломанным. Может быть, вы можете пройти по пути, который указывает на файл, содержащий сами примечания к выпуску?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...