public void Save(Stream destinationStream, ProtectionLevel protectionLevel, string password) { if (!_isLoaded) { throw new ProjectNotInitializedException(); } using (var ispacArchive = new ZipArchive(destinationStream, ZipArchiveMode.Create)) { var manifest = ispacArchive.CreateEntry("@Project.manifest"); using (var stream = manifest.Open()) { _projectManifest.Save(stream, protectionLevel, password); } var projectParams = ispacArchive.CreateEntry("Project.params"); using (var stream = projectParams.Open()) { _projectParams.Save(stream, protectionLevel, password); } var contentTypes = ispacArchive.CreateEntry("[Content_Types].xml"); using (var stream = contentTypes.Open()) { using (var writer = new StreamWriter(stream)) { writer.WriteLine( "<?xml version=\"1.0\" encoding=\"utf-8\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"dtsx\" ContentType=\"text/xml\" /><Default Extension=\"conmgr\" ContentType=\"text/xml\" /><Default Extension=\"params\" ContentType=\"text/xml\" /><Default Extension=\"manifest\" ContentType=\"text/xml\" /></Types>"); } } foreach (var package in _packages) { var name = PackUriHelper.CreatePartUri(new Uri(package.Key, UriKind.Relative)).OriginalString.Substring(1); var packageEntry = ispacArchive.CreateEntry(name); using (var stream = packageEntry.Open()) { package.Value.Save(stream, protectionLevel, password); } } foreach (var projectConnection in _projectConnections) { var name = PackUriHelper.CreatePartUri(new Uri(projectConnection.Key, UriKind.Relative)).OriginalString.Substring(1); var projectConnectionEntry = ispacArchive.CreateEntry(name); using (var stream = projectConnectionEntry.Open()) { projectConnection.Value.Save(stream, protectionLevel, password); } } } }