Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSwaroop Sridhar <Swaroop.Sridhar@microsoft.com>2020-05-01 19:24:13 +0300
committerGitHub <noreply@github.com>2020-05-01 19:24:13 +0300
commit47ec733ba79b196e4e09d0c89bad245155002353 (patch)
tree98fc7124abbcb678abe9687e757a77e638560f05 /src/installer/corehost/cli/apphost/bundle/file_entry.h
parent6d1f7e01d3429054ec3dcb7c75b3450b9fe1429e (diff)
[release/5.0-preview4] Revert processing bundles in framework (#35679)v5.0.0-preview.4.20251.6
This commit reverts: Revert "Single-File: Process bundles in the framework (#34274)" This reverts commit 78b303df8fbb242985d049a277d0d199cafd51b5. Revert "Single-File Bundler: Add a FileSize test (#35149)" This reverts commit 779588a509b81d909ac5d496c172949ec1f1ddcc. *Customer Scenario* Publishing apps as a self-contained single-file doesn't work as expected. * Publish needs to generate hostpolicy and hostfxr separate from the single file bundle * Cross-platform publishing is incorrect *Problem* Since Static-apphost is not yet ready, processing bundle content in hostpolicy means that hostpolicy and hostfxr DLLs need to be separate from the bundle. This causes self-contained single-file apps to not be a "single file" temporarily. The change also requires supporting changes from the SDK, to publish hostfxr and hostpolicy as separate files, and to invoke HostModel library with arguments that facilitate cross-platform publishing. *Solution* To solve these, problem, this change reverts: Revert "Single-File: Process bundles in the framework (#34274)" commit 78b303df8fbb242985d049a277d0d199cafd51b5. and a dependent test-only change: Revert "Single-File Bundler: Add a FileSize test (#35149)" commit 779588a509b81d909ac5d496c172949ec1f1ddcc. *Risk* Medium The change is contained to only host components: apphost, hostpolicy, and hostfxr. However, the change is big, and needs testing in runtime and SDK repos. *Testing* Manually tested the SDK by inserting apphost, hostfxr, hostpolicy, and hostmodel library from this build into the `dotnet/packs` preview-4 SDK from https://github.com/dotnet/sdk/pull/11518 build. Verified that: * Singlefile apps can be published and run OK for { Windows, Linux, Osx } x {netcoreapp3.0, netcoreapp3.1, netcoreapp5.0} * Cross-targeting builds of single-file apps build and run OK (ex: built on Windos, run on Mac).
Diffstat (limited to 'src/installer/corehost/cli/apphost/bundle/file_entry.h')
-rw-r--r--src/installer/corehost/cli/apphost/bundle/file_entry.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/installer/corehost/cli/apphost/bundle/file_entry.h b/src/installer/corehost/cli/apphost/bundle/file_entry.h
new file mode 100644
index 00000000000..efe405cc9a6
--- /dev/null
+++ b/src/installer/corehost/cli/apphost/bundle/file_entry.h
@@ -0,0 +1,72 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#ifndef __FILE_ENTRY_H__
+#define __FILE_ENTRY_H__
+
+#include "file_type.h"
+#include "reader.h"
+
+namespace bundle
+{
+ // FileEntry: Records information about embedded files.
+ //
+ // The bundle manifest records the following meta-data for each
+ // file embedded in the bundle:
+ // Fixed size portion (file_entry_fixed_t)
+ // - Offset
+ // - Size
+ // - File Entry Type
+ // Variable Size portion
+ // - relative path (7-bit extension encoded length prefixed string)
+
+#pragma pack(push, 1)
+ struct file_entry_fixed_t
+ {
+ int64_t offset;
+ int64_t size;
+ file_type_t type;
+ };
+#pragma pack(pop)
+
+ class file_entry_t
+ {
+ public:
+ file_entry_t()
+ : m_offset(0)
+ , m_size(0)
+ , m_type(file_type_t::__last)
+ , m_relative_path()
+ {
+ }
+
+ file_entry_t(const file_entry_fixed_t *fixed_data)
+ :m_relative_path()
+ {
+ // File_entries in the bundle-manifest are expected to be used
+ // beyond startup (for loading files directly from bundle, lazy extraction, etc.).
+ // The contents of fixed_data are copied on to file_entry in order to
+ // avoid memory mapped IO later.
+
+ m_offset = fixed_data->offset;
+ m_size = fixed_data->size;
+ m_type = fixed_data->type;
+ }
+
+ const pal::string_t relative_path() const { return m_relative_path; }
+ int64_t offset() const { return m_offset; }
+ int64_t size() const { return m_size; }
+ file_type_t type() const { return m_type; }
+
+ static file_entry_t read(reader_t &reader);
+
+ private:
+ int64_t m_offset;
+ int64_t m_size;
+ file_type_t m_type;
+ pal::string_t m_relative_path; // Path of an embedded file, relative to the extraction directory.
+ bool is_valid() const;
+ };
+}
+#endif // __FILE_ENTRY_H__