-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Implement Tar APIs #67883
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Implement Tar APIs #67883
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit
Hold shift + click to select a range
e9fbcc9
Implement Tar APIs
carlossanlop 0731cb2
Address some comment suggestions.
carlossanlop 8f1f1af
Add SystemFormatsTarTestData package dependency entries and versions.
carlossanlop 10df463
Merge the major and minor p/invokes into a single one.
carlossanlop da4af67
Address exception and nullability suggestions.
carlossanlop 8710ceb
Adjust tests for the latest suggestions.
carlossanlop 76e484c
Document elevation requirement to extract device files on Unix.
carlossanlop c9c4d85
Add tests to verify extraction without elevation throws for device fi…
carlossanlop e0dafda
Add separate expected mode for special files from assets (644).
carlossanlop 5b8392b
Bump assets version to one with the fix
carlossanlop a16d4d9
Fix bugs and add tests for: timestamp conversion, extended attributes…
carlossanlop 7ca674e
Validate entry.Name chars before extracting
carlossanlop 560b789
Remove some minor todo comments
carlossanlop b3e5988
Add missing numeric value for PAL_S_IFCHR and its static assert
carlossanlop c22a8e7
Bug fixes:
carlossanlop d3e4f31
Bug fix: GNU can have two different metadata entries in a row if the …
carlossanlop 23caa17
Add test to verify entry with subdir segments gets extracted by TarFi…
carlossanlop e0b0442
Rename UnknownFormat resource string to TarInvalidFormat, include for…
carlossanlop b682576
Bug fixes:
carlossanlop 9fd01c3
Embed paths to exception message string when extracting file to diffe…
carlossanlop 7b0d8c3
Bug fix: WriteEntry from file on Windows failing with V7 due to incom…
carlossanlop f1d9b7b
Bug fixes:
carlossanlop 0980fbd
Use HAVE* in pal_io.c to detect library where makedev is available. D…
carlossanlop a28f3e5
Remove unnecessary TargetPlatformIdentifier override in src csproj.
carlossanlop 7f2e516
Small refactor of VerifyOverwriteFileIsPossible
carlossanlop 3f71b60
Remove parameter nullchecks.
carlossanlop cb855ed
Remove test method for attaching debugger.
carlossanlop dd40447
Remove devmajor and devminor duplicate todo message
carlossanlop 9a28f12
Remove unused datetime method
carlossanlop 40097c6
TMP exception with failed timestamp info
carlossanlop b1e8dfc
Remove failing device major/minor checks for now
carlossanlop c11e434
add FieldLocations static class, with position of first byte of each …
carlossanlop 255ec96
Use InvariantCulture when converting the utf8 string to a double.
carlossanlop 8ae7788
Copying file used by ExtractToDirectory test that throws, so it doesn…
carlossanlop d3cbdd2
Remove unused test method that opens and returns a filestream. We don…
carlossanlop 6b5d078
Use a single rented buffer to read a whole header record. Convert rel…
carlossanlop 19eb98d
Use ArrayPool for writing.
carlossanlop 69ca3e7
Fix upper bound of DeviceMajor and DeviceMinor.
carlossanlop b1a2d5a
Remove async APIs from ref, comment them in src.
carlossanlop fb644dd
Add issue to TODO comments
carlossanlop cd40d62
Remove unused methods.
carlossanlop 0ee2c33
Add InvariantCulture to double.ToString conversions.
carlossanlop 58a3476
Fix test parsing a double, ensure it uses invariant culture.
carlossanlop fc0e568
More tests parsing a double, ensure invariant culture comparison.
carlossanlop 5d81577
Verify link targets when extracting to directory. Disallow extracting…
carlossanlop a52dfe4
Avoid advancing stream anymore if end markers were found and GetNextE…
carlossanlop b227fa9
Add test that verifies stream is not advanced anymore after reading t…
carlossanlop 5745b9f
Fix bug preventing correct generation of full path for extraction. Ad…
carlossanlop File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next
Next commit
Implement Tar APIs
- Loading branch information
commit e9fbcc97ffa27a7b93875eb1dd8b235168ffa78d
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
src/libraries/Common/src/Interop/Unix/System.Native/Interop.DeviceFiles.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System.Runtime.InteropServices; | ||
|
|
||
| internal static partial class Interop | ||
| { | ||
| // mknod: https://man7.org/linux/man-pages/man2/mknod.2.html | ||
| // makedev, major and minor: https://man7.org/linux/man-pages/man3/makedev.3.html | ||
| internal static partial class Sys | ||
| { | ||
| internal static int CreateBlockDevice(string pathName, int mode, uint major, uint minor) | ||
| { | ||
| return MkNod(pathName, mode | FileTypes.S_IFBLK, major, minor); | ||
| } | ||
|
|
||
| internal static int CreateCharacterDevice(string pathName, int mode, uint major, uint minor) | ||
| { | ||
| return MkNod(pathName, mode | FileTypes.S_IFCHR, major, minor); | ||
| } | ||
|
|
||
| [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkNod", StringMarshalling = StringMarshalling.Utf8, SetLastError = true)] | ||
| internal static partial int MkNod(string pathName, int mode, uint major, uint minor); | ||
carlossanlop marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MakeDev", SetLastError = true)] | ||
| internal static partial ulong MakeDev(uint major, uint minor); | ||
carlossanlop marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_Major", SetLastError = true)] | ||
| internal static partial uint GetDevMajor(ulong dev); | ||
|
|
||
| [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_Minor", SetLastError = true)] | ||
| internal static partial uint GetDevMinor(ulong dev); | ||
carlossanlop marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
| } | ||
14 changes: 14 additions & 0 deletions
14
src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkFifo.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System.Runtime.InteropServices; | ||
|
|
||
| internal static partial class Interop | ||
| { | ||
| // mkfifo: https://man7.org/linux/man-pages/man3/mkfifo.3.html | ||
| internal static partial class Sys | ||
| { | ||
| [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkFifo", StringMarshalling = StringMarshalling.Utf8, SetLastError = true)] | ||
| internal static partial int MkFifo(string pathName, int mode); | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
src/libraries/Common/src/Interop/Windows/Kernel32/Interop.CreateHardLink.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System; | ||
| using System.IO; | ||
| using System.Runtime.InteropServices; | ||
|
|
||
| internal static partial class Interop | ||
| { | ||
| internal static partial class Kernel32 | ||
| { | ||
| internal static void CreateHardLink(string hardLinkFilePath, string targetFilePath) | ||
| { | ||
| string originalPath = hardLinkFilePath; | ||
| hardLinkFilePath = PathInternal.EnsureExtendedPrefix(hardLinkFilePath); | ||
| targetFilePath = PathInternal.EnsureExtendedPrefix(targetFilePath); | ||
|
|
||
| if (!CreateHardLinkPrivate(hardLinkFilePath, targetFilePath, IntPtr.Zero)) | ||
| { | ||
| throw Win32Marshal.GetExceptionForLastWin32Error(originalPath); | ||
| } | ||
| } | ||
|
|
||
| [LibraryImport(Libraries.Kernel32, EntryPoint = "CreateHardLinkW", SetLastError = true, StringMarshalling = StringMarshalling.Utf16)] | ||
| [return: MarshalAs(UnmanagedType.Bool)] | ||
| private static partial bool CreateHardLinkPrivate(string lpFileName, string lpExistingFileName, IntPtr lpSecurityAttributes); | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| | ||
| Microsoft Visual Studio Solution File, Format Version 12.00 | ||
| # Visual Studio Version 17 | ||
| VisualStudioVersion = 17.1.32119.435 | ||
| MinimumVisualStudioVersion = 10.0.40219.1 | ||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{9BE8AFF4-D37B-49AF-AFD3-A15E514AC8AE}" | ||
| EndProject | ||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{55A8C7E4-925C-4F21-B68B-CEFC19137A4B}" | ||
| EndProject | ||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{6CF0D830-3EE9-44B1-B548-EA8750AD7B3E}" | ||
| EndProject | ||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Formats.Tar", "ref\System.Formats.Tar.csproj", "{E0B882C6-2082-45F2-806E-568461A61975}" | ||
| EndProject | ||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Formats.Tar", "src\System.Formats.Tar.csproj", "{9F751C2B-56DD-4604-A3F3-568627F8C006}" | ||
| EndProject | ||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Formats.Tar.Tests", "tests\System.Formats.Tar.Tests.csproj", "{6FD1E284-7B50-4077-B73A-5B31CB0E3577}" | ||
| EndProject | ||
| Global | ||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
| Debug|Any CPU = Debug|Any CPU | ||
| Release|Any CPU = Release|Any CPU | ||
| EndGlobalSection | ||
| GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
| {E0B882C6-2082-45F2-806E-568461A61975}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
| {E0B882C6-2082-45F2-806E-568461A61975}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
| {E0B882C6-2082-45F2-806E-568461A61975}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
| {E0B882C6-2082-45F2-806E-568461A61975}.Release|Any CPU.Build.0 = Release|Any CPU | ||
| {9F751C2B-56DD-4604-A3F3-568627F8C006}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
| {9F751C2B-56DD-4604-A3F3-568627F8C006}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
| {9F751C2B-56DD-4604-A3F3-568627F8C006}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
| {9F751C2B-56DD-4604-A3F3-568627F8C006}.Release|Any CPU.Build.0 = Release|Any CPU | ||
| {6FD1E284-7B50-4077-B73A-5B31CB0E3577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
| {6FD1E284-7B50-4077-B73A-5B31CB0E3577}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
| {6FD1E284-7B50-4077-B73A-5B31CB0E3577}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
| {6FD1E284-7B50-4077-B73A-5B31CB0E3577}.Release|Any CPU.Build.0 = Release|Any CPU | ||
| EndGlobalSection | ||
| GlobalSection(SolutionProperties) = preSolution | ||
| HideSolutionNode = FALSE | ||
| EndGlobalSection | ||
| GlobalSection(NestedProjects) = preSolution | ||
| {E0B882C6-2082-45F2-806E-568461A61975} = {9BE8AFF4-D37B-49AF-AFD3-A15E514AC8AE} | ||
| {9F751C2B-56DD-4604-A3F3-568627F8C006} = {55A8C7E4-925C-4F21-B68B-CEFC19137A4B} | ||
| {6FD1E284-7B50-4077-B73A-5B31CB0E3577} = {6CF0D830-3EE9-44B1-B548-EA8750AD7B3E} | ||
| EndGlobalSection | ||
| GlobalSection(ExtensibilityGlobals) = postSolution | ||
| SolutionGuid = {F9B8DA67-C83B-466D-907C-9541CDBDCFEF} | ||
| EndGlobalSection | ||
| EndGlobal |
133 changes: 133 additions & 0 deletions
133
src/libraries/System.Formats.Tar/ref/System.Formats.Tar.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,133 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
| // ------------------------------------------------------------------------------ | ||
| // Changes to this file must follow the https://aka.ms/api-review process. | ||
| // ------------------------------------------------------------------------------ | ||
|
|
||
| namespace System.Formats.Tar | ||
| { | ||
| public sealed partial class GnuTarEntry : System.Formats.Tar.PosixTarEntry | ||
| { | ||
| public GnuTarEntry(System.Formats.Tar.TarEntryType entryType, string entryName) { } | ||
| public System.DateTimeOffset AccessTime { get { throw null; } set { } } | ||
| public System.DateTimeOffset ChangeTime { get { throw null; } set { } } | ||
| } | ||
| public sealed partial class PaxTarEntry : System.Formats.Tar.PosixTarEntry | ||
| { | ||
| public PaxTarEntry(System.Formats.Tar.TarEntryType entryType, string entryName) { } | ||
| public PaxTarEntry(System.Formats.Tar.TarEntryType entryType, string entryName, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> extendedAttributes) { } | ||
| public System.Collections.Generic.IReadOnlyDictionary<string, string> ExtendedAttributes { get { throw null; } } | ||
| } | ||
| public abstract partial class PosixTarEntry : System.Formats.Tar.TarEntry | ||
| { | ||
| internal PosixTarEntry() { } | ||
| public int DeviceMajor { get { throw null; } set { } } | ||
| public int DeviceMinor { get { throw null; } set { } } | ||
| public string GroupName { get { throw null; } set { } } | ||
| public string UserName { get { throw null; } set { } } | ||
| } | ||
| public abstract partial class TarEntry | ||
| { | ||
| internal TarEntry() { } | ||
| public int Checksum { get { throw null; } } | ||
| public System.IO.Stream? DataStream { get { throw null; } set { } } | ||
| public System.Formats.Tar.TarEntryType EntryType { get { throw null; } } | ||
| public int Gid { get { throw null; } set { } } | ||
| public long Length { get { throw null; } } | ||
| public string LinkName { get { throw null; } set { } } | ||
| public System.Formats.Tar.TarFileMode Mode { get { throw null; } set { } } | ||
| public System.DateTimeOffset ModificationTime { get { throw null; } set { } } | ||
| public string Name { get { throw null; } set { } } | ||
| public int Uid { get { throw null; } set { } } | ||
| public void ExtractToFile(string destinationFileName, bool overwrite) { } | ||
| public System.Threading.Tasks.Task ExtractToFileAsync(string destinationFileName, bool overwrite, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| public override string ToString() { throw null; } | ||
| } | ||
| public enum TarEntryType : byte | ||
| { | ||
| V7RegularFile = (byte)0, | ||
| RegularFile = (byte)48, | ||
| HardLink = (byte)49, | ||
| SymbolicLink = (byte)50, | ||
| CharacterDevice = (byte)51, | ||
| BlockDevice = (byte)52, | ||
| Directory = (byte)53, | ||
| Fifo = (byte)54, | ||
| ContiguousFile = (byte)55, | ||
| DirectoryList = (byte)68, | ||
| LongLink = (byte)75, | ||
| LongPath = (byte)76, | ||
| MultiVolume = (byte)77, | ||
| RenamedOrSymlinked = (byte)78, | ||
| SparseFile = (byte)83, | ||
| TapeVolume = (byte)86, | ||
| GlobalExtendedAttributes = (byte)103, | ||
| ExtendedAttributes = (byte)120, | ||
| } | ||
| public static partial class TarFile | ||
| { | ||
| public static void CreateFromDirectory(string sourceDirectoryName, System.IO.Stream destination, bool includeBaseDirectory) { } | ||
| public static void CreateFromDirectory(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory) { } | ||
| public static System.Threading.Tasks.Task CreateFromDirectoryAsync(string sourceDirectoryName, System.IO.Stream destination, bool includeBaseDirectory, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| public static System.Threading.Tasks.Task CreateFromDirectoryAsync(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| public static void ExtractToDirectory(System.IO.Stream source, string destinationDirectoryName, bool overwriteFiles) { } | ||
| public static void ExtractToDirectory(string sourceFileName, string destinationDirectoryName, bool overwriteFiles) { } | ||
| public static System.Threading.Tasks.Task ExtractToDirectoryAsync(System.IO.Stream source, string destinationDirectoryName, bool overwriteFiles, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| public static System.Threading.Tasks.Task ExtractToDirectoryAsync(string sourceFileName, string destinationDirectoryName, bool overwriteFiles, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| } | ||
| [System.FlagsAttribute] | ||
| public enum TarFileMode | ||
| { | ||
| None = 0, | ||
| OtherExecute = 1, | ||
| OtherWrite = 2, | ||
| OtherRead = 4, | ||
| GroupExecute = 8, | ||
| GroupWrite = 16, | ||
| GroupRead = 32, | ||
| UserExecute = 64, | ||
| UserWrite = 128, | ||
| UserRead = 256, | ||
| StickyBit = 512, | ||
| GroupSpecial = 1024, | ||
| UserSpecial = 2048, | ||
| } | ||
| public enum TarFormat | ||
| { | ||
| Unknown = 0, | ||
| V7 = 1, | ||
| Ustar = 2, | ||
| Pax = 3, | ||
| Gnu = 4, | ||
| } | ||
| public sealed partial class TarReader : System.IAsyncDisposable, System.IDisposable | ||
| { | ||
| public TarReader(System.IO.Stream archiveStream, bool leaveOpen = false) { } | ||
| public System.Formats.Tar.TarFormat Format { get { throw null; } } | ||
| public System.Collections.Generic.IReadOnlyDictionary<string, string>? GlobalExtendedAttributes { get { throw null; } } | ||
| public void Dispose() { } | ||
| public System.Threading.Tasks.ValueTask DisposeAsync() { throw null; } | ||
| public System.Formats.Tar.TarEntry? GetNextEntry(bool copyData = false) { throw null; } | ||
| public System.Threading.Tasks.ValueTask<System.Formats.Tar.TarEntry?> GetNextEntryAsync(bool copyData = false, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| } | ||
| public sealed partial class TarWriter : System.IAsyncDisposable, System.IDisposable | ||
| { | ||
| public TarWriter(System.IO.Stream archiveStream, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>? globalExtendedAttributes = null, bool leaveOpen = false) { } | ||
| public TarWriter(System.IO.Stream archiveStream, System.Formats.Tar.TarFormat archiveFormat, bool leaveOpen = false) { } | ||
| public System.Formats.Tar.TarFormat Format { get { throw null; } } | ||
| public void Dispose() { } | ||
| public System.Threading.Tasks.ValueTask DisposeAsync() { throw null; } | ||
| public void WriteEntry(System.Formats.Tar.TarEntry entry) { } | ||
| public void WriteEntry(string fileName, string? entryName) { } | ||
| public System.Threading.Tasks.Task WriteEntryAsync(System.Formats.Tar.TarEntry entry, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| public System.Threading.Tasks.Task WriteEntryAsync(string fileName, string? entryName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } | ||
| } | ||
| public sealed partial class UstarTarEntry : System.Formats.Tar.PosixTarEntry | ||
| { | ||
| public UstarTarEntry(System.Formats.Tar.TarEntryType entryType, string entryName) { } | ||
| } | ||
| public sealed partial class V7TarEntry : System.Formats.Tar.TarEntry | ||
| { | ||
| public V7TarEntry(System.Formats.Tar.TarEntryType entryType, string entryName) { } | ||
| } | ||
| } |
13 changes: 13 additions & 0 deletions
13
src/libraries/System.Formats.Tar/ref/System.Formats.Tar.csproj
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| <Project Sdk="Microsoft.NET.Sdk"> | ||
| <PropertyGroup> | ||
| <TargetFrameworks>$(NetCoreAppCurrent)</TargetFrameworks> | ||
| <Nullable>enable</Nullable> | ||
| </PropertyGroup> | ||
| <ItemGroup> | ||
| <Compile Include="System.Formats.Tar.cs" /> | ||
| </ItemGroup> | ||
| <ItemGroup> | ||
| <ProjectReference Include="..\..\System.Runtime\ref\System.Runtime.csproj" /> | ||
| <ProjectReference Include="$(LibrariesProjectRoot)System.Collections\ref\System.Collections.csproj" /> | ||
| </ItemGroup> | ||
| </Project> |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.