Fody Costura不会嵌入SkiaSharp DLL

我创建了一个使用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>
  • 在bin / Debug文件夹中构建并运行exe文件 . 请注意,即使将exe移动到新位置,程序也会启动 .

  • 添加SkiaSharp和SkiaSharp.Svg nuget包 .

  • 获取svg文件并将其添加到项目目录中

  • 将以下代码添加到MainWindow构造函数中:

var svg = new SKSvg(); svg.Load( “image.svg”); SKCanvas canvas = new SKCanvas(new SKBitmap()); canvas.DrawPicture(svg.Picture);

  • 注意如果你复制图像文件和exe并放在另一个目录中,exe将无法启动 . 发生这种情况是因为找不到libSkiaSharp.dll .

回答(2)

2 years ago

在项目中创建Costura32和/或Costura64文件夹 . 将libSkiaSharp.dll复制到相应的目录中,具体取决于其位数 . Costura将自动解压缩并从这些目录加载本机二进制文件 .

2 years ago

您是否尝试过以下方法:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <IncludeAssemblies>
        libSkiaSharp
    </IncludeAssemblies>
  </Costura>
</Weavers>