在类库中嵌入二进制文件

Posted

技术标签:

【中文标题】在类库中嵌入二进制文件【英文标题】:Embedding a binary file inside a class library 【发布时间】:2010-10-27 21:03:14 【问题描述】:

是否可以在 C# 类库中嵌入自定义二进制文件,然后在运行时使用二进制阅读器读取它?

我猜这可能是通过资源实现的。

非常感谢

【问题讨论】:

【参考方案1】:

是的,这很容易:

将文件添加到您的项目并将“构建操作”设置为“嵌入资源”。

在你的程序中做

foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames())

  if (name.EndsWith("<name>", StringComparison.InvariantCultureIgnoreCase))
  
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
    
      // ...
    
    break;
  

查找正确的资源有点复杂,因为文件名前面有一些东西(命名空间等。在 if(...) 中设置断点以查看真正的资源名称)。

【讨论】:

这很好用。尤其是当我不断更改文件内容时,它只是在我构建项目时重新嵌入。【参考方案2】:

您可以通过项目属性将文件添加到资源中来做到这一点。然后,Visual Studio 将为您提供一个方便的类来使用以下代码访问您的文件

byte[] theFile = myNamespace.Properties.Resources.theBinaryFile;

资源名称是二进制文件。

【讨论】:

RE:我对以下答案的评论。如果原始文件发生变化,我下次构建项目时会自动重新嵌入吗? 是的,如果您更改文件,下一次构建将更新资源文件。

以上是关于在类库中嵌入二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core在类库中读取配置文件appsettings.json

在类库中添加 System.Web.Script 引用

从monodroid类库中访问资产

将不加载包含文件名的文件名中的嵌入式资源

在类库中实例化 Identity ApplicationUserManager

在类库中使用 API 接口,在 API 接口中使用类库? [关闭]