$ ROOTFS_DIR=`pwd`/.tools/rootfs/arm ./build.sh libs.native --cross --arch arm --librariesConfiguration Release
-Build artifacts can be found in `artifacts/bin/native/net7.0-<TargetOS>-<BuildArch>-<BuildType>/`:
-
- $ ls artifacts/bin/native/net7.0-Linux-Release-arm/*
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Globalization.Native.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Globalization.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Globalization.Native.so.dbg
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Compression.Native.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Compression.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Compression.Native.so.dbg
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Ports.Native.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Ports.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.IO.Ports.Native.so.dbg
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Native.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Native.so.dbg
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Net.Security.Native.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Net.Security.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Net.Security.Native.so.dbg
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.a
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so.dbg
-
- $ file artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Native.so
- artifacts/bin/native/net7.0-Linux-Release-arm/libSystem.Native.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=5f6f6f9c4012dffed133624867adf32ac2af130d, stripped
+Build artifacts can be found in `artifacts/bin/native/net8.0-<TargetOS>-<BuildArch>-<BuildType>/`:
+
+ $ ls artifacts/bin/native/net8.0-Linux-Release-arm/*
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Globalization.Native.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Globalization.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Globalization.Native.so.dbg
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Compression.Native.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Compression.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Compression.Native.so.dbg
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Ports.Native.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Ports.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.IO.Ports.Native.so.dbg
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Native.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Native.so.dbg
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Net.Security.Native.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Net.Security.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Net.Security.Native.so.dbg
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.a
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Security.Cryptography.Native.OpenSsl.so.dbg
+
+ $ file artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Native.so
+ artifacts/bin/native/net8.0-Linux-Release-arm/libSystem.Native.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=5f6f6f9c4012dffed133624867adf32ac2af130d, stripped
Compile managed runtime libraries on Linux
$ ./build.sh libs.sfx --arch arm --librariesConfiguration Release /p:ILLinkTrimAssembly=false
-Build artifacts can be found in `artifacts/bin/microsoft.netcore.app.runtime.<TargetOS>-<BuildArch>/<BuildType>/runtimes/<TargetOS>-<BuildArch>/lib/net7.0/`. For more details on the build configurations see [project-guidelines](/docs/coding-guidelines/project-guidelines.md).
+Build artifacts can be found in `artifacts/bin/microsoft.netcore.app.runtime.<TargetOS>-<BuildArch>/<BuildType>/runtimes/<TargetOS>-<BuildArch>/lib/net8.0/`. For more details on the build configurations see [project-guidelines](/docs/coding-guidelines/project-guidelines.md).
Both native and managed runtime libraries can be built at the same time with:
5. Set `Command=$(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)\corerun.exe`. This points to the folder where the built runtime binaries are present.
6. Set `Command Arguments=<managed app you wish to run>` (e.g. HelloWorld.dll).
7. Set `Working Directory=$(SolutionDir)\..\..\..\..\bin\coreclr\windows.$(Platform).$(Configuration)`. This points to the folder containing CoreCLR binaries.
-8. Set `Environment=CORE_LIBRARIES=$(SolutionDir)\..\..\..\..\bin\runtime\<target-framework>-windows-$(Configuration)-$(Platform)`, where '\<target-framework\>' is the target framework of current branch; for example `netcoreapp3.1` `net5.0`, `net6.0`, or `net7.0`. A few notes on this step:
+8. Set `Environment=CORE_LIBRARIES=$(SolutionDir)\..\..\..\..\bin\runtime\<target-framework>-windows-$(Configuration)-$(Platform)`, where '\<target-framework\>' is the target framework of current branch; for example `net6.0`, `net7.0` or `net8.0`. A few notes on this step:
* This points to the folder containing core libraries except `System.Private.CoreLib`.
* This step can be skipped if you are debugging CLR tests that reference only `System.Private.CoreLib`. Otherwise, it's required to debug a real-world application that references anything else, including `System.Runtime`.
},
{
"name": "CORE_LIBRARIES",
- // for example net7.0-windows-Debug-x64
+ // for example net8.0-windows-Debug-x64
"value": "${cmake.installRoot}\\..\\..\\runtime\\<tfm>-windows-<configuration>-<arch>\\"
}
],
```text
Hello World from .NET 8.0.0-dev
-The location of System.Private.CoreLib.dll is '/path/to/your/app/bin/Debug/net7.0/win-x64/publish/System.Private.CoreLib.dll'
+The location of System.Private.CoreLib.dll is '/path/to/your/app/bin/Debug/net8.0/win-x64/publish/System.Private.CoreLib.dll'
```
-You might be wondering why it says `net7.0` if we are using an `8.0.0` SDK. At the time of writing, we are still preparing all that's needed to fully migrate development to .NET 8. In the not so distant future, the path should be `net8.0` as you might expect, and this doc will be updated accordingly.
-
## Making Changes and Consuming Updated Packages
You've now successfully tested your runtime build. However, more likely than not, you will be making further changes that you'll want to test. The issue here is you can't simply build the repo again and have it work. This is because of the _NuGet Cache_ mentioned earlier. Since the version number doesn't change locally, NuGet doesn't realize changes have been made and thus uses its cached version. To get around this, we have to get rid of such cache. That's why we set a local one using the `globalPackagesFolder` in the `nuget.config` file we created.
</configuration>
```
-After you publish successfully, you will find all the binaries needed to run your application under `bin\Debug\net7.0\win-x64\publish`. You might be wondering why `net7.0` if we are using an `8.0.100` SDK. At the time of writing, we are still preparing all that's needed to fully migrate development to .NET 8. In the not so distant future, the path should be `net8.0` as you might expect, and this doc will be updated accordingly.
+After you publish successfully, you will find all the binaries needed to run your application under `bin\Debug\net8.0\win-x64\publish`.
**But we are not done yet, you need to replace the published runtime files with the files from your local build!**
* `System.Private.CoreLib.dll`: If you modified managed C# code, it will end up here.
* `clrjit.dll`: The JIT compiler. It is also required you copy this one to your published app.
-Now, here comes the main deal to test your build. Once you have your self-contained app published, and CoreCLR built, you will replace the binaries listed above with the generated artifacts. Copy them from `artifacts/bin/coreclr/<OS>.<arch>.<configuration>/` to your app's publication directory, which by default is `your-app-folder/bin/<configuration>/net7.0/<os-code>-<arch>/publish`.
+Now, here comes the main deal to test your build. Once you have your self-contained app published, and CoreCLR built, you will replace the binaries listed above with the generated artifacts. Copy them from `artifacts/bin/coreclr/<OS>.<arch>.<configuration>/` to your app's publication directory, which by default is `your-app-folder/bin/<configuration>/net8.0/<os-code>-<arch>/publish`.
In our previous example this would be:
* From: `artifacts/bin/coreclr/windows.x64.Debug/`
-* To: `HelloWorld/bin/Debug/net7.0/win-x64/publish/`
+* To: `HelloWorld/bin/Debug/net8.0/win-x64/publish/`
## Confirm that the app used your new runtime (Optional)
```text
Core Runtime Info: 8.0.0-dev
-System.Private.CoreLib.dll is located at: /path/to/your/app/bin/Debug/net7.0/win-x64/publish/System.Private.CoreLib.dll
+System.Private.CoreLib.dll is located at: /path/to/your/app/bin/Debug/net8.0/win-x64/publish/System.Private.CoreLib.dll
```
What you are looking for here is that the core runtime used is labelled as `-dev`. This means it is indeed using the one you built in the runtime repo. Also, ensure that the picked _System.Private.CoreLib.dll_ is indeed the one in your `publish` folder.
Make sure you are running the executable directly.
```cmd
-.\bin\Debug\net7.0\win-x64\publish\HelloWorld.exe
+.\bin\Debug\net8.0\win-x64\publish\HelloWorld.exe
```
If you use `dotnet run` it will overwrite your custom binaries before executing the app.
{
public static class PathUtilities
{
-#if NET7_0
+#if NET8_0
+ public const string TFMDirectoryName = "net8.0";
+#elif NET7_0
public const string TFMDirectoryName = "net7.0";
#elif NET6_0
public const string TFMDirectoryName = "net6.0";
-->
<PropertyGroup>
- <NetCoreAppCurrent>net7.0</NetCoreAppCurrent>
+ <NetCoreAppCurrent>net8.0</NetCoreAppCurrent>
<!-- Turn off end of life target framework checks as we intentionally build older .NETCoreApp configurations. -->
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<!--
public const string RuntimeConfigPropertyName = "tfm";
public const string Net6 = "net6.0";
public const string Net7 = "net7.0";
+ public const string Net8 = "net8.0";
}
public static class FxVersion
// 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\runtime\artifacts\bin\testhost\net7.0-windows-Debug-x64\shared\Microsoft.NETCore.App\7.0.0\ d:\repos\runtime\artifacts\bin\System.Runtime.Tests\net7.0-windows-Debug\System.Runtime.Tests.dll");
+ Console.WriteLine(@" dotnet run d:\tmpoutput d:\repos\runtime\artifacts\bin\testhost\net8.0-windows-Debug-x64\shared\Microsoft.NETCore.App\8.0.0\ d:\repos\runtime\artifacts\bin\System.Runtime.Tests\net8.0-windows-Debug\System.Runtime.Tests.dll");
testAssemblyPath = string.Empty;
runtimeAssembliesPath = string.Empty;
outputPath = string.Empty;
PrivateAssets="all"
Private="true"
IncludeReferenceAssemblyInPackage="true" />
- <!-- Only include the 4.4 version in the ref pack, since targeting net7.0 requires Roslyn 4.4 -->
+ <!-- Only include the 4.4 version in the ref pack, since targeting net7.0 or greater requires Roslyn 4.4 -->
<AnalyzerReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Logging.Abstractions\gen\Microsoft.Extensions.Logging.Generators.Roslyn4.4.csproj"
Pack="true"
ReferenceAnalyzer="false" />
<IsPackable>true</IsPackable>
<PackageDescription>Exposes Threading APIs for WebAssembly projects</PackageDescription>
<!--
- NU5128 suppresses missing net7.0 dependencies.
+ NU5128 suppresses missing $(NetCoreAppCurrent) dependencies.
PKV004 suppresses APICompat rule for missing runtime asset.
-->
<NoWarn>$(NoWarn);NU5128;NU5131;PKV004</NoWarn>
<TargetingPacksTargetsLocation Condition="'$(TargetingPacksTargetsLocation)' == ''">$(RepositoryRoot)eng/targetingpacks.targets</TargetingPacksTargetsLocation>
<ProductVersion>8.0.0</ProductVersion>
- <NetCoreAppCurrent>net7.0</NetCoreAppCurrent>
- <NetCoreAppCurrentVersion>7.0</NetCoreAppCurrentVersion>
+ <NetCoreAppCurrent>net8.0</NetCoreAppCurrent>
+ <NetCoreAppCurrentVersion>8.0</NetCoreAppCurrentVersion>
<MicrosoftNetCoreAppFrameworkName>Microsoft.NETCore.App</MicrosoftNetCoreAppFrameworkName>
<MicrosoftNetCoreAppRefPackDir Condition="'$(MicrosoftNetCoreAppRefPackDir)' == ''" >$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.ref/</MicrosoftNetCoreAppRefPackDir>
<MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.runtime.$(OutputRid)/$(Configuration)/</MicrosoftNetCoreAppRuntimePackDir>
Define this here because the SDK resets it
unconditionally in Microsoft.NETCoreSdk.BundledVersions.props.
-->
- <NETCoreAppMaximumVersion>7.0</NETCoreAppMaximumVersion>
+ <NETCoreAppMaximumVersion>8.0</NETCoreAppMaximumVersion>
</PropertyGroup>
</Project>
\ No newline at end of file
<TargetingPacksTargetsLocation Condition="'$(TargetingPacksTargetsLocation)' == ''">$(RepositoryRoot)eng/targetingpacks.targets</TargetingPacksTargetsLocation>
<ProductVersion>8.0.0</ProductVersion>
- <NetCoreAppCurrent>net7.0</NetCoreAppCurrent>
- <NetCoreAppCurrentVersion>7.0</NetCoreAppCurrentVersion>
+ <NetCoreAppCurrent>net8.0</NetCoreAppCurrent>
+ <NetCoreAppCurrentVersion>8.0</NetCoreAppCurrentVersion>
<MicrosoftNetCoreAppFrameworkName>Microsoft.NETCore.App</MicrosoftNetCoreAppFrameworkName>
<MicrosoftNetCoreAppRefPackDir Condition="'$(MicrosoftNetCoreAppRefPackDir)' == ''" >$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.ref/</MicrosoftNetCoreAppRefPackDir>
<MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.runtime.$(OutputRid)/$(Configuration)/</MicrosoftNetCoreAppRuntimePackDir>
Define this here because the SDK resets it
unconditionally in Microsoft.NETCoreSdk.BundledVersions.props.
-->
- <NETCoreAppMaximumVersion>7.0</NETCoreAppMaximumVersion>
+ <NETCoreAppMaximumVersion>8.0</NETCoreAppMaximumVersion>
</PropertyGroup>
</Project>
\ No newline at end of file
public static bool HasRequiredMemberAttribute(this ICustomAttributeProvider memberInfo)
{
// For compiler related attributes we should only look at full type name rather than trying to do something different for version when attribute was introduced.
- // I.e. library is targetting netstandard2.0 with polyfilled attributes and is being consumed by app targetting net7.0.
+ // I.e. library is targeting netstandard2.0 with polyfilled attributes and is being consumed by an app targeting net7.0 or greater.
return memberInfo.HasCustomAttributeWithName("System.Runtime.CompilerServices.RequiredMemberAttribute", inherit: true);
}
<PropertyGroup>
<OutputType>Exe</OutputType>
+ <!-- SDK maximum supported version. -->
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
#!/usr/bin/env bash
-usage_list=("-outconfig: Configuration, typically a quadruplet such as 'net7.0-Linux-Release-x64', used to name output directory.")
+usage_list=("-outconfig: Configuration, typically a quadruplet such as 'net8.0-Linux-Release-x64', used to name output directory.")
usage_list+=("-staticLibLink: Optional argument to statically link any native library.")
__scriptpath="$(cd "$(dirname "$0")"; pwd -P)"