diff options
author | Swaroop Sridhar <Swaroop.Sridhar@microsoft.com> | 2020-05-01 19:24:13 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-01 19:24:13 +0300 |
commit | 47ec733ba79b196e4e09d0c89bad245155002353 (patch) | |
tree | 98fc7124abbcb678abe9687e757a77e638560f05 /src/installer/corehost/cli/apphost/bundle/file_entry.h | |
parent | 6d1f7e01d3429054ec3dcb7c75b3450b9fe1429e (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.h | 72 |
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__ |