如何添加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)"}
Publish publish = new Publish();
publish.GacInstall(System.IO.Path.GetFullPath("MyAssembly.dll"));
名称空间: System.EnterpriseServices.Internal
<装配/strong>:系统。
不;您不需要在GAC中添加任何内容。
您可以简单地调用Assembly.Load()
直接从嵌入在文件中的字节数组加载程序集。
注意,您需要在JITer遇到来自这些程序集的任何类型之前这样做。
当您包含您的视频文件时,您必须将其包含为"嵌入式资源"。如果你不知道怎么做,这里有步骤。
- 将您的视频文件添加到项目中。
- 单击视频文件。
- 选择构建动作"嵌入式资源"
然后使用下面的类来检索视频作为字节数组。我相信你能处理好剩下的事情。
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;
}
}
}
}