diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 3499398e78f..5e94412e0a7 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -67,17 +67,17 @@
-
+
https://github.com/dotnet/arcade
- e8de3415124309210e4cbd0105e4a9da8dc01696
+ 255d5e0c89958af276883a988108c2d616438805
-
+
https://github.com/dotnet/arcade
- e8de3415124309210e4cbd0105e4a9da8dc01696
+ 255d5e0c89958af276883a988108c2d616438805
-
+
https://github.com/dotnet/arcade
- e8de3415124309210e4cbd0105e4a9da8dc01696
+ 255d5e0c89958af276883a988108c2d616438805
diff --git a/eng/Versions.props b/eng/Versions.props
index f561f200e31..93fe27e10be 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -10,7 +10,7 @@
-->
false
release
- net8.0
+ net10.0
False
@@ -33,7 +33,7 @@
10.0.0-alpha.1.24616.1
- 10.0.0-beta.24578.2
+ 10.0.0-beta.24613.2
17.8.3
diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml
index 4da05afe054..f9ba1625c20 100644
--- a/eng/common/core-templates/steps/source-build.yml
+++ b/eng/common/core-templates/steps/source-build.yml
@@ -78,7 +78,7 @@ steps:
portableBuildArgs=
if [ '${{ parameters.platform.portableBuild }}' != '' ]; then
- portableBuildArgs='/p:PortabelBuild=${{ parameters.platform.portableBuild }}'
+ portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}'
fi
${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \
diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh
index 20ae8c28687..de980729790 100755
--- a/eng/common/cross/build-rootfs.sh
+++ b/eng/common/cross/build-rootfs.sh
@@ -52,14 +52,12 @@ __UbuntuPackages+=" symlinks"
__UbuntuPackages+=" libicu-dev"
__UbuntuPackages+=" liblttng-ust-dev"
__UbuntuPackages+=" libunwind8-dev"
-__UbuntuPackages+=" libnuma-dev"
__AlpinePackages+=" gettext-dev"
__AlpinePackages+=" icu-dev"
__AlpinePackages+=" libunwind-dev"
__AlpinePackages+=" lttng-ust-dev"
__AlpinePackages+=" compiler-rt"
-__AlpinePackages+=" numactl-dev"
# runtime libraries' dependencies
__UbuntuPackages+=" libcurl4-openssl-dev"
@@ -73,8 +71,8 @@ __AlpinePackages+=" krb5-dev"
__AlpinePackages+=" openssl-dev"
__AlpinePackages+=" zlib-dev"
-__FreeBSDBase="13.3-RELEASE"
-__FreeBSDPkg="1.17.0"
+__FreeBSDBase="13.4-RELEASE"
+__FreeBSDPkg="1.21.3"
__FreeBSDABI="13"
__FreeBSDPackages="libunwind"
__FreeBSDPackages+=" icu"
@@ -371,7 +369,7 @@ while :; do
;;
freebsd14)
__CodeName=freebsd
- __FreeBSDBase="14.0-RELEASE"
+ __FreeBSDBase="14.2-RELEASE"
__FreeBSDABI="14"
__SkipUnmount=1
;;
@@ -424,13 +422,12 @@ case "$__AlpineVersion" in
elif [[ "$__AlpineArch" == "riscv64" ]]; then
__AlpineLlvmLibsLookup=1
__AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
+ elif [[ -n "$__AlpineVersion" ]]; then
+ # use whichever alpine version is provided and select the latest toolchain libs
+ __AlpineLlvmLibsLookup=1
else
__AlpineVersion=3.13 # 3.13 to maximize compatibility
__AlpinePackages+=" llvm10-libs"
-
- if [[ "$__AlpineArch" == "armv7" ]]; then
- __AlpinePackages="${__AlpinePackages//numactl-dev/}"
- fi
fi
esac
@@ -444,11 +441,6 @@ if [[ "$__BuildArch" == "armel" ]]; then
__LLDB_Package="lldb-3.5-dev"
fi
-if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then
- # libnuma-dev is not available on armhf for xenial
- __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}"
-fi
-
__UbuntuPackages+=" ${__LLDB_Package:-}"
if [[ -z "$__UbuntuRepo" ]]; then
@@ -574,7 +566,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then
curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version
fi
echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf
- echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf
+ echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf
mkdir -p "$__RootfsDir"/tmp
# get and build package manager
if [[ "$__hasWget" == 1 ]]; then
diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake
index 9a4e285a5ae..0ff85cf0367 100644
--- a/eng/common/cross/toolchain.cmake
+++ b/eng/common/cross/toolchain.cmake
@@ -40,7 +40,7 @@ if(TARGET_ARCH_NAME STREQUAL "arm")
set(TOOLCHAIN "arm-linux-gnueabihf")
endif()
if(TIZEN)
- set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf/9.2.0")
+ set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "arm64")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
@@ -49,7 +49,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64")
elseif(LINUX)
set(TOOLCHAIN "aarch64-linux-gnu")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu")
endif()
elseif(FREEBSD)
set(triple "aarch64-unknown-freebsd12")
@@ -58,7 +58,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "armel")
set(CMAKE_SYSTEM_PROCESSOR armv7l)
set(TOOLCHAIN "arm-linux-gnueabi")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/9.2.0")
+ set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "armv6")
set(CMAKE_SYSTEM_PROCESSOR armv6l)
@@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6")
else()
set(TOOLCHAIN "arm-linux-gnueabihf")
endif()
+elseif(TARGET_ARCH_NAME STREQUAL "loongarch64")
+ set(CMAKE_SYSTEM_PROCESSOR "loongarch64")
+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl)
+ set(TOOLCHAIN "loongarch64-alpine-linux-musl")
+ else()
+ set(TOOLCHAIN "loongarch64-linux-gnu")
+ endif()
elseif(TARGET_ARCH_NAME STREQUAL "ppc64le")
set(CMAKE_SYSTEM_PROCESSOR ppc64le)
if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl)
@@ -81,7 +88,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "riscv64")
else()
set(TOOLCHAIN "riscv64-linux-gnu")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "riscv64-tizen-linux-gnu/13.1.0")
+ set(TIZEN_TOOLCHAIN "riscv64-tizen-linux-gnu")
endif()
endif()
elseif(TARGET_ARCH_NAME STREQUAL "s390x")
@@ -98,7 +105,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64")
elseif(LINUX)
set(TOOLCHAIN "x86_64-linux-gnu")
if(TIZEN)
- set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu")
endif()
elseif(FREEBSD)
set(triple "x86_64-unknown-freebsd12")
@@ -115,10 +122,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86")
set(TOOLCHAIN "i686-linux-gnu")
endif()
if(TIZEN)
- set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0")
+ set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu")
endif()
else()
- message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!")
+ message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!")
endif()
if(DEFINED ENV{TOOLCHAIN})
@@ -127,32 +134,46 @@ endif()
# Specify include paths
if(TIZEN)
- if(TARGET_ARCH_NAME STREQUAL "arm")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7hl-tizen-linux-gnueabihf)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "armel")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7l-tizen-linux-gnueabi)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "arm64")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/aarch64-tizen-linux-gnu)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "x86")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/i586-tizen-linux-gnu)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "x64")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/x86_64-tizen-linux-gnu)
- endif()
- if(TARGET_ARCH_NAME STREQUAL "riscv64")
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/)
- include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/riscv64-tizen-linux-gnu)
+ function(find_toolchain_dir prefix)
+ # Dynamically find the version subdirectory
+ file(GLOB DIRECTORIES "${prefix}/*")
+ list(GET DIRECTORIES 0 FIRST_MATCH)
+ get_filename_component(TOOLCHAIN_VERSION ${FIRST_MATCH} NAME)
+
+ set(TIZEN_TOOLCHAIN_PATH "${prefix}/${TOOLCHAIN_VERSION}" PARENT_SCOPE)
+ endfunction()
+
+ if(TARGET_ARCH_NAME MATCHES "^(arm|armel|x86)$")
+ find_toolchain_dir("${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ else()
+ find_toolchain_dir("${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
endif()
+
+ message(STATUS "TIZEN_TOOLCHAIN_PATH set to: ${TIZEN_TOOLCHAIN_PATH}")
+
+ include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++)
+ include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN})
endif()
+function(locate_toolchain_exec exec var)
+ set(TOOLSET_PREFIX ${TOOLCHAIN}-)
+ string(TOUPPER ${exec} EXEC_UPPERCASE)
+ if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "")
+ set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE)
+ return()
+ endif()
+
+ find_program(EXEC_LOCATION_${exec}
+ NAMES
+ "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}"
+ "${TOOLSET_PREFIX}${exec}")
+
+ if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND")
+ message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.")
+ endif()
+ set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE)
+endfunction()
+
if(ANDROID)
if(TARGET_ARCH_NAME STREQUAL "arm")
set(ANDROID_ABI armeabi-v7a)
@@ -183,66 +204,24 @@ elseif(FREEBSD)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld")
elseif(ILLUMOS)
set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
+ set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}")
+ set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
+ set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
include_directories(SYSTEM ${CROSS_ROOTFS}/include)
- set(TOOLSET_PREFIX ${TOOLCHAIN}-)
- function(locate_toolchain_exec exec var)
- string(TOUPPER ${exec} EXEC_UPPERCASE)
- if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "")
- set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE)
- return()
- endif()
-
- find_program(EXEC_LOCATION_${exec}
- NAMES
- "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}"
- "${TOOLSET_PREFIX}${exec}")
-
- if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND")
- message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.")
- endif()
- set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE)
- endfunction()
-
- set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}")
-
locate_toolchain_exec(gcc CMAKE_C_COMPILER)
locate_toolchain_exec(g++ CMAKE_CXX_COMPILER)
-
- set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
- set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
elseif(HAIKU)
set(CMAKE_SYSROOT "${CROSS_ROOTFS}")
set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin")
-
- set(TOOLSET_PREFIX ${TOOLCHAIN}-)
- function(locate_toolchain_exec exec var)
- string(TOUPPER ${exec} EXEC_UPPERCASE)
- if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "")
- set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE)
- return()
- endif()
-
- find_program(EXEC_LOCATION_${exec}
- NAMES
- "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}"
- "${TOOLSET_PREFIX}${exec}")
-
- if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND")
- message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.")
- endif()
- set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE)
- endfunction()
-
set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}")
+ set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
+ set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
locate_toolchain_exec(gcc CMAKE_C_COMPILER)
locate_toolchain_exec(g++ CMAKE_CXX_COMPILER)
- set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp")
- set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp")
-
# let CMake set up the correct search paths
include(Platform/Haiku)
else()
@@ -272,21 +251,21 @@ endif()
if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$")
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
endif()
elseif(TARGET_ARCH_NAME MATCHES "^(arm64|x64|riscv64)$")
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64")
add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64")
- add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-Wl,--rpath-link=${TIZEN_TOOLCHAIN_PATH}")
endif()
elseif(TARGET_ARCH_NAME STREQUAL "s390x")
add_toolchain_linker_flag("--target=${TOOLCHAIN}")
@@ -297,10 +276,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86")
endif()
add_toolchain_linker_flag(-m32)
if(TIZEN)
- add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib")
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib")
- add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}")
+ add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}")
endif()
elseif(ILLUMOS)
add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64")
@@ -312,7 +291,7 @@ endif()
# Specify compile options
-if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU)
+if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU)
set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN})
set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN})
diff --git a/eng/helix.proj b/eng/helix.proj
index b3f87b8b980..356cff64627 100644
--- a/eng/helix.proj
+++ b/eng/helix.proj
@@ -73,9 +73,9 @@
- net9.0
+ net10.0
netcoreapp2.0
- 2.4.2
+ 2.9.2
02:00:00
diff --git a/global.json b/global.json
index 043e40c15ab..d786f286620 100644
--- a/global.json
+++ b/global.json
@@ -1,11 +1,11 @@
{
"sdk": {
- "version": "9.0.100",
+ "version": "10.0.100-alpha.1.24573.1",
"allowPrerelease": true,
"rollForward": "latestMajor"
},
"tools": {
- "dotnet": "9.0.100",
+ "dotnet": "10.0.100-alpha.1.24573.1",
"runtimes": {
"dotnet": [
"$(MicrosoftNETCoreAppRuntimewinx64Version)"
@@ -13,7 +13,7 @@
}
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.24578.2",
- "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.24578.2"
+ "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.24613.2",
+ "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.24613.2"
}
}
diff --git a/src/EFCore.Sqlite/lib/net8.0/_._ b/src/EFCore.Sqlite/lib/net10.0/_._
similarity index 100%
rename from src/EFCore.Sqlite/lib/net8.0/_._
rename to src/EFCore.Sqlite/lib/net10.0/_._
diff --git a/src/EFCore.Tools/EFCore.Tools.nuspec b/src/EFCore.Tools/EFCore.Tools.nuspec
index fa956e5db92..63e6d2b0154 100644
--- a/src/EFCore.Tools/EFCore.Tools.nuspec
+++ b/src/EFCore.Tools/EFCore.Tools.nuspec
@@ -4,7 +4,7 @@
$CommonMetadataElements$
-
+
diff --git a/src/EFCore/Metadata/Internal/MemberClassifier.cs b/src/EFCore/Metadata/Internal/MemberClassifier.cs
index ee456c5b785..d7300b5d5e1 100644
--- a/src/EFCore/Metadata/Internal/MemberClassifier.cs
+++ b/src/EFCore/Metadata/Internal/MemberClassifier.cs
@@ -49,12 +49,12 @@ public MemberClassifier(
? CoreAnnotationNames.InverseNavigations
: CoreAnnotationNames.InverseNavigationsNoAttribute;
if (entityType.FindAnnotation(candidatesAnnotationName)?.Value
- is OrderedDictionary navigationCandidates)
+ is Utilities.OrderedDictionary navigationCandidates)
{
return navigationCandidates;
}
- navigationCandidates = new OrderedDictionary();
+ navigationCandidates = new Utilities.OrderedDictionary();
var model = entityType.Model;
if (model.FindAnnotation(inverseAnnotationName)?.Value
diff --git a/src/EFCore/Metadata/RuntimeEntityType.cs b/src/EFCore/Metadata/RuntimeEntityType.cs
index a219886a8bf..e9516734cea 100644
--- a/src/EFCore/Metadata/RuntimeEntityType.cs
+++ b/src/EFCore/Metadata/RuntimeEntityType.cs
@@ -18,13 +18,13 @@ namespace Microsoft.EntityFrameworkCore.Metadata;
public class RuntimeEntityType : RuntimeTypeBase, IRuntimeEntityType
{
private readonly List _foreignKeys;
- private readonly OrderedDictionary _navigations;
- private OrderedDictionary? _skipNavigations;
- private OrderedDictionary? _serviceProperties;
- private readonly OrderedDictionary, RuntimeIndex> _unnamedIndexes;
- private OrderedDictionary? _namedIndexes;
- private readonly OrderedDictionary, RuntimeKey> _keys;
- private OrderedDictionary? _triggers;
+ private readonly Utilities.OrderedDictionary _navigations;
+ private Utilities.OrderedDictionary? _skipNavigations;
+ private Utilities.OrderedDictionary? _serviceProperties;
+ private readonly Utilities.OrderedDictionary, RuntimeIndex> _unnamedIndexes;
+ private Utilities.OrderedDictionary? _namedIndexes;
+ private readonly Utilities.OrderedDictionary, RuntimeKey> _keys;
+ private Utilities.OrderedDictionary? _triggers;
private readonly object? _discriminatorValue;
private readonly bool _hasSharedClrType;
private RuntimeKey? _primaryKey;
@@ -85,28 +85,28 @@ public RuntimeEntityType(
SetAnnotation(CoreAnnotationNames.DiscriminatorProperty, discriminatorProperty);
_discriminatorValue = discriminatorValue;
_foreignKeys = new List(foreignKeyCount);
- _navigations = new OrderedDictionary(navigationCount, StringComparer.Ordinal);
+ _navigations = new Utilities.OrderedDictionary(navigationCount, StringComparer.Ordinal);
if (skipNavigationCount > 0)
{
- _skipNavigations = new OrderedDictionary(skipNavigationCount, StringComparer.Ordinal);
+ _skipNavigations = new Utilities.OrderedDictionary(skipNavigationCount, StringComparer.Ordinal);
}
if (servicePropertyCount > 0)
{
- _serviceProperties = new OrderedDictionary(servicePropertyCount, StringComparer.Ordinal);
+ _serviceProperties = new Utilities.OrderedDictionary(servicePropertyCount, StringComparer.Ordinal);
}
_unnamedIndexes =
- new OrderedDictionary, RuntimeIndex>(unnamedIndexCount, PropertyListComparer.Instance);
+ new Utilities.OrderedDictionary, RuntimeIndex>(unnamedIndexCount, PropertyListComparer.Instance);
if (namedIndexCount > 0)
{
- _namedIndexes = new OrderedDictionary(namedIndexCount, StringComparer.Ordinal);
+ _namedIndexes = new Utilities.OrderedDictionary(namedIndexCount, StringComparer.Ordinal);
}
- _keys = new OrderedDictionary, RuntimeKey>(keyCount, PropertyListComparer.Instance);
+ _keys = new Utilities.OrderedDictionary, RuntimeKey>(keyCount, PropertyListComparer.Instance);
if (triggerCount > 0)
{
- _triggers = new OrderedDictionary(triggerCount, StringComparer.Ordinal);
+ _triggers = new Utilities.OrderedDictionary(triggerCount, StringComparer.Ordinal);
}
}
@@ -476,7 +476,7 @@ public virtual RuntimeSkipNavigation AddSkipNavigation(
eagerLoaded,
lazyLoadingEnabled);
- _skipNavigations ??= new OrderedDictionary(StringComparer.Ordinal);
+ _skipNavigations ??= new Utilities.OrderedDictionary(StringComparer.Ordinal);
_skipNavigations.Add(name, skipNavigation);
return skipNavigation;
@@ -547,7 +547,7 @@ public virtual RuntimeIndex AddIndex(
var index = new RuntimeIndex(properties, this, name, unique);
if (name != null)
{
- (_namedIndexes ??= new OrderedDictionary(StringComparer.Ordinal)).Add(name, index);
+ (_namedIndexes ??= new Utilities.OrderedDictionary(StringComparer.Ordinal)).Add(name, index);
}
else
{
@@ -646,7 +646,7 @@ public virtual RuntimeServiceProperty AddServiceProperty(
this,
propertyAccessMode);
- (_serviceProperties ??= new OrderedDictionary(StringComparer.Ordinal))[serviceProperty.Name] =
+ (_serviceProperties ??= new Utilities.OrderedDictionary(StringComparer.Ordinal))[serviceProperty.Name] =
serviceProperty;
return serviceProperty;
@@ -775,7 +775,7 @@ public virtual RuntimeTrigger AddTrigger(string modelName)
{
var trigger = new RuntimeTrigger(this, modelName);
- (_triggers ??= new OrderedDictionary(StringComparer.Ordinal)).Add(modelName, trigger);
+ (_triggers ??= new Utilities.OrderedDictionary(StringComparer.Ordinal)).Add(modelName, trigger);
return trigger;
}
diff --git a/src/EFCore/Metadata/RuntimeTypeBase.cs b/src/EFCore/Metadata/RuntimeTypeBase.cs
index 017cfefa55e..c3c6676699a 100644
--- a/src/EFCore/Metadata/RuntimeTypeBase.cs
+++ b/src/EFCore/Metadata/RuntimeTypeBase.cs
@@ -19,8 +19,8 @@ public abstract class RuntimeTypeBase : RuntimeAnnotatableBase, IRuntimeTypeBase
private RuntimeModel _model;
private readonly RuntimeTypeBase? _baseType;
private SortedSet? _directlyDerivedTypes;
- private readonly OrderedDictionary _properties;
- private OrderedDictionary? _complexProperties;
+ private readonly Utilities.OrderedDictionary _properties;
+ private Utilities.OrderedDictionary? _complexProperties;
private readonly PropertyInfo? _indexerPropertyInfo;
private readonly bool _isPropertyBag;
private readonly ChangeTrackingStrategy _changeTrackingStrategy;
@@ -61,10 +61,10 @@ protected RuntimeTypeBase(
_changeTrackingStrategy = changeTrackingStrategy;
_indexerPropertyInfo = indexerPropertyInfo;
_isPropertyBag = propertyBag;
- _properties = new OrderedDictionary(propertyCount, new PropertyNameComparer(this));
+ _properties = new Utilities.OrderedDictionary(propertyCount, new PropertyNameComparer(this));
if (complexPropertyCount > 0)
{
- _complexProperties = new OrderedDictionary(complexPropertyCount, StringComparer.Ordinal);
+ _complexProperties = new Utilities.OrderedDictionary(complexPropertyCount, StringComparer.Ordinal);
}
}
@@ -399,7 +399,7 @@ public virtual RuntimeComplexProperty AddComplexProperty(
propertyCount: propertyCount,
complexPropertyCount: complexPropertyCount);
- _complexProperties ??= new OrderedDictionary(StringComparer.Ordinal);
+ _complexProperties ??= new Utilities.OrderedDictionary(StringComparer.Ordinal);
_complexProperties.Add(property.Name, property);
return property;
diff --git a/src/EFCore/Query/Internal/ExpressionTreeFuncletizer.cs b/src/EFCore/Query/Internal/ExpressionTreeFuncletizer.cs
index 9935a17ce80..e0f1222eb55 100644
--- a/src/EFCore/Query/Internal/ExpressionTreeFuncletizer.cs
+++ b/src/EFCore/Query/Internal/ExpressionTreeFuncletizer.cs
@@ -967,6 +967,51 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCall)
}
}
+ // .NET 10 made changes to overload resolution to prefer Span-based overloads when those exist ("first-class spans").
+ // Unfortunately, the LINQ interpreter does not support ref structs, so we rewrite e.g. MemoryExtensions.Contains to
+ // Enumerable.Contains here. See https://github.com/dotnet/runtime/issues/109757.
+ if (method.DeclaringType == typeof(MemoryExtensions))
+ {
+ switch (method.Name)
+ {
+ case nameof(MemoryExtensions.Contains)
+ when methodCall.Arguments is [var arg0, var arg1] && TryUnwrapSpanImplicitCast(arg0, out var unwrappedArg0):
+ {
+ return Visit(
+ Call(
+ EnumerableMethods.Contains.MakeGenericMethod(methodCall.Method.GetGenericArguments()[0]),
+ unwrappedArg0, arg1));
+ }
+
+ case nameof(MemoryExtensions.SequenceEqual)
+ when methodCall.Arguments is [var arg0, var arg1]
+ && TryUnwrapSpanImplicitCast(arg0, out var unwrappedArg0)
+ && TryUnwrapSpanImplicitCast(arg1, out var unwrappedArg1):
+ return Visit(
+ Call(
+ EnumerableMethods.SequenceEqual.MakeGenericMethod(methodCall.Method.GetGenericArguments()[0]),
+ unwrappedArg0, unwrappedArg1));
+ }
+
+ static bool TryUnwrapSpanImplicitCast(Expression expression, [NotNullWhen(true)] out Expression? result)
+ {
+ if (expression is MethodCallExpression
+ {
+ Method: { Name: "op_Implicit", DeclaringType: { IsGenericType: true } implicitCastDeclaringType },
+ Arguments: [var unwrapped]
+ }
+ && implicitCastDeclaringType.GetGenericTypeDefinition() is var genericTypeDefinition
+ && (genericTypeDefinition == typeof(Span<>) || genericTypeDefinition == typeof(ReadOnlySpan<>)))
+ {
+ result = unwrapped;
+ return true;
+ }
+
+ result = null;
+ return false;
+ }
+ }
+
// Regular/arbitrary method handling from here on
// First, visit the object and all arguments, saving states as well
diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteConnectionStringBuilder.cs b/src/Microsoft.Data.Sqlite.Core/SqliteConnectionStringBuilder.cs
index 343439fc721..624966b33fc 100644
--- a/src/Microsoft.Data.Sqlite.Core/SqliteConnectionStringBuilder.cs
+++ b/src/Microsoft.Data.Sqlite.Core/SqliteConnectionStringBuilder.cs
@@ -18,6 +18,12 @@ namespace Microsoft.Data.Sqlite
/// .
///
/// Connection Strings
+#if NET5_0_OR_GREATER
+ [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2112:ReflectionToRequiresUnreferencedCode",
+ Justification = "Suppressing the same warnings as suppressed in the base DbConnectionStringBuilder. See https://github.com/dotnet/runtime/issues/97057")]
+ [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2113:ReflectionToRequiresUnreferencedCode",
+ Justification = "Suppressing the same warnings as suppressed in the base DbConnectionStringBuilder. See https://github.com/dotnet/runtime/issues/97057")]
+#endif
public class SqliteConnectionStringBuilder : DbConnectionStringBuilder
{
private const string DataSourceKeyword = "Data Source";
diff --git a/test/Directory.Build.props b/test/Directory.Build.props
index 4249b523331..a5b455d7438 100644
--- a/test/Directory.Build.props
+++ b/test/Directory.Build.props
@@ -5,7 +5,6 @@
$(NoWarn);CA1707;1591;xUnit1000;xUnit1003;xUnit1004;xUnit1010;xUnit1013;xUnit1026;xUnit2013;xUnit1024
$(MSBuildThisFileDirectory)..\rulesets\EFCore.test.ruleset
preview
- net9.0
diff --git a/test/EFCore.SqlServer.FunctionalTests/Update/MismatchedKeyTypesSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Update/MismatchedKeyTypesSqlServerTest.cs
index 9013bbabdf6..5e7dd417384 100644
--- a/test/EFCore.SqlServer.FunctionalTests/Update/MismatchedKeyTypesSqlServerTest.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/Update/MismatchedKeyTypesSqlServerTest.cs
@@ -797,7 +797,12 @@ public async Task InitializeAsync()
}
public async Task DisposeAsync()
- => await Store.DisposeAsync();
+ {
+ if (Store != null)
+ {
+ await Store.DisposeAsync();
+ }
+ }
}
private class TemporaryByteValueGenerator : ValueGenerator