Хорошо, я нашел что-то, что, кажется, работает:
Шаг 1 - Вставить ZIP-файл
- Щелкните правой кнопкой мыши по проекту и перейдите в свойства
- Перейдите к
Configuration Properties
> Linker
> Input
- Добавьте путь к файлу .zip в свойство
Embed Managed Resource File
. Для моего первоначального теста я добавил $(ProjectDir)\ReadMe.zip
, который был zip файла readme, который Visual Studio создает при создании нового проекта.
Шаг 2 - Извлеките ZIP-файл
Добавьте код для извлечения этого 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 и, конечно же, перекомпиляция добавляет измененный файл в исполняемый файл, и результат извлекается, как и ожидалось.