-4

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

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

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

其中 BytesArray 是汇编字节数组。

我将以下几行视为错误。

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

4

3 回答 3

5
Publish publish = new Publish();

publish.GacInstall(System.IO.Path.GetFullPath("MyAssembly.dll"));

命名空间:System.EnterpriseServices.Internal

程序集:System.EnterpriseServices(在 System.EnterpriseServices.dll 中)

于 2013-05-30T13:47:29.293 回答
3

不; 您无需向 GAC 添加任何内容。

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

于 2013-05-30T13:46:43.953 回答
1

当您包含视频文件时,您必须将其作为“嵌入式资源”包含在内。如果您不知道如何操作,请按以下步骤操作。

  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;
                }
            }
        }
    }
于 2013-06-06T03:11:47.227 回答