3

我创建了一个解决方案,它使用 Costura.Fody nuget 包将引用的程序集合并为嵌入式资源。我想要这个,以便我可以为我的应用程序创建一个 exe。在我添加了对 SkiaSharp 的引用(特别是 nuget 包 SkiaSharp 和 SkiaSharp.Svg)之前,这工作了一段时间。libSkiaSharp.dll 没有嵌入,而是构建在启动项目文件夹中,除非我将 dll 保存在同一个文件夹中,否则我无法自行运行程序 exe。有没有办法来解决这个问题?

以下是重现此问题的步骤:

1. 创建一个新的 WPF 项目
2. 添加 Costura.Fody 和 Fody nuget 包。
3. 添加一个名为 FodyWeavers.xml 的文件,其内容设置为:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura/>
</Weavers> 
  1. 构建并运行 bin/Debug 文件夹中的 exe 文件。请注意,即使您将 exe 移动到新位置,程序也会启动。
  2. 添加 SkiaSharp 和 SkiaSharp.Svg nuget 包。
  3. 获取一个 svg 文件并将其添加到您的项目目录
  4. 将以下代码添加到 MainWindow 构造函数:

    var svg = 新的 SKSvg(); svg.Load("image.svg"); SKCanvas 画布 = new SKCanvas(new SKBitmap()); canvas.DrawPicture(svg.Picture);

  5. 请注意,如果您将图像文件和 exe 复制并放在另一个目录中,则 exe 将无法启动。这是因为它找不到 libSkiaSharp.dll。

4

2 回答 2

3

在您的项目中创建 Costura32 和/或 Costura64 文件夹。根据位数将 libSkiaSharp.dll 复制到适当的目录中。Costura 将自动从这些目录中解压缩并加载本机二进制文件。

于 2018-10-10T20:53:14.753 回答
1

Have you tried the following:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <IncludeAssemblies>
        libSkiaSharp
    </IncludeAssemblies>
  </Costura>
</Weavers>
于 2018-11-12T14:52:32.853 回答