如何添加DLL到GAC和嵌入与exe

本文关键字:GAC exe DLL 何添加 添加 | 更新日期: 2023-09-27 18:15:59

我需要C#代码将程序集添加到GAC。有人知道如何使用C#将dll添加到GAC吗?

编辑:

我试图在窗口应用程序中使用字节加载dll。由于一些dll文件在我的应用程序中正确加载,但当我试图加载程序集(Microsoft_DirectX_AudioVideoPlayback.dll)时,它会给我badImage异常的错误。基本上,我只需要使用以下方法从bytes数组加载程序集。

byte[] ByteArray = Resource1.Microsoft_DirectX_AudioVideoPlayback;
 Assembly.Load(ByteArray );

其中BytesArray为汇编字节数组。

我得到以下行作为错误。

试图加载格式不正确的程序。(来自HRESULT: 0x8007000B的异常)系统。badImageformat exception: {"An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)"}

如何添加DLL到GAC和嵌入与exe

Publish publish = new Publish();
publish.GacInstall(System.IO.Path.GetFullPath("MyAssembly.dll"));
名称空间

: System.EnterpriseServices.Internal

<

装配/strong>:系统。

不;您不需要在GAC中添加任何内容。

您可以简单地调用Assembly.Load()直接从嵌入在文件中的字节数组加载程序集。
注意,您需要在JITer遇到来自这些程序集的任何类型之前这样做。

当您包含您的视频文件时,您必须将其包含为"嵌入式资源"。如果你不知道怎么做,这里有步骤。

  1. 将您的视频文件添加到项目中。
  2. 单击视频文件。
  3. 选择构建动作"嵌入式资源"

然后使用下面的类来检索视频作为字节数组。我相信你能处理好剩下的事情。

    using System.IO;
    using System.Reflection;
    namespace MyProject.Video
    {
        class MyVideoClass
        {
            private const string videoExtract = "MyProject.Video.MyVideo.dat";      
            public byte[] GetStream()
            {
                try
                {
                    var memoryStream = new MemoryStream();
                    Stream sourceStream = null;
                    sourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(videoExtract); 
                    if (sourceStream != null) sourceStream.CopyTo(memoryStream);
                    return memoryStream.ToArray();
                }
                catch
                {
                    return null;
                }
            }
        }
    }