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)
尝试使用此处描述的解决方案之一对其进行转义。
在这种情况下,%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 中,您必须恢复该操作...
对我来说,这似乎有点老套。也许您可以传递指向包含发行说明本身的文件的路径?
如何将大文本作为参数传递给 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)
尝试使用此处描述的解决方案之一对其进行转义。
在这种情况下,%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 中,您必须恢复该操作...
对我来说,这似乎有点老套。也许您可以传递指向包含发行说明本身的文件的路径?