我试图将一个空的Access数据库(.mdb)作为资源存储在我的应用程序中。然后,我想将其写出文件系统,并用表定义等填充它。我在Visual Studio 2005和C#应用程序中遇到的问题是无法访问存储在同一程序集中的资源(会认为默认情况下可以访问)。这是我的代码:

byte[] abytResource;
System.Reflection.Assembly objAssembly = System.Reflection.Assembly.GetExecutingAssembly();
objStream = objAssembly.GetManifestResourceStream("empty.mdb");
abytResource = new Byte[objStream.Length];
objStream.Read(abytResource, 0, (int)objStream.Length);
objFileStream = new FileStream(newDatabasePathWithName, FileMode.Create);
objFileStream.Write(abytResource, 0, (int)objStream.Length);
objFileStream.Close();

GetManifestResourceStream返回NULL并根据说明,这是因为该资源必须是私有(private)的(因为即使不存在该资源也会返回一个非NULL值)。所以我的问题是这样的:

我如何使自己的应用程序可以访问我的资源?顺便说一句,我已经将其添加到项目中并将其标记为“嵌入式资源”。

谢谢!

最佳答案

您需要在程序集的默认 namespace 之前为“empty.mdb”添加前缀。就像是:

objStream = objAssembly.GetManifestResourceStream("My.Namespace.empty.mdb");

10-07 19:28
查看更多