}
// Set up an assembly resolving event handler to help locate helper assemblies that are needed
- // to process the test assembly, such as xunit assemblies and corefx test helpers.
+ // to process the test assembly, such as xunit assemblies and .NET Core test helpers.
string[] probingPaths = new[] { Path.GetDirectoryName(testAssemblyPath), runtimeAssembliesPath, outputPath, AppContext.BaseDirectory };
AppDomain.CurrentDomain.AssemblyResolve += (object sender, ResolveEventArgs args) =>
{
/// <summary>Parse the command-line.</summary>
/// <param name="args">The arguments passed to Main.</param>
/// <param name="testAssemblyPath">The location of the xunit test assembly to be analyzed. The resulting .cs file will call into this assembly.</param>
- /// <param name="runtimeAssembliesPath">The directory containing all of the helper assemblies needed, e.g. xunit's assemblies, corefx utility assemblies, etc.</param>
+ /// <param name="runtimeAssembliesPath">The directory containing all of the helper assemblies needed, e.g. xunit's assemblies, .NET Core utility assemblies, etc.</param>
/// <param name="outputPath">The directory into which the resulting project should be written.</param>
/// <param name="xunitCommandLine">The xunit command-line object to pass to xunit test discovery.</param>
/// <returns></returns>
// Invalid command line arguments.
Console.WriteLine("Usage: <output_directory> <helper_assemblies_directory> <test_assembly_path> <xunit_console_options>");
Console.WriteLine(" Example:");
- Console.WriteLine(@" dotnet run d:\tmpoutput d:\repos\corefx\artifacts\bin\testhost\netcoreapp5.0-Windows_NT-Debug-x64\shared\Microsoft.NETCore.App\$(ProductVersion) d:\repos\corefx\artifacts\bin\System.Runtime.Tests\netcoreapp5.0-Windows_NT-Debug\System.Runtime.Tests.dll");
+ Console.WriteLine(@" dotnet run d:\tmpoutput d:\repos\runtime\artifacts\bin\testhost\netcoreapp5.0-Windows_NT-Debug-x64\shared\Microsoft.NETCore.App\$(ProductVersion) d:\repos\runtime\artifacts\bin\System.Runtime.Tests\netcoreapp5.0-Windows_NT-Debug\System.Runtime.Tests.dll");
testAssemblyPath = string.Empty;
runtimeAssembliesPath = string.Empty;
outputPath = string.Empty;
/// </summary>
private bool IsFirstRunOfClickOnceApp()
{
- // Never ClickOnce app in CoreFX
+ // Always false for .NET Core
return false;
}
/// </summary>
internal static bool IsClickOnceDeployed(AppDomain appDomain)
{
- // Never ClickOnce app in CoreFX
+ // Always false for .NET Core
return false;
}
using System.IO;
using System.Threading;
-// The CODEDOM check is here to support frameworks that may not have fully
-// incorporated all of corefx, but want to use System.Configuration.ConfigurationManager.
-// TempFileCollection was moved in corefx.
+// The CODEDOM check is here to support versions of the framework that may not have fully
+// incorporated all of .NET Core, but want to use System.Configuration.ConfigurationManager.
+// TempFileCollection was moved around in .NET Core.
#if CODEDOM
using System.CodeDom.Compiler;
#else
// they lived in System.dll.
//
// On .NET Framework we would try to emulate that behavior by looking in
- // System. As types have moved around in CoreFX- we'll try to load
+ // System. As types have moved around in .NET Core, we'll try to load
// from the a variety of assemblies to mimick the old behavior.
// Don't bother to look around if we've already got something that
## In Fedora 24 container:
- `docker ps` shows _id of existing Fedora 24 container
- `docker exec -it _id /bin/sh`
-- `dnf install findutils` need to install findutils for building corefx to add missing xargs
+- `dnf install findutils` need to install findutils for building libraries to add missing xargs
- `find / -name libsqlite3odbc.so` to be used in odbcinst.ini
- `odbcinst -j` to show version and location of ini files
- `ldconfig -p | grep sqlite`
/// <devdoc>
/// Gets or sets the path for this <see cref='System.DirectoryServices.DirectoryEntry'/>.
/// </devdoc>
- [
- DefaultValue(""),
- // CoreFXPort - Remove design support
- // TypeConverter("System.Diagnostics.Design.StringValueConverter, " + AssemblyRef.SystemDesign)
- ]
+ [DefaultValue("")]
public string Path
{
get => _path;
/// <devdoc>
/// Gets or sets the username to use when authenticating the client.
/// </devdoc>
- [
- DefaultValue(null),
- // CoreFXPort - Remove design support
- // TypeConverter("System.Diagnostics.Design.StringValueConverter, " + AssemblyRef.SystemDesign)
- ]
+ [DefaultValue(null)]
public string Username
{
get
/// <devdoc>
/// Gets or sets the Lightweight Directory Access Protocol (LDAP) filter string format.
/// </devdoc>
- [
- DefaultValue(defaultFilter),
- // CoreFXPort - Remove design support
- // TypeConverter("System.Diagnostics.Design.StringValueConverter, " + AssemblyRef.SystemDesign)
- ]
+ [DefaultValue(defaultFilter)]
public string Filter
{
get => _filter;
/// Gets or sets an attribute name to indicate that an attribute-scoped query search should be
/// performed.
/// </devdoc>
- [
- DefaultValue(""),
- // CoreFXPort - Remove design support
- // TypeConverter("System.Diagnostics.Design.StringValueConverter, " + AssemblyRef.SystemDesign)
- ]
+ [DefaultValue("")]
public string AttributeScopeQuery
{
get => _attributeScopeQuery;
[Fact]
public void GetHashCodeForUnknownNamed()
{
- // .NET Framework gives all such colors the same hash code. CoreFX makes more effort with them.
+ // The .NET Framework gives all unknown colors the same hashcode,
+ // .NET Core will provide a unique hashcode.
Color c1 = Color.FromName("SomeUnknownColorName");
Color c2 = Color.FromName("AnotherUnknownColorName");
Assert.NotEqual(c2.GetHashCode(), c1.GetHashCode());
[PlatformSpecific(TestPlatforms.Windows)] // trailing whitespace in path is removed on Windows
public void TrailingWhiteSpace_NotTrimmed(string component)
{
- // In CoreFX we don't trim anything other than space (' ')
+ // In .NET Core we don't trim anything other than space (' ')
DirectoryInfo testDir = Create(GetTestFilePath() + component);
string path = IOServices.RemoveTrailingSlash(testDir.FullName);
DirectoryInfo result = Create(path);
[PlatformSpecific(TestPlatforms.Windows)]
public void TrailingWhiteSpace_NotTrimmed(string component)
{
- // In CoreFX we don't trim anything other than space (' ')
+ // In .NET Core we don't trim anything other than space (' ')
string path = GetTestFilePath() + component;
FileInfo testFile = new FileInfo(path);
testFile.Create().Dispose();
internal static void GetDefaultIdentityAndHash(out object identity, out string hash, char separator)
{
- // .NET Framework IsolatedStorage uses identity from System.Security.Policy.Evidence to build
+ // In .NET Framework IsolatedStorage uses identity from System.Security.Policy.Evidence to build
// the folder structure on disk. It would use the "best" available evidence in this order:
//
// 1. Publisher (Authenticode)
// from the Assembly which comes from the EntryAssembly(). We'll emulate the legacy default behavior
// by pulling directly from EntryAssembly.
//
- // Note that it is possible that there won't be an EntryAssembly, which is something .NET Framework doesn't
+ // Note that it is possible that there won't be an EntryAssembly, which is something the .NET Framework doesn't
// have to deal with and shouldn't be likely on .NET Core due to a single AppDomain. Without Evidence
// to pull from we'd have to dig into the use case to try and find a reasonable solution should we
// run into this in the wild.
// private const string IDFile = "identity.dat";
// "info.dat" is used to track disk space usage (against quota). The accounting file for Silverlight
- // stores is "appInfo.dat". CoreFX is always in full trust so we can safely ignore these.
+ // stores is "appInfo.dat". .NET Core is always in full trust so we can safely ignore these.
//
// private const string InfoFile = "info.dat";
// private const string AppInfoFile = "appInfo.dat";
// Not currently supported: https://github.com/dotnet/corefx/issues/10936
// Implementing this would require serializing/deserializing identity objects which is particularly
- // complicated given the normal identity objects used by .NET Framework aren't available on CoreFX.
+ // complicated given the normal identity objects used by .NET Framework aren't available on .NET Core.
//
// Starting expectation is that a given store's location would be identical between implementations
- // (say, for a particular StrongName). You could iterate any store opened at least once by .NET Framework on
- // .NET Framework as it would create the needed identity file. You wouldn't be able to iterate if it was only
- // ever opened by CoreFX, as the needed file isn't there yet.
+ // (say, for a particular StrongName). You could iterate any store opened at least once by the .NET Framework
+ // at run time as it would create the needed identity file. You wouldn't be able to iterate if it was only
+ // ever opened by .NET Core, as the needed file isn't there yet.
return new IsolatedStorageFileEnumerator();
}
return false;
// Check if we have unknown files
-
- // Note that we don't generate these files in CoreFX, but we want to match
- // .NET Framework removal semantics as .NET Framework will generate these.
+ // Note that we don't generate these files in .NET Core, but we want to match
+ // the removal semantics generated by the .NET Framework.
if (Helper.IsRoaming(Scope))
return ((files.Length > 1) || !IsIdFile(files[0]));
}
// On .NET Framework FileStream has an internal no arg constructor that we utilize to provide the facade. We don't have access
- // to internals in CoreFX so we'll do the next best thing and contort ourselves into the SafeFileHandle constructor.
+ // to internals in .NET Core so we'll do the next best thing and contort ourselves into the SafeFileHandle constructor.
// (A path constructor would try and create the requested file and give us two open handles.)
//
// We only expose our own nested FileStream so the base class having a handle doesn't matter. Passing a new SafeFileHandle
/// </summary>
public static string GetUserRootDirectory(this IsolatedStorageFile isf)
{
- // CoreFX and .NET Framework use the same internal property
+ // .NET Core and .NET Framework use the same internal property
return (string)s_rootDirectoryProperty.GetValue(isf);
}
//is not present, we base our decision on byte order marking. Previously, reader was an XmlTextReader, which would
//take that into account and return the correct value.
- //However, we can't use XmlTextReader, as it is not in COREFX. Therefore, if there is no XmlDeclaration, or the encoding
+ //However, we can't use XmlTextReader, as it is not in the libraries. Therefore, if there is no XmlDeclaration, or the encoding
//attribute is not set, then we will throw now exception, and UTF-8 will be assumed.
//TODO: in the future, we can do the work to detect the BOM, and throw an exception if the file is in an invalid encoding.
break;
case ExpressionType.Power:
op = "**";
- break; // This was changed in CoreFx from ^ to **
+ break; // This was changed in .NET Core from ^ to **
case ExpressionType.PowerAssign:
op = "**=";
break;
case ExpressionType.ConvertChecked:
Out(", ");
Out(node.Type.Name);
- Out(')'); break; // These were changed in CoreFx to add the type name
+ Out(')'); break; // These were changed in .NET Core to add the type name
case ExpressionType.PostIncrementAssign: Out("++"); break;
case ExpressionType.PostDecrementAssign: Out("--"); break;
default: Out(')'); break;
case CodeLanguage.JScript:
strProvider = "JScript.NET.";
- bSucceeded = false; // JScriptCodeProvider does not exist on CoreFx
+ bSucceeded = false; // JScriptCodeProvider does not exist on .NET Core
break;
case CodeLanguage.CSharp:
[Fact]
public void ConnectionGroupName_SetAndGetGroup_ValuesMatch()
{
- // Note: In CoreFX changing this value will not have any effect on HTTP stack's behavior.
+ // Note: In .NET Core changing this value will not have any effect on HTTP stack's behavior.
// For app-compat reasons we allow applications to alter and read the property.
HttpWebRequest request = WebRequest.CreateHttp("http://test");
Assert.Null(request.ConnectionGroupName);
[Fact]
public void ReadWriteTimeout_SetThenGet_ValuesMatch()
{
- // Note: In CoreFX changing this value will not have any effect on HTTP stack's behavior.
+ // Note: In .NET Core changing this value will not have any effect on HTTP stack's behavior.
// For app-compat reasons we allow applications to alter and read the property.
HttpWebRequest request = WebRequest.CreateHttp("http://test");
request.ReadWriteTimeout = 5;
string authtype = context.ProtocolName;
// The following call was also specifying WindowsAccountType.Normal, true.
- // WindowsIdentity.IsAuthenticated is no longer supported in CoreFX.
+ // WindowsIdentity.IsAuthenticated is no longer supported in .NET Core
result = new WindowsIdentity(token.DangerousGetHandle(), authtype);
return result;
}
Interop.SspiCli.SCHANNEL_CRED.Flags.SCH_CRED_NO_DEFAULT_CREDS |
Interop.SspiCli.SCHANNEL_CRED.Flags.SCH_SEND_AUX_RECORD;
- // CoreFX: always opt-in SCH_USE_STRONG_CRYPTO for TLS.
+ // .NET Core: always opt-in SCH_USE_STRONG_CRYPTO for TLS.
if (((protocolFlags == 0) ||
(protocolFlags & ~(Interop.SChannel.SP_PROT_SSL2 | Interop.SChannel.SP_PROT_SSL3)) != 0)
&& (policy != EncryptionPolicy.AllowNoEncryption) && (policy != EncryptionPolicy.NoEncryption))
{
get
{
- // CoreFX is supported only on Win7+ where ExtendedProtection is supported.
+ // .NET Core is supported only on Win7+ where ExtendedProtection is supported.
return true;
}
}
// Send without using routing tables.
DontRoute = 0x0004,
- // This is defined in the .NET Framework and isn't being ported to CoreFx
+ // This is defined in the .NET Framework and isn't being ported to .NET Core
// since it is Windows specific. However, leave this enum value reserved
// to prevent future numbering conflicts.
// MaxIOVectorLength = 0x0010
[EditorBrowsable(EditorBrowsableState.Never)]
public static void RegisterPrefixes()
{
- // The current WebRequest implementation in corefx does not support upgrading
+ // The current WebRequest implementation in the libraries does not support upgrading
// web socket connections. For now, we throw.
throw new PlatformNotSupportedException();
}
internal const string TopLevelDirectory = "dotnet";
internal const string TopLevelHiddenDirectory = "." + TopLevelDirectory;
+ // Do not update this corefx reference to libraries
+ // as we need to keep the original directory structure.
internal const string SecondLevelDirectory = "corefx";
}
}
public static void DivRem(ref BigInteger lhs, ref BigInteger rhs, out BigInteger quo, out BigInteger rem)
{
- // This is modified from the CoreFX BigIntegerCalculator.DivRem.cs implementation:
- // https://github.com/dotnet/corefx/blob/0bb106232745aedfc0d0c5a84ff2b244bf190317/src/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.DivRem.cs
+ // This is modified from the libraries BigIntegerCalculator.DivRem.cs implementation:
+ // https://github.com/dotnet/runtime/blob/master/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.DivRem.cs
Debug.Assert(!rhs.IsZero());
return new string(dest, 0, position);
}
- // This implementation of EscapeString has been copied from System.Private.Uri from corefx repo
+ // This implementation of EscapeString has been copied from System.Private.Uri from the runtime repo
// - forceX characters are always escaped if found
// - rsvd character will remain unescaped
//
public void Type(EntityHandle type, bool isValueType)
{
// Get the coded index before we start writing anything (might throw argument exception):
- // Note: We don't allow TypeSpec as per https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/Ecma-335-Issues.md#proposed-specification-change
+ // Note: We don't allow TypeSpec as per https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/Ecma-335-Issues.md#proposed-specification-change
int codedIndex = CodedIndex.TypeDefOrRef(type);
ClassOrValue(isValueType);
}
// Get the coded index before we start writing anything (might throw argument exception):
- // Note: We don't allow TypeSpec as per https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/Ecma-335-Issues.md#proposed-specification-change
+ // Note: We don't allow TypeSpec as per https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/Ecma-335-Issues.md#proposed-specification-change
int codedIndex = CodedIndex.TypeDefOrRef(genericType);
Builder.WriteByte((byte)SignatureTypeCode.GenericTypeInstance);
/// </summary>
/// <param name="name">
/// Document Name blob.
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#document-name-blob
/// </param>
/// <param name="hashAlgorithm">
/// GUID of the hash algorithm used to calculate the value of <paramref name="hash"/>.
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#document-table-0x30 for common values.
/// </param>
/// <param name="hash">
/// The hash of the document content.
/// </param>
/// <param name="language">
/// GUID of the language.
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#document-table-0x30 for common values.
/// </param>
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md
public DocumentHandle AddDocument(BlobHandle name, GuidHandle hashAlgorithm, BlobHandle hash, GuidHandle language)
{
_documentTable.Add(new DocumentRow
/// </param>
/// <param name="sequencePoints">
/// Sequence Points blob, or nil if the method doesn't have sequence points.
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#sequence-points-blob.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#sequence-points-blob.
/// </param>
public MethodDebugInformationHandle AddMethodDebugInformation(DocumentHandle document, BlobHandle sequencePoints)
{
/// </summary>
/// <param name="name">Name of the variable.</param>
/// <param name="signature">
- /// LocalConstantSig blob, see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localconstantsig-blob.
+ /// LocalConstantSig blob, see https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localconstantsig-blob.
/// </param>
public LocalConstantHandle AddLocalConstant(StringHandle name, BlobHandle signature)
{
/// </summary>
/// <param name="parentScope">Parent scope handle.</param>
/// <param name="imports">
- /// Imports blob, see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#imports-blob.
+ /// Imports blob, see https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#imports-blob.
/// </param>
public ImportScopeHandle AddImportScope(ImportScopeHandle parentScope, BlobHandle imports)
{
/// Source document in debug metadata.
/// </summary>
/// <remarks>
- /// See also https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#document-table-0x30.
+ /// See also https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#document-table-0x30.
/// </remarks>
public readonly struct Document
{
/// Lexical scope within which a group of imports are available. Stored in debug metadata.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#importscope-table-0x35
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#importscope-table-0x35
/// </remarks>
public readonly struct ImportScope
{
/// Local constant. Stored in debug metadata.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localconstant-table-0x34.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localconstant-table-0x34.
/// </remarks>
public readonly struct LocalConstant
{
/// Scope of local variables and constants. Stored in debug metadata.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localscope-table-0x32.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localscope-table-0x32.
/// </remarks>
public readonly struct LocalScope
{
/// Local variable. Stored in debug metadata.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localvariable-table-0x33.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#localvariable-table-0x33.
/// </remarks>
public readonly struct LocalVariable
{
/// Debug information associated with a method definition. Stored in debug metadata.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#methoddebuginformation-table-0x31.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#methoddebuginformation-table-0x31.
/// </remarks>
public readonly struct MethodDebugInformation
{
/// Associated PDB file description.
/// </summary>
/// <remarks>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md#codeview-debug-directory-entry-type-2 for specification.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#codeview-debug-directory-entry-type-2 for specification.
/// </remarks>
CodeView = 2,
/// The debug directory entry of type <see cref="Reproducible"/> must have all fields, except for Type zeroed.
/// </para>
/// <para>
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md#deterministic-debug-directory-entry-type-16 for specification.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#deterministic-debug-directory-entry-type-16 for specification.
/// </para>
/// </remarks>
Reproducible = 16,
///
/// Data spans the remainder of the blob and contains a Deflate-compressed Portable PDB.
///
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md#embedded-portable-pdb-debug-directory-entry-type-17 for specification.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#embedded-portable-pdb-debug-directory-entry-type-17 for specification.
/// </remarks>
EmbeddedPortablePdb = 17,
/// The hash can be used to validate that a given PDB file was built with the PE/COFF file and not altered in any way.
/// More than one entry can be present, in case multiple PDBs were produced during the build of the PE/COFF file (e.g. private and public symbols).
///
- /// See https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md#pdb-checksum-debug-directory-entry-type-19 for specification.
+ /// See https://github.com/dotnet/runtime/blob/master/src/libraries/System.Reflection.Metadata/specs/PE-COFF.md#pdb-checksum-debug-directory-entry-type-19 for specification.
/// </remarks>
PdbChecksum = 19,
}
{
// @TODO - https://github.com/dotnet/corefxlab/issues/2447 - This is not the best way to compute the PKT as AssemblyName
// throws if the PK isn't a valid PK blob. That's not something we should block a metadata inspection tool for so we
- // should compute the PKT ourselves as soon as we can convince the CoreFx analyzers to let us use SHA1.
+ // should compute the PKT ourselves as soon as we can convince the libraries analyzers to let us use SHA1.
AssemblyName an = new AssemblyName();
an.SetPublicKey(pkt);
return an.GetPublicKeyToken();
public static TheoryData<string, string, string> GetFullPath_Windows_FullyQualified => new TheoryData<string, string, string>
{
- { @"C:\git\corefx", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C:\git\corefx.\.\.\.\.\.", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C:\git\corefx\\\.", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C:\git\corefx\..\corefx\.\..\corefx", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C:\somedir\..", @"C:\git\corefx", @"C:\" },
- { @"C:\", @"C:\git\corefx", @"C:\" },
- { @"..\..\..\..", @"C:\git\corefx", @"C:\" },
- { @"C:\\\", @"C:\git\corefx", @"C:\" },
- { @"C:\..\..\", @"C:\git\corefx", @"C:\" },
- { @"C:\..\git\..\.\", @"C:\git\corefx", @"C:\" },
- { @"C:\git\corefx\..\..\..\", @"C:\git\corefx", @"C:\" },
- { @"C:\.\corefx\", @"C:\git\corefx", @"C:\corefx\" },
+ { @"C:\git\runtime", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C:\git\runtime.\.\.\.\.\.", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C:\git\runtime\\\.", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C:\git\runtime\..\runtime\.\..\runtime", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C:\somedir\..", @"C:\git\runtime", @"C:\" },
+ { @"C:\", @"C:\git\runtime", @"C:\" },
+ { @"..\..\..\..", @"C:\git\runtime", @"C:\" },
+ { @"C:\\\", @"C:\git\runtime", @"C:\" },
+ { @"C:\..\..\", @"C:\git\runtime", @"C:\" },
+ { @"C:\..\git\..\.\", @"C:\git\runtime", @"C:\" },
+ { @"C:\git\runtime\..\..\..\", @"C:\git\runtime", @"C:\" },
+ { @"C:\.\runtime\", @"C:\git\runtime", @"C:\runtime\" },
};
[Theory,
public static TheoryData<string, string, string> GetFullPath_Windows_PathIsDevicePath => new TheoryData<string, string, string>
{
// Device Paths with \\?\ wont get normalized i.e. relative segments wont get removed.
- { @"\\?\C:\git\corefx.\.\.\.\.\.", @"C:\git\corefx", @"\\?\C:\git\corefx.\.\.\.\.\." },
- { @"\\?\C:\git\corefx\\\.", @"C:\git\corefx", @"\\?\C:\git\corefx\\\." },
- { @"\\?\C:\git\corefx\..\corefx\.\..\corefx", @"C:\git\corefx", @"\\?\C:\git\corefx\..\corefx\.\..\corefx" },
- { @"\\?\\somedir\..", @"C:\git\corefx", @"\\?\\somedir\.." },
- { @"\\?\", @"C:\git\corefx", @"\\?\" },
- { @"\\?\..\..\..\..", @"C:\git\corefx", @"\\?\..\..\..\.." },
- { @"\\?\\\\" , @"C:\git\corefx", @"\\?\\\\" },
- { @"\\?\C:\Foo." , @"C:\git\corefx", @"\\?\C:\Foo." },
- { @"\\?\C:\Foo " , @"C:\git\corefx", @"\\?\C:\Foo " },
-
- { @"\\.\C:\git\corefx.\.\.\.\.\.", @"C:\git\corefx", @"\\.\C:\git\corefx" },
- { @"\\.\C:\git\corefx\\\.", @"C:\git\corefx", @"\\.\C:\git\corefx" },
- { @"\\.\C:\git\corefx\..\corefx\.\..\corefx", @"C:\git\corefx", @"\\.\C:\git\corefx" },
- { @"\\.\\somedir\..", @"C:\git\corefx", @"\\.\" },
- { @"\\.\", @"C:\git\corefx", @"\\.\" },
- { @"\\.\..\..\..\..", @"C:\git\corefx", @"\\.\" },
- { @"\\.\", @"C:\git\corefx", @"\\.\" },
- { @"\\.\C:\Foo." , @"C:\git\corefx", @"\\.\C:\Foo" },
- { @"\\.\C:\Foo " , @"C:\git\corefx", @"\\.\C:\Foo" },
+ { @"\\?\C:\git\runtime.\.\.\.\.\.", @"C:\git\runtime", @"\\?\C:\git\runtime.\.\.\.\.\." },
+ { @"\\?\C:\git\runtime\\\.", @"C:\git\runtime", @"\\?\C:\git\runtime\\\." },
+ { @"\\?\C:\git\runtime\..\runtime\.\..\runtime", @"C:\git\runtime", @"\\?\C:\git\runtime\..\runtime\.\..\runtime" },
+ { @"\\?\\somedir\..", @"C:\git\runtime", @"\\?\\somedir\.." },
+ { @"\\?\", @"C:\git\runtime", @"\\?\" },
+ { @"\\?\..\..\..\..", @"C:\git\runtime", @"\\?\..\..\..\.." },
+ { @"\\?\\\\" , @"C:\git\runtime", @"\\?\\\\" },
+ { @"\\?\C:\Foo." , @"C:\git\runtime", @"\\?\C:\Foo." },
+ { @"\\?\C:\Foo " , @"C:\git\runtime", @"\\?\C:\Foo " },
+
+ { @"\\.\C:\git\runtime.\.\.\.\.\.", @"C:\git\runtime", @"\\.\C:\git\runtime" },
+ { @"\\.\C:\git\runtime\\\.", @"C:\git\runtime", @"\\.\C:\git\runtime" },
+ { @"\\.\C:\git\runtime\..\runtime\.\..\runtime", @"C:\git\runtime", @"\\.\C:\git\runtime" },
+ { @"\\.\\somedir\..", @"C:\git\runtime", @"\\.\" },
+ { @"\\.\", @"C:\git\runtime", @"\\.\" },
+ { @"\\.\..\..\..\..", @"C:\git\runtime", @"\\.\" },
+ { @"\\.\", @"C:\git\runtime", @"\\.\" },
+ { @"\\.\C:\Foo." , @"C:\git\runtime", @"\\.\C:\Foo" },
+ { @"\\.\C:\Foo " , @"C:\git\runtime", @"\\.\C:\Foo" },
};
[Theory,
public static TheoryData<string, string, string> GetFullPath_CommonRootedWindowsData => new TheoryData<string, string, string>
{
- { "", @"C:\git\corefx", @"C:\git\corefx" },
- { "..", @"C:\git\corefx", @"C:\git" },
+ { "", @"C:\git\runtime", @"C:\git\runtime" },
+ { "..", @"C:\git\runtime", @"C:\git" },
// Current drive rooted
- { @"\tmp\bar", @"C:\git\corefx", @"C:\tmp\bar" },
- { @"\.\bar", @"C:\git\corefx", @"C:\bar" },
- { @"\tmp\..", @"C:\git\corefx", @"C:\" },
- { @"\tmp\bar\..", @"C:\git\corefx", @"C:\tmp" },
- { @"\tmp\bar\..", @"C:\git\corefx", @"C:\tmp" },
- { @"\", @"C:\git\corefx", @"C:\" },
-
- { @"..\..\tmp\bar", @"C:\git\corefx", @"C:\tmp\bar" },
- { @"..\..\.\bar", @"C:\git\corefx", @"C:\bar" },
- { @"..\..\..\..\tmp\..", @"C:\git\corefx", @"C:\" },
- { @"\tmp\..\bar..\..\..", @"C:\git\corefx", @"C:\" },
- { @"\tmp\..\bar\..", @"C:\git\corefx", @"C:\" },
- { @"\.\.\..\..\", @"C:\git\corefx", @"C:\" },
+ { @"\tmp\bar", @"C:\git\runtime", @"C:\tmp\bar" },
+ { @"\.\bar", @"C:\git\runtime", @"C:\bar" },
+ { @"\tmp\..", @"C:\git\runtime", @"C:\" },
+ { @"\tmp\bar\..", @"C:\git\runtime", @"C:\tmp" },
+ { @"\tmp\bar\..", @"C:\git\runtime", @"C:\tmp" },
+ { @"\", @"C:\git\runtime", @"C:\" },
+
+ { @"..\..\tmp\bar", @"C:\git\runtime", @"C:\tmp\bar" },
+ { @"..\..\.\bar", @"C:\git\runtime", @"C:\bar" },
+ { @"..\..\..\..\tmp\..", @"C:\git\runtime", @"C:\" },
+ { @"\tmp\..\bar..\..\..", @"C:\git\runtime", @"C:\" },
+ { @"\tmp\..\bar\..", @"C:\git\runtime", @"C:\" },
+ { @"\.\.\..\..\", @"C:\git\runtime", @"C:\" },
// Specific drive rooted
- { @"C:tmp\foo\..", @"C:\git\corefx", @"C:\git\corefx\tmp" },
- { @"C:tmp\foo\.", @"C:\git\corefx", @"C:\git\corefx\tmp\foo" },
- { @"C:tmp\foo\..", @"C:\git\corefx", @"C:\git\corefx\tmp" },
- { @"C:tmp", @"C:\git\corefx", @"C:\git\corefx\tmp" },
- { @"C:", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C", @"C:\git\corefx", @"C:\git\corefx\C" },
-
- { @"Z:tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp\foo\.", @"C:\git\corefx", @"Z:\tmp\foo" },
- { @"Z:tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:", @"C:\git\corefx", @"Z:\" },
- { @"Z", @"C:\git\corefx", @"C:\git\corefx\Z" },
+ { @"C:tmp\foo\..", @"C:\git\runtime", @"C:\git\runtime\tmp" },
+ { @"C:tmp\foo\.", @"C:\git\runtime", @"C:\git\runtime\tmp\foo" },
+ { @"C:tmp\foo\..", @"C:\git\runtime", @"C:\git\runtime\tmp" },
+ { @"C:tmp", @"C:\git\runtime", @"C:\git\runtime\tmp" },
+ { @"C:", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C", @"C:\git\runtime", @"C:\git\runtime\C" },
+
+ { @"Z:tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp\foo\.", @"C:\git\runtime", @"Z:\tmp\foo" },
+ { @"Z:tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:", @"C:\git\runtime", @"Z:\" },
+ { @"Z", @"C:\git\runtime", @"C:\git\runtime\Z" },
// Relative segments eating into the root
- { @"C:..\..\..\tmp\foo\..", @"C:\git\corefx", @"C:\tmp" },
- { @"C:tmp\..\..\foo\.", @"C:\git\corefx", @"C:\git\foo" },
- { @"C:..\..\tmp\foo\..", @"C:\git\corefx", @"C:\tmp" },
- { @"C:tmp\..\", @"C:\git\corefx", @"C:\git\corefx\" },
- { @"C:", @"C:\git\corefx", @"C:\git\corefx" },
- { @"C", @"C:\git\corefx", @"C:\git\corefx\C" },
-
- { @"C:tmp\..\..\..\..\foo\..", @"C:\git\corefx", @"C:\" },
+ { @"C:..\..\..\tmp\foo\..", @"C:\git\runtime", @"C:\tmp" },
+ { @"C:tmp\..\..\foo\.", @"C:\git\runtime", @"C:\git\foo" },
+ { @"C:..\..\tmp\foo\..", @"C:\git\runtime", @"C:\tmp" },
+ { @"C:tmp\..\", @"C:\git\runtime", @"C:\git\runtime\" },
+ { @"C:", @"C:\git\runtime", @"C:\git\runtime" },
+ { @"C", @"C:\git\runtime", @"C:\git\runtime\C" },
+
+ { @"C:tmp\..\..\..\..\foo\..", @"C:\git\runtime", @"C:\" },
{ @"C:tmp\..\..\foo\.", @"C:\", @"C:\foo" },
{ @"C:..\..\tmp\..\foo\..", @"C:\", @"C:\" },
{ @"C:tmp\..\", @"C:\", @"C:\" },
- { @"Z:tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp\foo\.", @"C:\git\corefx", @"Z:\tmp\foo" },
- { @"Z:tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:", @"C:\git\corefx", @"Z:\" },
- { @"Z", @"C:\git\corefx", @"C:\git\corefx\Z" },
-
- { @"Z:..\..\..\tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp\..\..\foo\.", @"C:\git\corefx", @"Z:\foo" },
- { @"Z:..\..\tmp\foo\..", @"C:\git\corefx", @"Z:\tmp" },
- { @"Z:tmp\..\", @"C:\git\corefx", @"Z:\" },
- { @"Z:", @"C:\git\corefx", @"Z:\" },
- { @"Z", @"C:\git\corefx", @"C:\git\corefx\Z" },
-
- { @"Z:tmp\..\..\..\..\foo\..", @"C:\git\corefx", @"Z:\" },
+ { @"Z:tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp\foo\.", @"C:\git\runtime", @"Z:\tmp\foo" },
+ { @"Z:tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:", @"C:\git\runtime", @"Z:\" },
+ { @"Z", @"C:\git\runtime", @"C:\git\runtime\Z" },
+
+ { @"Z:..\..\..\tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp\..\..\foo\.", @"C:\git\runtime", @"Z:\foo" },
+ { @"Z:..\..\tmp\foo\..", @"C:\git\runtime", @"Z:\tmp" },
+ { @"Z:tmp\..\", @"C:\git\runtime", @"Z:\" },
+ { @"Z:", @"C:\git\runtime", @"Z:\" },
+ { @"Z", @"C:\git\runtime", @"C:\git\runtime\Z" },
+
+ { @"Z:tmp\..\..\..\..\foo\..", @"C:\git\runtime", @"Z:\" },
{ @"Z:tmp\..\..\foo\.", @"C:\", @"Z:\foo" },
{ @"Z:..\..\tmp\..\foo\..", @"C:\", @"Z:\" },
{ @"Z:tmp\..\", @"C:\", @"Z:\" },
// Jump HandleCollector instance forward until it almost overflows
TypeInfo type = typeof(HandleCollector).GetTypeInfo();
FieldInfo handleCount =
- type.GetDeclaredField("_handleCount") ?? // corefx
- type.GetDeclaredField("handleCount"); // desktop
+ type.GetDeclaredField("_handleCount") ?? // .NET Core
+ type.GetDeclaredField("handleCount"); // .NET Framework
Assert.NotNull(handleCount);
handleCount.SetValue(collector, int.MaxValue - ToAdd);
}
[Fact]
public static void HashCode_Add()
{
- // The version of xUnit used by corefx does not support params theories.
+ // The version of xUnit used by .NET Core does not support params theories.
void Theory(uint expected, params uint[] vector)
{
var hc = new HashCode();
AssertExtensions.Throws<ArgumentException>("name", () => Encoding.GetEncoding((string)mapping[2]));
}
- // Currently the class EncodingInfo isn't present in corefx, so this checks none of the code pages are present.
+ // Currently the class EncodingInfo isn't present in .NET Core, so this checks none of the code pages are present.
// When it is, comment out this line and remove the previous foreach/assert.
// Assert.Equal(CrossplatformDefaultEncodings, Encoding.GetEncodings().OrderBy(i => i.CodePage).Select(i => Map(i.CodePage, i.WebName)));
}
// Adding the code page provider should keep the originals, too.
ValidateDefaultEncodings();
- // Currently the class EncodingInfo isn't present in corefx, so this checks the complete list
+ // Currently the class EncodingInfo isn't present in .NET Core, so this checks the complete list
// When it is, comment out this line and remove the previous foreach/assert.
// Assert.Equal(CrossplatformDefaultEncodings().Union(CodePageInfo().Select(i => Map((int)i[0], (string)i[1])).OrderBy(i => i.Key)),
// Encoding.GetEncodings().OrderBy(i => i.CodePage).Select(i => Map(i.CodePage, i.WebName)));
@"""MyDateTime"" : ""2019-01-30T12:01:02.0000000Z""," +
@"""MyDateTimeOffset"" : ""2019-01-30T12:01:02.0000000+01:00""," +
@"""MyGuid"" : ""1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6""," +
- @"""MyUri"" : ""https://github.com/dotnet/corefx""," +
+ @"""MyUri"" : ""https://github.com/dotnet/runtime""," +
@"""MyEnum"" : 2," + // int by default
@"""MyInt64Enum"" : -9223372036854775808," +
@"""MyUInt64Enum"" : 18446744073709551615," +
@"""MyDateTimeArray"" : [""2019-01-30T12:01:02.0000000Z""]," +
@"""MyDateTimeOffsetArray"" : [""2019-01-30T12:01:02.0000000+01:00""]," +
@"""MyGuidArray"" : [""1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6""]," +
- @"""MyUriArray"" : [""https://github.com/dotnet/corefx""]," +
+ @"""MyUriArray"" : [""https://github.com/dotnet/runtime""]," +
@"""MyEnumArray"" : [2]," + // int by default
@"""MyInt16TwoDimensionArray"" : [[10, 11],[20, 21]]," +
@"""MyInt16TwoDimensionList"" : [[10, 11],[20, 21]]," +
MyDateTime = new DateTime(2019, 1, 30, 12, 1, 2, DateTimeKind.Utc);
MyDateTimeOffset = new DateTimeOffset(2019, 1, 30, 12, 1, 2, new TimeSpan(1, 0, 0));
MyGuid = new Guid("1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6");
- MyUri = new Uri("https://github.com/dotnet/corefx");
+ MyUri = new Uri("https://github.com/dotnet/runtime");
MyEnum = SampleEnum.Two;
MyInt64Enum = SampleEnumInt64.MinNegative;
MyUInt64Enum = SampleEnumUInt64.Max;
MyDateTimeArray = new DateTime[] { new DateTime(2019, 1, 30, 12, 1, 2, DateTimeKind.Utc) };
MyDateTimeOffsetArray = new DateTimeOffset[] { new DateTimeOffset(2019, 1, 30, 12, 1, 2, new TimeSpan(1, 0, 0)) };
MyGuidArray = new Guid[] { new Guid("1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6") };
- MyUriArray = new Uri[] { new Uri("https://github.com/dotnet/corefx") };
+ MyUriArray = new Uri[] { new Uri("https://github.com/dotnet/runtime") };
MyEnumArray = new SampleEnum[] { SampleEnum.Two };
MySimpleStruct = new SimpleStruct { One = 11, Two = 1.9999 };
MySimpleTestStruct = new SimpleTestStruct { MyInt64 = 64, MyString = "Hello", MyInt32Array = new int[] { 32 } };
Assert.Equal(new DateTime(2019, 1, 30, 12, 1, 2, DateTimeKind.Utc), MyDateTime);
Assert.Equal(new DateTimeOffset(2019, 1, 30, 12, 1, 2, new TimeSpan(1, 0, 0)), MyDateTimeOffset);
Assert.Equal(new Guid("1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6"), MyGuid);
- Assert.Equal(new Uri("https://github.com/dotnet/corefx"), MyUri);
+ Assert.Equal(new Uri("https://github.com/dotnet/runtime"), MyUri);
Assert.Equal(SampleEnum.Two, MyEnum);
Assert.Equal(SampleEnumInt64.MinNegative, MyInt64Enum);
Assert.Equal(SampleEnumUInt64.Max, MyUInt64Enum);
Assert.Equal(new DateTime(2019, 1, 30, 12, 1, 2, DateTimeKind.Utc), MyDateTimeArray[0]);
Assert.Equal(new DateTimeOffset(2019, 1, 30, 12, 1, 2, new TimeSpan(1, 0, 0)), MyDateTimeOffsetArray[0]);
Assert.Equal(new Guid("1B33498A-7B7D-4DDA-9C13-F6AA4AB449A6"), MyGuidArray[0]);
- Assert.Equal(new Uri("https://github.com/dotnet/corefx"), MyUriArray[0]);
+ Assert.Equal(new Uri("https://github.com/dotnet/runtime"), MyUriArray[0]);
Assert.Equal(SampleEnum.Two, MyEnumArray[0]);
Assert.Equal(10, MyInt16TwoDimensionArray[0][0]);
@"""MyDecimal"" : [3.3]," +
@"""MyDateTime"" : [""2019-01-30T12:01:02.0000000Z""]," +
@"""MyGuid"" : [""97E9F02C-337E-4615-B26C-0020F5DC28C9""]," +
- @"""MyUri"" : [""https://github.com/dotnet/corefx""]," +
+ @"""MyUri"" : [""https://github.com/dotnet/runtime""]," +
@"""MyEnum"" : [2]" + // int by default
@"}";
MyDecimal = new object[] { 3.3m };
MyDateTime = new object[] { new DateTime(2019, 1, 30, 12, 1, 2, DateTimeKind.Utc) };
MyGuid = new object[] { new Guid("97E9F02C-337E-4615-B26C-0020F5DC28C9") };
- MyUri = new object[] { new Uri("https://github.com/dotnet/corefx") };
+ MyUri = new object[] { new Uri("https://github.com/dotnet/runtime") };
MyEnum = new object[] { SampleEnum.Two };
}
Assert.Equal(new Guid("97E9F02C-337E-4615-B26C-0020F5DC28C9"), ((JsonElement)MyGuid[0]).GetGuid());
Assert.IsType<JsonElement>(MyUri[0]);
Assert.Equal(JsonValueKind.String, ((JsonElement)MyUri[0]).ValueKind);
- // TODO: Use JsonElement.GetUri() when https://github.com/dotnet/corefx/issues/38647 is implemented.
- Assert.Equal(new Uri("https://github.com/dotnet/corefx"), new Uri(((JsonElement)MyUri[0]).GetString()));
+ Assert.Equal(new Uri("https://github.com/dotnet/runtime"), new Uri(((JsonElement)MyUri[0]).GetString()));
Assert.IsType<JsonElement>(MyEnum[0]);
Assert.Equal(JsonValueKind.Number, ((JsonElement)MyEnum[0]).ValueKind);
Assert.Equal(SampleEnum.Two, (SampleEnum)((JsonElement)MyEnum[0]).GetUInt32());
install-package System.Utf8String.Experimental -prerelease -source https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
```
-This package can only be installed into a project targeting a __nightly__ build of coreclr or corefx. Anything under the _master_ column of https://github.com/dotnet/core-sdk would work, as would any coreclr + corefx built from your own dev box (as long as you're building from _master_ instead of _release/..._). Installing this onto a project targeting an official Preview build would not work, as official Preview builds come from the _release_ branch.
+This package can only be installed into a project targeting a __nightly__ build of coreclr or libraries. Anything under the _master_ column of https://github.com/dotnet/core-sdk would work, as would any coreclr + libraries built from your own dev box (as long as you're building from _master_ instead of _release/..._). Installing this onto a project targeting an official Preview build would not work, as official Preview builds come from the _release_ branch.
It's possible that installing the package might fail with an error similar to that seen below.
install-package : NU1605: Detected package downgrade: Microsoft.NETCore.Platforms from 3.0.0-preview6.19251.6 to 3.0.0-preview6.19223.2. Reference the package directly from the project to select a different version.
```
-This can occur if the NuGet client attempts to install a newer version of the package than allowed by the coreclr / corefx your application is targeting. For now you can work around this error by specifying the explicit package version in the install command. Match the version passed to the NuGet client (shown below) to the version specified in the error message (shown above).
+This can occur if the NuGet client attempts to install a newer version of the package than allowed by the .NET Core version your application is targeting. For now you can work around this error by specifying the explicit package version in the install command. Match the version passed to the NuGet client (shown below) to the version specified in the error message (shown above).
```ps
install-package System.Utf8String.Experimental -prerelease -source https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json -version 3.0.0-preview6.19223.2