2013-05-30 1 views
-4

Мне нужен код C# для добавления сборок в GAC. Кто-нибудь знает, как добавить DLL к GAC, используя C#?Как добавить DLL в GAC и вставлять с exe

+0

Это то, что вы сделали бы как часть своего установщика, а не то, что приложение будет делать при запуске. – Belogix

+2

@Belogix: Нет; это то, что вы не сделали бы вообще. – SLaks

+0

Позвольте мне объяснить вам больше. Я создал файл .exe, который включает все эти вещи в виде байтов. Поэтому, когда я запускаю этот exe, он должен автоматически открывать видео. Поэтому, пожалуйста, предложите мне какое-либо решение. –

ответ

3

Нет; вам не нужно ничего добавлять к GAC.

Вы можете просто позвонить Assembly.Load(), чтобы загрузить сборки непосредственно из массивов байтов, встроенных в ваш файл.
Обратите внимание, что вам нужно будет сделать это до того, как JITer встретит любые типы из этих сборок.

+0

спасибо для справки, я попробую его –

5
Publish publish = new Publish(); 

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

пространство имен: System.EnterpriseServices.Internal

Ассамблея: System.EnterpriseServices (в System.EnterpriseServices.dll)

+0

Вам нужен экземпляр. http://msdn.microsoft.com/en-us/library/system.enterpriseservices.internal.publish.gacinstall.aspx – SLaks

+0

@SLAS какой экземпляр вы имеете в виду? – MikroDel

+0

Экземпляр класса «Опубликовать». – SLaks

1

При включении видео файл, который вы должны включить его как «Встроенный ресурс». Если вы не знаете, как это сделать, вот шаги.

  1. Добавить видеофайл в проект.
  2. Нажмите на видеофайл. Перейдите к свойствам.
  3. Выберите действие сборки «Embedded Resource»

Затем используйте ниже класс, чтобы получить видео в виде массива байтов. Я уверен, что вы можете позаботиться обо всем остальном.

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; 
       } 
      } 
     } 
    }