是否可以使用Yaml.DotNet或其他库从c#动态构建Yaml文档?
我理解如何使用序列化完成此操作,但这需要从对象结构开始.
我正在寻找一种方法来动态创建Yaml文档节点,就像使用XElement.Add(object)方法的Xml一样.
我使用以下代码片段将项目的动态模型序列化为字符串(最终导出到 YAML 文件)。
dynamic exportModel = exportModelConvertor.ToDynamicModel(project);
var serializerBuilder = new SerializerBuilder();
var serializer = serializerBuilder.EmitDefaults().DisableAliases().Build();
using (var sw = new StringWriter())
{
serializer.Serialize(sw, exportModel);
string result = sw.ToString();
}
Run Code Online (Sandbox Code Playgroud)
任何多行字符串,如下所示:
propertyName = "One line of text
followed by another line
and another line"
Run Code Online (Sandbox Code Playgroud)
以以下格式导出:
propertyName: >
One line of text
followed by another line
and another line
Run Code Online (Sandbox Code Playgroud)
请注意额外的(不需要的)换行符。
根据这个YAML Multiline 指南,这里使用的格式是折叠块标量样式。有没有办法使用 YamlDotNet 将所有多行字符串属性的输出样式更改为文字块标量样式或流标量样式之一?
YamlDotNet文档展示了如何使用 WithAttributeOverride 将 ScalarStyle.DoubleQuoted 应用于特定属性,但这需要类名,并且要序列化的模型是动态的。这还需要列出要更改的每个属性(其中有很多)。我想立即更改所有多行字符串属性的样式。
我们的应用程序运行各种操作并在日志窗口中显示输出。一种操作是使用robocopy在文件夹之间复制文件。
这可以正常工作,直到 robocopy 输出包含 unicode 字符。我知道我需要使用 /unicode 选项,但我似乎得到的只是胡言乱语。
这是我的简化代码示例:
class Program
{
static void Main(string[] args)
{
StreamReader outputReader = null;
StreamReader errorReader = null;
using (Process process = new Process())
{
Encoding encoding = Encoding.Default;
if (encoding != null)
{
process.StartInfo.StandardOutputEncoding = encoding;
process.StartInfo.StandardErrorEncoding = encoding;
}
process.StartInfo.FileName = @"C:\Windows\system32\robocopy.exe";
process.StartInfo.Arguments = @"""D:\temp\????????? ????????? ?????"" ""D:\temp\?????? ????????? ?????"" /unicode";
process.StartInfo.ErrorDialog = false;
process.StartInfo.LoadUserProfile = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个ANT模式解析器作为大型服务器项目的一部分.
在这篇文章的答案中有一些很好的ANT模式示例:我如何使用Nant/Ant命名模式?但是,我仍然对一些可能的排列感到困惑.
这里的ANT模式文档的一个例子http://nant.sourceforge.net/release/0.85/help/types/fileset.html如下:
**/test/**匹配路径中包含test元素的所有文件,包括test作为文件名.
我的理解是**匹配一个或多个目录以及这些目录下的文件.所以我希望**/test/**匹配src/test/subfolder/file.txt,test/file2.txt但这句话似乎暗示它也会匹配一个名为的文件src/test.这是正确的,即使在模式/之后有一个test吗?
此外,尚不清楚以下模式是否有效:
folder**
folder1/folder**
**folder/file.txt
Run Code Online (Sandbox Code Playgroud)
我想他们会像以前一样工作
folder*/**
folder1/folder*/**
**/*folder/file.txt
Run Code Online (Sandbox Code Playgroud)
但是他们被允许了吗?