C# Fody Costura不嵌入SkiaSharep DLL

C# Fody Costura不嵌入SkiaSharep DLL,c#,dll,skiasharp,skia,fody-costura,C#,Dll,Skiasharp,Skia,Fody Costura,我创建了一个解决方案,它使用Costura.Fody nuget包将引用的程序集合并为嵌入式资源。我想要这个,这样我就可以为我的应用程序创建一个exe。在我添加了对SkiaSharep的引用(特别是nuget软件包SkiaSharep和SkiaSharep.Svg)之前,这一功能一直很好。libSkiaSharp.dll不是嵌入的,而是构建在启动项目文件夹中,我无法单独运行程序exe,除非我将dll保留在同一文件夹中。有办法解决这个问题吗 以下是重现此过程的步骤: 1.创建新的WPF项目 2.添

我创建了一个解决方案,它使用Costura.Fody nuget包将引用的程序集合并为嵌入式资源。我想要这个,这样我就可以为我的应用程序创建一个exe。在我添加了对SkiaSharep的引用(特别是nuget软件包SkiaSharep和SkiaSharep.Svg)之前,这一功能一直很好。libSkiaSharp.dll不是嵌入的,而是构建在启动项目文件夹中,我无法单独运行程序exe,除非我将dll保留在同一文件夹中。有办法解决这个问题吗

以下是重现此过程的步骤:

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(); Load(“image.svg”); SKCanvas canvas=new SKCanvas(new SKBitmap()); canvas.DrawPicture(svg.Picture)

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


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

    您是否尝试过以下方法:

    <?xml version="1.0" encoding="utf-8" ?>
    <Weavers>
      <Costura>
        <IncludeAssemblies>
            libSkiaSharp
        </IncludeAssemblies>
      </Costura>
    </Weavers>
    
    
    利巴斯基夏普酒店
    
    顺便提一下,我认为这个问题的原因与libSkiaSharp.dll是本机库这一事实有关。但是,我尝试使用IncludeAssemblies标记在FodyWeavers.xml文件中添加对库的引用。但到目前为止,我还没有弄明白如何让它嵌入所有DLL。这很有帮助,因为它确实有效。然而,如果我要更新SkiaSharep nuget包,那么这些文件可能会在没有人知道的情况下过时。添加生成后事件以将libSkiaSharp文件从调试文件夹复制到Costura文件夹将不起作用,因为这些文件需要作为嵌入资源引用。成功的生成取决于文件是否存在,因此无法在生成后复制这些文件。我也无法从nuget软件包文件夹复制,因为不同版本的Windows有不同的libSKiaSharp文件。设置预生成事件如何?我也无法执行预生成事件,因为此时文件尚未复制到调试文件夹。它们是在项目生成后复制的。这很令人沮丧,因为我知道我可以让它工作,但它并不理想。你能做两个构建,从一个预构建开始,并将它们嵌入到第二个构建中吗?当我添加此项时,构建失败,并出现以下错误:“Fody/Costura:Assembly'libSkiaSharp'找不到(甚至不是CopyLocal='false'),请更新配置”