是否可以在.net程序集中包含.zip文件作为资源?如果是的话,它是如何完成的以及如何访问它?
我认为this可能会在那里访问数据?我以前用它来访问图像,但我似乎记得必须手动将资源重新导入Visual Studio以获取更改。是否可以在编译时包含.zip?
编辑(@Tejs)
如果我右键单击资源,这些是我可用的选项:
答案 0 :(得分:3)
您只需在Embedded Resource
下将zip文件标记为Build Action
即可。 http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx
答案 1 :(得分:1)
查看CodePlex托管的DotNetZip库源代码。 他们使用预构建过程将文件压缩为.zip,并将其作为资源嵌入到库中以便以后访问它(它包含自解压存档所需的东西)。
答案 2 :(得分:1)
好的,我找到了似乎有用的东西:
Configuration Properties
> Linker
> Input
Embed Managed Resource File
属性。对于我的初始测试用例,我添加了$(ProjectDir)\ReadMe.zip
,它是自述文件的一个zip文件,当您创建一个新项目时,Visual Studio会创建该文件。添加一些代码来提取.zip文件:
Reflection::Assembly^ a1 = Reflection::Assembly::GetExecutingAssembly();
cli::array<String^>^ names = a1->GetManifestResourceNames();
for each( String^ name in names )
{
IO::BinaryReader^ s1 = gcnew IO::BinaryReader(a1->GetManifestResourceStream(name));
String^ fileName = "Extracted_"+name;
IO::BinaryWriter^ sw = gcnew IO::BinaryWriter( IO::File::Open( fileName, IO::FileMode::Create ) );
sw->Write(s1->ReadBytes(s1->BaseStream->Length));
sw->Flush();
sw->Close();
}
当该代码段运行时,在编译时添加到清单的每个.zip文件将神奇地出现在运行程序的同一目录中。我已经尝试修改.zip的内容,当然,重新编译会将更改的文件添加到可执行文件中,并按预期提取结果。