从XAML嵌入dll和引用

本文关键字:引用 dll 嵌入 XAML | 更新日期: 2023-09-27 18:03:44

我有一个使用GMAP的WPF应用程序。Net和扩展的WPF工具包。我直接在XAML中引用这些库中的控件。我想将这些dll添加到我的项目中,并将它们标记为嵌入式资源。

当我不再使用dll作为参考时,我如何继续从XAML引用控件?

编辑:没有太多代码要显示。当我使用gmap作为参考时,这可以工作。

xmlns:WindowsPresentation="clr-namespace:GMap.NET.WindowsPresentation;assembly=GMap.NET.WindowsPresentation"

删除gmap作为引用并添加为嵌入资源时的错误信息:

Error 1 The name "GMapControl" does not exist in the namespace "clr-namespace:GMap.NET.WindowsPresentation;assembly=GMap.NET.WindowsPresentation". Windows'MapWindow.xaml

xmlns中没有gmap引用

从XAML嵌入dll和引用

保留引用的dll,只是在构建最终版本时不要复制它们。此外,您是否向AssemblyResolve添加代码以拉入嵌入的资源?我的代码使用gzip程序集。

        AppDomain.CurrentDomain.AssemblyResolve += ( sender, args ) =>
        {
            try
            {
                String resourceName = String.Format( "Program.Libs.{0}.dll.gz", new AssemblyName( args.Name ).Name );
                using (var stream = new GZipStream( Assembly.GetExecutingAssembly().GetManifestResourceStream( resourceName ), CompressionMode.Decompress ))
                using (var outstream = new MemoryStream())
                {
                    CopyTo( stream, outstream );
                    return Assembly.Load( outstream.GetBuffer() );
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine( e.ToString() );
                return null;                    
            }
        };
    public static long CopyTo( Stream source, Stream destination )
    {
        byte[] buffer = new byte[ 2048 ];
        int bytesRead;
        long totalBytes = 0;
        while ((bytesRead = source.Read( buffer, 0, buffer.Length )) > 0)
        {
            destination.Write( buffer, 0, bytesRead );
            totalBytes += bytesRead;
        }
        return totalBytes;
    }