-4

C#にアセンブリを追加するコードが必要GACです。GACを使用してDLL を追加する方法を知っている人はいます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 に答える