我有一部分像这样的代码
Assembly myAssembly = Assembly.GetExecutingAssembly();
string[] names = myAssembly.GetManifestResourceNames();
foreach (string file in names)
{
if (file.EndsWith(".dtd"))
{
// attach to stream to the resource in the manifest
dtdStream = myAssembly.GetManifestResourceStream(file);
MessageBox.Show(dtdStream.ToString());
}
}
我的资源文件夹下有所有dtd文件。它有构建类型嵌入式资源 现在,当我调试代码时,我收到一个显示System.IO.UnmanagedMemoryStream
的消息框但我想要一个Managed MemoryStream?
我的代码有什么问题?
感谢...
答案 0 :(得分:8)
资源被编译为程序集(EXE或DLL)的一部分,这意味着它们在OS启动进程时被加载到非托管内存中。这就是为什么GetManifestResourceStream
返回的任何流必须非托管(类型为UnmanagedMemoryStream
)的原因。
无论如何,这有什么问题? MemoryStream
和UnmanagedMemoryStream
的界面基本相同,只是(隐藏)功能有所不同,这对您来说不应该有任何后果。
答案 1 :(得分:2)