C# 在DLL文件中嵌入文件、图片并读取内容
一.首先新建一个文本文件TestFile.txt,如下图:
二.在Visual Studio中添加一个类库MyClassLibrary,然后右击->属性->资源->此项目不包含默认的资源文件,单击此处可创建一个->添加现有文件,选择之前创建的TestFile.txt,如下图:
三.在类库中添加获取文本内容的代码,可在类库中默认的Class1中添加代码如下,然后点击重新生成,即可生成dll文件;
namespace MyClassLibrary
{
public class Class1
{
public string GetTextFromResource()
{
return Properties.Resources.TestFile; //TestFile就是文件名
}
}
}
四.然后可以添加一个WinForm程序进行测试,把刚才的DLL文件引用进来,读取txt内容的代码如下:
MyClassLibrary.Class1 fileMsg = new MyClassLibrary.Class1();
string str = fileMsg.GetTextFromResource();
richTextBox1.Text = str;
运行效果:
注意:可以使用同样的方法添加图片资源,例如:
namespace ClassLibrary1
{
public class Class1
{
public Bitmap GetPicture()
{
return Properties.Resources.A8; //A8是一张jpg图片
}
}
}
也可以用下面的方式来读取DLL中的资源;
Assembly myAssembly = System.Reflection.Assembly.Load("ClassLibrary1");
System.Resources.ResourceManager myManager = new System.Resources.ResourceManager("ClassLibrary1.Properties.Resources", myAssembly);
System.Drawing.Image myImage = (System.Drawing.Image)myManager.GetObject("A8");
还可以这样读DLL中资源:
//Assembly assm = this.GetType().Assembly;//Assembly.LoadFrom(程序集路径);
Assembly assm = System.Reflection.Assembly.Load("ClassLibrary1");
foreach (string resName in assm.GetManifestResourceNames())
{
Stream stream = assm.GetManifestResourceStream(resName);
ResourceReader rr = new ResourceReader(stream);
IDictionaryEnumerator enumerator = rr.GetEnumerator();
while (enumerator.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)enumerator.Current;
//de.Key是资源名
//de.Value是资源内容
}
}