有没有办法告诉 Markdig 在哪里查找相对于根目录的文件?
我正在从项目的根目录中读取 README.md 文件,该文件由 C# 中的硬编码路径定义。然后通过 Markdig 将其从 Markdown 转换为 FlowDocument 并显示为 WPF 页面。所有这些都有效,除了 README.md 文件中的图像链接不会被渲染。我假设这是因为 Markdig 中的渲染器无法找到它们,不知道查看与项目根目录的关系。这是代码:
public partial class ReadmeWindow : Window
{
public ReadmeWindow()
{
InitializeComponent();
Loaded += OnReadmeLoaded;
}
private static Markdig.MarkdownPipeline BuildPipeline()
{
return new Markdig.MarkdownPipelineBuilder()
.UseSupportedExtensions()
.Build();
}
private void OnReadmeLoaded(object sender, RoutedEventArgs e)
{
var projectDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..\\..\\..\\"));
var readmePath = Path.Combine(projectDirectory, "README.md");
if (File.Exists(readmePath))
{
var markdown = File.ReadAllText(readmePath);
Markdown.ToXaml(markdown);
var xaml = Markdig.Wpf.Markdown.ToXaml(markdown, BuildPipeline());
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml)))
{
using (var reader = new XamlXmlReader(stream, new MyXamlSchemaContext()))
{
if (XamlReader.Load(reader) is FlowDocument document)
{
Viewer.Document = document;
}
}
}
}
else
{
MessageBox.Show("Markdown file not found: " + readmePath);
}
}
您可以在上面的 OnReadmeLoaded() 方法中看到我从项目的根目录读取文件。
有没有办法告诉 Markdig 在哪里查找相对于根目录的文件? 例如,图像位于 project root/Docs:
![key details](Docs/key-details.PNG)
嗯,我不知道Markdig是否有“根”目录的设置,我找不到。但是,我找到了一种让它发挥作用的方法。
假设您要访问的 root/Docs 目录中有两个 PNG 文件,您可以在编译时将它们添加到 csproj 文件中,将它们设置为 ItemGroup 中的 Included 内容。 csproj 文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
.
.
.
<ItemGroup>
<Content Include="Docs\keystore.PNG" Link="Docs\keystore.PNG">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Docs\key-details.PNG" Link="Docs\key-details.PNG">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
当像这样写入 Markdown 文件时,Markdig 解析器将找到这些 Included 文件:
![keystore](Docs/keystore.PNG)
![key details](Docs/key-details.PNG)
瞧!