diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4f1b02cabe55..fc5331b4f404 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -97,43 +97,43 @@ 5af96504f10836eca6ce804ab3cdd28c042fa35a - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 - + https://github.com/dotnet/roslyn - d94a5505a6515a2d5350c7055853fc431e6dcfa4 + f9ccce030d8fdcc2ea095e095b71316d243c5b35 https://github.com/dotnet/aspnetcore @@ -559,34 +559,34 @@ - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 - + https://github.com/dotnet/arcade - 45d845e04c05fbe5da9838c454bbc3af1df6be81 + 4f2968fce08735a7e22fca6bd4c99d003221d716 diff --git a/eng/Versions.props b/eng/Versions.props index 25adbe773e54..79429490dd4e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -209,14 +209,14 @@ - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 - 4.13.0-3.24603.5 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 + 4.13.0-3.24617.3 @@ -262,10 +262,10 @@ - 10.0.0-beta.24604.4 - 10.0.0-beta.24604.4 - 10.0.0-beta.24604.4 - 10.0.0-beta.24604.4 + 10.0.0-beta.24617.2 + 10.0.0-beta.24617.2 + 10.0.0-beta.24617.2 + 10.0.0-beta.24617.2 diff --git a/eng/common/core-templates/steps/get-delegation-sas.yml b/eng/common/core-templates/steps/get-delegation-sas.yml index 9db5617ea7de..d2901470a7f0 100644 --- a/eng/common/core-templates/steps/get-delegation-sas.yml +++ b/eng/common/core-templates/steps/get-delegation-sas.yml @@ -31,16 +31,7 @@ steps: # Calculate the expiration of the SAS token and convert to UTC $expiry = (Get-Date).AddHours(${{ parameters.expiryInHours }}).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - # Temporarily work around a helix issue where SAS tokens with / in them will cause incorrect downloads - # of correlation payloads. https://github.com/dotnet/dnceng/issues/3484 - $sas = "" - do { - $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv - if ($LASTEXITCODE -ne 0) { - Write-Error "Failed to generate SAS token." - exit 1 - } - } while($sas.IndexOf('/') -ne -1) + $sas = az storage container generate-sas --account-name ${{ parameters.storageAccount }} --name ${{ parameters.container }} --permissions ${{ parameters.permissions }} --expiry $expiry --auth-mode login --as-user -o tsv if ($LASTEXITCODE -ne 0) { Write-Error "Failed to generate SAS token." diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 4da05afe0544..f9ba1625c20f 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 20ae8c28687b..464040aaaea6 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 "$__AlpineMajorVersion" ]]; 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 9a4e285a5ae3..0ff85cf0367e 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/global.json b/global.json index 3084f6c449d8..54d9f756804e 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "tools": { - "dotnet": "10.0.100-alpha.1.24551.9", + "dotnet": "10.0.100-alpha.1.24573.1", "runtimes": { "dotnet": [ "$(VSRedistCommonNetCoreSharedFrameworkx64100PackageVersion)" @@ -17,8 +17,8 @@ "cmake": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.24604.4", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.24604.4", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.24617.2", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.24617.2", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.DotNet.CMake.Sdk": "9.0.0-beta.24217.1" } diff --git a/sdk.sln b/sdk.sln index bb50c11fcfe4..d95872ed1bfc 100644 --- a/sdk.sln +++ b/sdk.sln @@ -514,7 +514,7 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSMSBuildExtensions", "src\VSMSBuildExtensions\VSMSBuildExtensions.proj", "{D9617F63-15F4-4CA2-8ECF-728A94B45D82}" Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.DotNet.HotReload.Agent", "src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.shproj", "{418B10BD-CA42-49F3-8F4A-D8CC90C8A17D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.HotReload.Agent.Package", "src\BuiltInTools\HotReloadAgent.Package\Microsoft.DotNet.HotReload.Agent.Package.csproj", "{2FF79F82-60C1-349A-4726-7783D5A6D5DF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.HotReload.Agent.Package", "src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.Package.csproj", "{2FF79F82-60C1-349A-4726-7783D5A6D5DF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1167,7 +1167,6 @@ Global src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompat.Shared\Microsoft.DotNet.ApiCompat.Shared.projitems*{0a3c9afd-f6e6-4a5d-83fb-93bf66732696}*SharedItemsImports = 5 src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems*{1bbfa19c-03f0-4d27-9d0d-0f8172642107}*SharedItemsImports = 5 src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{1f0b4b3c-dc88-4740-b04f-1707102e9930}*SharedItemsImports = 5 - src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems*{2ff79f82-60c1-349a-4726-7783d5a6d5df}*SharedItemsImports = 5 src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems*{418b10bd-ca42-49f3-8f4a-d8cc90c8a17d}*SharedItemsImports = 13 src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{445efbd5-6730-4f09-943d-278e77501ffd}*SharedItemsImports = 5 src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{94c8526e-dcc2-442f-9868-3dd0ba2688be}*SharedItemsImports = 13 diff --git a/src/BuiltInTools/AspireService/AspireServerService.cs b/src/BuiltInTools/AspireService/AspireServerService.cs index 9543b0cda9cd..e10019989af3 100644 --- a/src/BuiltInTools/AspireService/AspireServerService.cs +++ b/src/BuiltInTools/AspireService/AspireServerService.cs @@ -1,12 +1,17 @@ // 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.Collections.Generic; using System.Net; using System.Net.WebSockets; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; +using System.Text; using System.Text.Json; using System.Text.Json.Serialization; +using System.Threading; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; @@ -81,7 +86,7 @@ public AspireServerService(IAspireServerEvents aspireServerEvents, string displa _certificateEncodedBytes = Convert.ToBase64String(certBytes); // Kick of the web server. - _requestListener = StartListening(); + _requestListener = StartListeningAsync(); } public async ValueTask DisposeAsync() @@ -178,7 +183,7 @@ bool LogAndPropagate(Exception e) /// Waits for a connection so that it can get the WebSocket that will be used to send messages tio the client. It accepts messages via Restful http /// calls. /// - private Task StartListening() + private Task StartListeningAsync() { var builder = WebApplication.CreateSlimBuilder(); diff --git a/src/BuiltInTools/AspireService/Contracts/IAspireServerEvents.cs b/src/BuiltInTools/AspireService/Contracts/IAspireServerEvents.cs index 82f000261a9e..dda162760e8d 100644 --- a/src/BuiltInTools/AspireService/Contracts/IAspireServerEvents.cs +++ b/src/BuiltInTools/AspireService/Contracts/IAspireServerEvents.cs @@ -1,6 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; + namespace Aspire.Tools.Service; internal interface IAspireServerEvents diff --git a/src/BuiltInTools/AspireService/Helpers/CertGenerator.cs b/src/BuiltInTools/AspireService/Helpers/CertGenerator.cs index e3785b9ecc19..7aff7d6a7126 100644 --- a/src/BuiltInTools/AspireService/Helpers/CertGenerator.cs +++ b/src/BuiltInTools/AspireService/Helpers/CertGenerator.cs @@ -1,6 +1,7 @@ // 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.Security.Cryptography; using System.Security.Cryptography.X509Certificates; diff --git a/src/BuiltInTools/AspireService/Helpers/ExceptionExtensions.cs b/src/BuiltInTools/AspireService/Helpers/ExceptionExtensions.cs index d667c50819e4..3fbb1d0caef1 100644 --- a/src/BuiltInTools/AspireService/Helpers/ExceptionExtensions.cs +++ b/src/BuiltInTools/AspireService/Helpers/ExceptionExtensions.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; + namespace Aspire.Tools.Service; internal static class ExceptionExtensions diff --git a/src/BuiltInTools/AspireService/Helpers/HttpContextExtensions.cs b/src/BuiltInTools/AspireService/Helpers/HttpContextExtensions.cs index 13ddb6b5cd23..710a1e69baaa 100644 --- a/src/BuiltInTools/AspireService/Helpers/HttpContextExtensions.cs +++ b/src/BuiltInTools/AspireService/Helpers/HttpContextExtensions.cs @@ -1,6 +1,9 @@ // 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.Threading; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; namespace Aspire.Tools.Service; diff --git a/src/BuiltInTools/AspireService/Helpers/LoggerProvider.cs b/src/BuiltInTools/AspireService/Helpers/LoggerProvider.cs index c190354635b6..499bd506289a 100644 --- a/src/BuiltInTools/AspireService/Helpers/LoggerProvider.cs +++ b/src/BuiltInTools/AspireService/Helpers/LoggerProvider.cs @@ -1,6 +1,7 @@ // 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 Microsoft.Extensions.Logging; namespace Aspire.Tools.Service; diff --git a/src/BuiltInTools/AspireService/Helpers/SocketUtilities.cs b/src/BuiltInTools/AspireService/Helpers/SocketUtilities.cs index 3ac8c1034703..3e93de3b0232 100644 --- a/src/BuiltInTools/AspireService/Helpers/SocketUtilities.cs +++ b/src/BuiltInTools/AspireService/Helpers/SocketUtilities.cs @@ -1,6 +1,9 @@ // 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.Linq; +using System.Collections.Generic; using System.Net; using System.Net.Sockets; diff --git a/src/BuiltInTools/AspireService/Helpers/WebSocketConnection.cs b/src/BuiltInTools/AspireService/Helpers/WebSocketConnection.cs index e82da71764d1..a39b74bfb6dc 100644 --- a/src/BuiltInTools/AspireService/Helpers/WebSocketConnection.cs +++ b/src/BuiltInTools/AspireService/Helpers/WebSocketConnection.cs @@ -1,6 +1,9 @@ // 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.Threading; +using System.Threading.Tasks; using System.Net.WebSockets; namespace Aspire.Tools.Service; diff --git a/src/BuiltInTools/AspireService/Microsoft.WebTools.AspireService.Package.csproj b/src/BuiltInTools/AspireService/Microsoft.WebTools.AspireService.Package.csproj index 3b46ec9fdf21..f317ebe3fcf1 100644 --- a/src/BuiltInTools/AspireService/Microsoft.WebTools.AspireService.Package.csproj +++ b/src/BuiltInTools/AspireService/Microsoft.WebTools.AspireService.Package.csproj @@ -22,4 +22,9 @@ + + + + + diff --git a/src/BuiltInTools/AspireService/Models/RunSessionRequest.cs b/src/BuiltInTools/AspireService/Models/RunSessionRequest.cs index 7f31a2113fe0..32d52181449f 100644 --- a/src/BuiltInTools/AspireService/Models/RunSessionRequest.cs +++ b/src/BuiltInTools/AspireService/Models/RunSessionRequest.cs @@ -1,8 +1,11 @@ // 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.ComponentModel.DataAnnotations; +using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Text.Json.Serialization; namespace Aspire.Tools.Service; @@ -55,7 +58,7 @@ internal class RunSessionRequest public EnvVar[] Environment { get; set; } = Array.Empty(); [JsonPropertyName("args")] - public string[] Arguments { get; set; } = Array.Empty(); + public string[]? Arguments { get; set; } public ProjectLaunchRequest? ToProjectLaunchInformation() { diff --git a/src/BuiltInTools/BrowserRefresh/WebSocketScriptInjection.js b/src/BuiltInTools/BrowserRefresh/WebSocketScriptInjection.js index befd2f818976..aa8f1fd60f98 100644 --- a/src/BuiltInTools/BrowserRefresh/WebSocketScriptInjection.js +++ b/src/BuiltInTools/BrowserRefresh/WebSocketScriptInjection.js @@ -145,22 +145,20 @@ setTimeout(async function () { } let applyError = undefined; - if (window.Blazor?._internal?.applyHotReload) { - // Only apply hot reload deltas if Blazor has been initialized. - // It's possible for Blazor to start after the initial page load, so we don't consider skipping this step - // to be a failure. These deltas will get applied later, when Blazor completes initialization. - deltas.forEach(d => { - try { - window.Blazor._internal.applyHotReload(d.moduleId, d.metadataDelta, d.ilDelta, d.pdbDelta, d.updatedTypes) - } catch (error) { - console.warn(error); - applyError = error; - } - }); + + try { + applyDeltas_legacy(deltas) + } catch (error) { + console.warn(error); + applyError = error; } + const body = JSON.stringify({ + id: deltas[0].sequenceId, + deltas: deltas + }); try { - await fetch('/_framework/blazor-hotreload', { method: 'post', headers: { 'content-type': 'application/json' }, body: JSON.stringify(deltas) }); + await fetch('/_framework/blazor-hotreload', { method: 'post', headers: { 'content-type': 'application/json' }, body: body }); } catch (error) { console.warn(error); applyError = error; @@ -174,6 +172,24 @@ setTimeout(async function () { } } + function applyDeltas_legacy(deltas) { + let apply = window.Blazor?._internal?.applyHotReload + + // Only apply hot reload deltas if Blazor has been initialized. + // It's possible for Blazor to start after the initial page load, so we don't consider skipping this step + // to be a failure. These deltas will get applied later, when Blazor completes initialization. + if (apply) { + deltas.forEach(d => { + if (apply.length == 5) { + // WASM 8.0 + apply(d.moduleId, d.metadataDelta, d.ilDelta, d.pdbDelta, d.updatedTypes) + } else { + // WASM 9.0 + apply(d.moduleId, d.metadataDelta, d.ilDelta, d.pdbDelta) + } + }); + } + } function sendDeltaApplied() { connection.send(new Uint8Array([1]).buffer); } @@ -198,11 +214,13 @@ setTimeout(async function () { let applyError = undefined; let log = []; - if (window.Blazor?._internal?.applyHotReloadDeltas) { - // Only apply hot reload deltas if Blazor has been initialized. - // It's possible for Blazor to start after the initial page load, so we don't consider skipping this step - // to be a failure. These deltas will get applied later, when Blazor completes initialization. - try { + try { + let applyDeltas = window.Blazor?._internal?.applyHotReloadDeltas + if (applyDeltas) { + // Only apply hot reload deltas if Blazor has been initialized. + // It's possible for Blazor to start after the initial page load, so we don't consider skipping this step + // to be a failure. These deltas will get applied later, when Blazor completes initialization. + let wasmDeltas = deltas.map(delta => { return { "moduleId": delta.moduleId, @@ -213,12 +231,15 @@ setTimeout(async function () { }; }); - log = window.Blazor._internal.applyHotReloadDeltas(wasmDeltas, responseLoggingLevel); - } catch (error) { - console.warn(error); - applyError = error; - log.push({ "message": getMessageAndStack(error), "severity": AgentMessageSeverity_Error }); + log = applyDeltas(wasmDeltas, responseLoggingLevel); + } else { + // Try invoke older WASM API: + applyDeltas_legacy(deltas) } + } catch (error) { + console.warn(error); + applyError = error; + log.push({ "message": getMessageAndStack(error), "severity": AgentMessageSeverity_Error }); } try { diff --git a/src/BuiltInTools/HotReloadAgent/AgentReporter.cs b/src/BuiltInTools/HotReloadAgent/AgentReporter.cs index 794a23956359..0e7c6a87a9b7 100644 --- a/src/BuiltInTools/HotReloadAgent/AgentReporter.cs +++ b/src/BuiltInTools/HotReloadAgent/AgentReporter.cs @@ -1,6 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Collections.Generic; +using System.Linq; + namespace Microsoft.DotNet.HotReload; internal sealed class AgentReporter diff --git a/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs b/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs index 5350c0ae2d8d..7e1f026d8faa 100644 --- a/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs +++ b/src/BuiltInTools/HotReloadAgent/HotReloadAgent.cs @@ -1,6 +1,9 @@ // 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.Linq; +using System.Collections.Generic; using System.Collections.Concurrent; using System.Diagnostics; using System.Reflection; diff --git a/src/BuiltInTools/HotReloadAgent/MetadataUpdateHandlerInvoker.cs b/src/BuiltInTools/HotReloadAgent/MetadataUpdateHandlerInvoker.cs index 3c3583949130..fa8b0630e840 100644 --- a/src/BuiltInTools/HotReloadAgent/MetadataUpdateHandlerInvoker.cs +++ b/src/BuiltInTools/HotReloadAgent/MetadataUpdateHandlerInvoker.cs @@ -1,8 +1,11 @@ // 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.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Reflection; +using System.Threading; namespace Microsoft.DotNet.HotReload; diff --git a/src/BuiltInTools/HotReloadAgent.Package/Microsoft.DotNet.HotReload.Agent.Package.csproj b/src/BuiltInTools/HotReloadAgent/Microsoft.DotNet.HotReload.Agent.Package.csproj similarity index 87% rename from src/BuiltInTools/HotReloadAgent.Package/Microsoft.DotNet.HotReload.Agent.Package.csproj rename to src/BuiltInTools/HotReloadAgent/Microsoft.DotNet.HotReload.Agent.Package.csproj index a7afee6088a2..75b7a922b2e4 100644 --- a/src/BuiltInTools/HotReloadAgent.Package/Microsoft.DotNet.HotReload.Agent.Package.csproj +++ b/src/BuiltInTools/HotReloadAgent/Microsoft.DotNet.HotReload.Agent.Package.csproj @@ -22,5 +22,9 @@ - + + + + + diff --git a/src/BuiltInTools/HotReloadAgent/UpdateDelta.cs b/src/BuiltInTools/HotReloadAgent/UpdateDelta.cs index f5bba35278ac..3277755dea56 100644 --- a/src/BuiltInTools/HotReloadAgent/UpdateDelta.cs +++ b/src/BuiltInTools/HotReloadAgent/UpdateDelta.cs @@ -1,7 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; + namespace Microsoft.DotNet.Watch; + internal readonly struct UpdateDelta(Guid moduleId, byte[] metadataDelta, byte[] ilDelta, byte[] pdbDelta, int[] updatedTypes) { public Guid ModuleId { get; } = moduleId; diff --git a/src/BuiltInTools/dotnet-watch.slnf b/src/BuiltInTools/dotnet-watch.slnf index e18611cb6620..2484e98c2da7 100644 --- a/src/BuiltInTools/dotnet-watch.slnf +++ b/src/BuiltInTools/dotnet-watch.slnf @@ -7,7 +7,7 @@ "src\\BuiltInTools\\BrowserRefresh\\Microsoft.AspNetCore.Watch.BrowserRefresh.csproj", "src\\BuiltInTools\\DotNetDeltaApplier\\Microsoft.Extensions.DotNetDeltaApplier.csproj", "src\\BuiltInTools\\DotNetWatchTasks\\DotNetWatchTasks.csproj", - "src\\BuiltInTools\\HotReloadAgent.Package\\Microsoft.DotNet.HotReload.Agent.Package.csproj", + "src\\BuiltInTools\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.Package.csproj", "src\\BuiltInTools\\HotReloadAgent\\Microsoft.DotNet.HotReload.Agent.shproj", "src\\BuiltInTools\\dotnet-watch\\dotnet-watch.csproj", "test\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests\\Microsoft.AspNetCore.Watch.BrowserRefresh.Tests.csproj", diff --git a/src/Cli/Microsoft.DotNet.Cli.Utils/PathUtility.cs b/src/Cli/Microsoft.DotNet.Cli.Utils/PathUtility.cs index 0ea01bc2a46d..60069f1aa672 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Utils/PathUtility.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Utils/PathUtility.cs @@ -2,11 +2,18 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.DotNet.Cli.Utils; +using NuGet.Configuration; namespace Microsoft.DotNet.Tools.Common { public static class PathUtility { + public static bool CheckForNuGetInNuGetConfig() + { + var otherFiles = SettingsUtility.GetEnabledSources(Settings.LoadDefaultSettings(Directory.GetCurrentDirectory())); + return otherFiles.Any(source => source.SourceUri.Equals("https://api.nuget.org/v3/index.json")); + } + public static bool IsPlaceholderFile(string path) { return string.Equals(Path.GetFileName(path), "_._", StringComparison.Ordinal); diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/NuGet/NugetApiManager.cs b/src/Cli/Microsoft.TemplateEngine.Cli/NuGet/NugetApiManager.cs index a714e9783ef7..969b769a1924 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/NuGet/NugetApiManager.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/NuGet/NugetApiManager.cs @@ -34,10 +34,14 @@ internal NugetApiManager() PackageSource? sourceFeed = null, CancellationToken cancellationToken = default) { - if (sourceFeed == null) + if (sourceFeed == null && Microsoft.DotNet.Tools.Common.PathUtility.CheckForNuGetInNuGetConfig()) { sourceFeed = _nugetOrgSource; } + else if (sourceFeed is null) + { + return null; + } SourceRepository repository = GetSourceRepository(sourceFeed); PackageMetadataResource resource = await repository.GetResourceAsync(cancellationToken).ConfigureAwait(false); diff --git a/src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageCoordinator.cs b/src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageCoordinator.cs index 313a7fd31501..b4dda2fd7a46 100644 --- a/src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageCoordinator.cs +++ b/src/Cli/Microsoft.TemplateEngine.Cli/TemplatePackageCoordinator.cs @@ -3,6 +3,7 @@ using System.CommandLine; using Microsoft.DotNet.Cli.Utils; +using Microsoft.DotNet.Tools.Common; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Abstractions.Constraints; using Microsoft.TemplateEngine.Abstractions.Installer; @@ -436,7 +437,7 @@ internal async Task DisplayTemplatePackageMetadata( } else { - IEnumerable packageSources = LoadNuGetSources(additionalSources, true); + IEnumerable packageSources = LoadNuGetSources(additionalSources, includeNuGetFeed: PathUtility.CheckForNuGetInNuGetConfig()); nuGetPackageMetadata = await GetPackageMetadataFromMultipleFeedsAsync(packageSources, nugetApiManager, packageIdentity, packageVersion, cancellationToken).ConfigureAwait(false); if (nuGetPackageMetadata != null && nuGetPackageMetadata.Source.Source.Equals(NugetOrgFeed)) diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.cs.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.cs.xlf index bb255bc8656b..c4544979e385 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.cs.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.cs.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Nepodařilo se ověřit podepisování balíčku. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Přeskakuje se ověření podpisu pro balíček NuGet {0}, protože pochází ze zdroje, který nevyžaduje ověření podpisu. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Ověřilo se, že balíček NuGet {0} má platný podpis. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.de.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.de.xlf index f14bf9732f56..62097e973531 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.de.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.de.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Fehler bei der Überprüfung der Paketsignierung. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Die Signaturüberprüfung für das NuGet-Paket „{0}“ wird übersprungen, da sie aus einer Quelle stammt, für die keine Signaturüberprüfung erforderlich ist. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Es wurde überprüft, ob das NuGet-Paket „{0}“ über eine gültige Signatur verfügt. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.es.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.es.xlf index 79df991196c3..6c1b3ae2fa65 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.es.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.es.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + No se pudo validar la firma del paquete. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Omitiendo la comprobación de firma para el paquete NuGet "{0}" porque procede de un origen que no requiere validación de firma. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Se comprobó que el paquete NuGet "{0}" tiene una firma válida. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.fr.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.fr.xlf index 90617a222fcf..0a647ab9823d 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.fr.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.fr.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Nous n’avons pas pu valider la signature de package. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + La vérification de signature pour le package NuGet « {0} » est ignorée, car elle provient d’une source qui ne nécessite pas de validation de signature. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Nous avons vérifié que le package NuGet « {0} » a une signature valide. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.it.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.it.xlf index 1a4df76d9a9c..0ed72c7ef59d 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.it.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.it.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Impossibile convalidare la firma del pacchetto. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + La verifica della firma per il pacchetto NuGet "{0}" viene ignorata in quanto la firma proviene da un'origine che non richiede la convalida della firma. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Verifica della validità della firma del pacchetto NuGet "{0}" eseguita. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ja.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ja.xlf index 21dd903b40f6..9dc77b2f4628 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ja.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ja.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + パッケージ署名を検証できませんでした。 {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + NuGet パッケージ "{0}" は署名の検証を必要としないソースから取得されたものなので、このパッケージの署名検証をスキップしています。 @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + NuGet パッケージ "{0}" に有効な署名があることを確認しました。 diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ko.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ko.xlf index 6609c786780f..c19cf8b11099 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ko.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ko.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + 패키지 서명을 확인하지 못했습니다. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + NuGet 패키지 "{0}"은(는) 서명 유효성 검사가 필요하지 않은 원본에서 제공되었으므로 서명 확인을 건너뜁니다. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + NuGet 패키지 "{0}"에 유효한 서명이 있음을 확인했습니다. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pl.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pl.xlf index c397a489aa79..1fff9d65a2c9 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pl.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pl.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Nie można zweryfikować podpisywania pakietu. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Pomijanie weryfikacji podpisu dla pakietu NuGet „{0}”, ponieważ pochodzi ona ze źródła, które nie wymaga weryfikacji podpisu. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Zweryfikowano, że pakiet NuGet „{0}” ma prawidłowy podpis. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pt-BR.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pt-BR.xlf index 8f0aab9e33e1..3a909dfb3556 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pt-BR.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.pt-BR.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Falhou ao validar a assinatura do pacote. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Ignorando a verificação de assinatura para o pacote NuGet "{0}" porque ele vem de uma origem que não requer validação de assinatura. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Verificado que o pacote NuGet "{0}" tem uma assinatura válida. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ru.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ru.xlf index c5be1a2d1db3..5e6d6654d9b1 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ru.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.ru.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Не удалось проверить подпись пакета. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + Пропуск проверки подписи для пакета NuGet "{0}", так как он получен из источника, который не требует проверки подписи. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + Проверено, что пакет NuGet "{0}" содержит допустимую подпись. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.tr.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.tr.xlf index 6fe25af61959..0645b534b6e9 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.tr.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.tr.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + Paket imzası doğrulanamadı. {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + "{0}"NuGet paketinin imza doğrulaması atlandı, çünkü imza doğrulaması gerektirmeyen bir kaynaktan geliyor. @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + "{0}" NuGet paketinin geçerli imzaya sahip olduğu doğrulandı. diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hans.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hans.xlf index 06c7cfbc1ed0..cfb8a8a36f1c 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hans.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + 验证包签名失败。 {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + 正在跳过 NuGet 包“{0}”的签名验证,因为该包来自不需要签名验证的源。 @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + 已验证 NuGet 包“{0}”具有有效签名。 diff --git a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hant.xlf b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hant.xlf index 6dbb948c0fb2..e8a336b2b6a3 100644 --- a/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/NugetPackageDownloader/xlf/LocalizableStrings.zh-Hant.xlf @@ -30,7 +30,7 @@ Failed to validate package signing. {0} - Failed to validate package signing. + 無法驗證套件簽署。 {0} @@ -41,7 +41,7 @@ Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. - Skipping signature verification for NuGet package "{0}" because it comes from a source that does not require signature validation. + 正在略過 NuGet 套件的簽章驗證「{0}」,因為它的來源不需要簽章驗證。 @@ -76,7 +76,7 @@ Verified that the NuGet package "{0}" has a valid signature. - Verified that the NuGet package "{0}" has a valid signature. + 已驗證 NuGet 套件「{0}」具備有效簽章。 diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/LocalizableStrings.resx b/src/Cli/dotnet/commands/dotnet-tool/search/LocalizableStrings.resx index 4811e1f5339a..386ea6140aa3 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/LocalizableStrings.resx +++ b/src/Cli/dotnet/commands/dotnet-tool/search/LocalizableStrings.resx @@ -196,4 +196,10 @@ Version Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + \ No newline at end of file diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/ToolSearchCommand.cs b/src/Cli/dotnet/commands/dotnet-tool/search/ToolSearchCommand.cs index d6daf44c568f..29d9c4a75d27 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/ToolSearchCommand.cs +++ b/src/Cli/dotnet/commands/dotnet-tool/search/ToolSearchCommand.cs @@ -5,6 +5,8 @@ using Microsoft.DotNet.Cli; using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.NugetSearch; +using Microsoft.DotNet.Tools.Common; +using NuGet.Configuration; namespace Microsoft.DotNet.Tools.Tool.Search { @@ -26,6 +28,12 @@ public ToolSearchCommand( public override int Execute() { var isDetailed = _parseResult.GetValue(ToolSearchCommandParser.DetailOption); + if (!PathUtility.CheckForNuGetInNuGetConfig()) + { + Reporter.Output.WriteLine(LocalizableStrings.NeedNuGetInConfig); + return 0; + } + NugetSearchApiParameter nugetSearchApiParameter = new(_parseResult); IReadOnlyCollection searchResultPackages = NugetSearchApiResultDeserializer.Deserialize( diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.cs.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.cs.xlf index c7df98b9f33e..8735c705a192 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.cs.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.cs.xlf @@ -47,6 +47,15 @@ Nejnovější verze Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Nenašly se žádné výsledky. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.de.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.de.xlf index f50e42d103d3..e2a2fb2c47e9 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.de.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.de.xlf @@ -47,6 +47,15 @@ Aktuelle Version Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Es wurden keine Ergebnisse gefunden. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.es.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.es.xlf index b8e9fef63dc9..8912b64e886e 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.es.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.es.xlf @@ -47,6 +47,15 @@ Última versión Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. No se encontró ningún resultado. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.fr.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.fr.xlf index c97a6615044d..adf9625fdc88 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.fr.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.fr.xlf @@ -47,6 +47,15 @@ Dernière version Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Résultats introuvables. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.it.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.it.xlf index a3709cb177d1..ca389bb04a5b 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.it.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.it.xlf @@ -47,6 +47,15 @@ Ultima versione Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Non è stato possibile trovare risultati. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ja.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ja.xlf index 46bdcad7a907..59c7f632178f 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ja.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ja.xlf @@ -47,6 +47,15 @@ 最新バージョン Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. 結果が見つかりませんでした。 diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ko.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ko.xlf index 8ebc31feffed..e3f997df3bd3 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ko.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ko.xlf @@ -47,6 +47,15 @@ 최신 버전 Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. 결과를 찾을 수 없습니다. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pl.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pl.xlf index 8f00f81eb056..87564f82fde7 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pl.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pl.xlf @@ -47,6 +47,15 @@ Najnowsza wersja Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Nie można znaleźć żadnych wyników. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pt-BR.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pt-BR.xlf index 9f4434a65b52..2367aeb40b37 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pt-BR.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.pt-BR.xlf @@ -47,6 +47,15 @@ Última Versão Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Não foi possível localizar nenhum resultado. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ru.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ru.xlf index 89719b96d5de..1cb904fa5f8c 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ru.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.ru.xlf @@ -47,6 +47,15 @@ Последняя версия Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Ничего не найдено. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.tr.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.tr.xlf index cdbe99b97a8e..fca2bd8d4de3 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.tr.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.tr.xlf @@ -47,6 +47,15 @@ En Son Sürüm Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. Sonuç bulunamadı. diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hans.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hans.xlf index d90034d3dfcb..bf04ef763834 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hans.xlf @@ -47,6 +47,15 @@ 最新版本 Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. 找不到任何结果。 diff --git a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hant.xlf b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hant.xlf index 274dd5b10281..9fda02783409 100644 --- a/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/commands/dotnet-tool/search/xlf/LocalizableStrings.zh-Hant.xlf @@ -47,6 +47,15 @@ 最新版本 Table lable + + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + The 'dotnet tool search' command unconditionally accesses nuget.org to find tools, but it is not present in your nuget.config. Add it to run this command. + This can be done with this command: + dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org + Do not translate 'dotnet tool search' or 'nuget.config'. Do not localize the last line at all. + Could not find any results. 找不到任何結果。 diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf index 5fb8a8591bb0..ff05e2b66edc 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.cs.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - V souboru global.json byla v sekci {1} nalezena připnutá verze {0} úlohy. + Používá se verze úlohy {0}, která byla zadána v souboru global.json na {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.de.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.de.xlf index 768e6b993068..8c31e874a5df 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.de.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.de.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Es wurde eine in der global.json-Datei unter {1} angeheftete Workload-Version {0} gefunden. + Es wird die Workloadversion {0} verwendet, die in der Datei „global.json“ unter {1} angegeben wurde. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.es.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.es.xlf index 55b4770aae20..bd10b6387057 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.es.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.es.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Se encontró la versión de carga de trabajo {0} anclada en el archivo global.json en {1}. + Utilizando la versión {0} de carga de trabajo, que se especificó en el archivo global.json en {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.fr.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.fr.xlf index 6a65d92aa296..936fd3d96a55 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.fr.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.fr.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Version de charge de travail trouvée {0} épinglée dans le fichier global.json à {1}. + Utilisation de la version de charge de travail {0}, qui a été spécifiée dans le fichier global.json à {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.it.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.it.xlf index 93402b57e610..a2f13e1e22a9 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.it.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.it.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - È stata trovata la versione {0} del carico di lavoro aggiunta nel file di global.json in {1}. + Si utilizza la versione del carico di lavoro {0}, specificata nel file di global.json in {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ja.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ja.xlf index c4b2f52c5200..e2efdd30c74f 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ja.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ja.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - {1} で、global.json ファイルでピン留めされたワークロード バージョン {0} が見つかりました。 + {1} のglobal.json ファイルで指定されたワークロード バージョン {0} を使用しています。 diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ko.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ko.xlf index 5c388bdeacf1..c3c399451608 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ko.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ko.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - {1}의 global.json 파일에 고정되어 워크로드 버전 {0}을(를) 찾았습니다. + {1}의 global.json 파일에 지정된 워크로드 버전 {0}을(를) 사용합니다. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pl.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pl.xlf index 46654667efe5..614321318242 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pl.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pl.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Znaleziono wersję obciążenia {0} przypiętą w pliku global.json w pozycji {1}. + Użycie wersji obciążenia {0}, która została określona w pliku global.json w {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pt-BR.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pt-BR.xlf index a210d5a08ea1..630ce100d177 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pt-BR.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.pt-BR.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Encontrada a versão {0} da carga de trabalho fixada no arquivo global.json em {1}. + Usando a versão {0} da carga de trabalho, que foi especificada no arquivo global.json em {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ru.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ru.xlf index 0aba9aea737e..fe92cf3ed848 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ru.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.ru.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - Обнаружена версия рабочей нагрузки {0}, закрепленная в файле global.json по адресу {1}. + Использование версии рабочей нагрузки {0}, указанной в файле global.json в {1}. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.tr.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.tr.xlf index b314c9ca8fe4..e7fe0dea28eb 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.tr.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.tr.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - {0} iş yükü sürümünün {1} konumundaki global.json dosyasına sabitlendiği bulundu. + {1} içindeki global.json dosyasında belirtilen {0} iş yükü sürümünün kullanılması. diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hans.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hans.xlf index 8dd0f5ce53e3..7d9aeefe36e5 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hans.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - 在 {1} 处找到固定在 global.json 文件中的工作负载版本 {0}。 + 使用工作负载版本 {0},该版本于 {1} 在 global.json 文件中指定。 diff --git a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hant.xlf b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hant.xlf index d83db813a28b..cebfccf50390 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/list/xlf/LocalizableStrings.zh-Hant.xlf @@ -14,7 +14,7 @@ Using workload version {0}, which was specified in the global.json file at {1}. - 在位於 {1} 的 global.json 檔案中找到已釘選的工作負載版本 {0}。 + 使用工作負載版本 {0},這是在 {1} 的 global.json 檔案中所指定。 diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.cs.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.cs.xlf index 6ac161b5c227..6040347817af 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.cs.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.cs.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Úlohy jsou nakonfigurované tak, aby se instalovaly a aktualizovaly pomocí verzí úloh, ale žádná nebyla nalezena. Spusťte příkaz dotnet workload restore a nainstalujte verzi úlohy. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + Verze {0} úlohy, která byla zadána v {1}, nebyla nalezena. Spuštěním příkazu dotnet workload restore nainstalujte tuto verzi úlohy. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.de.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.de.xlf index adc224f972c3..98068f6f7966 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.de.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.de.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Workloads sind so konfiguriert, dass sie mithilfe von Workloadversionen installiert und aktualisiert werden, es wurden jedoch keine gefunden. Führen Sie „dotnet workload restore“ aus, um eine Workloadversion zu installieren. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + Die Arbeitsauslastungsversion {0}, die in {1} angegeben wurde, wurde nicht gefunden. Führen Sie „dotnet workload restore“ aus, um diese Workloadversion zu installieren. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.es.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.es.xlf index 6a30cb80d6d4..7287d2f7822e 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.es.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.es.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Las cargas de trabajo están configuradas para instalarse y actualizarse con versiones de carga de trabajo, pero no se encontró ninguna. Ejecute "dotnet workload restore" para instalar una versión de carga de trabajo. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + No se encontró la versión de carga de trabajo {0}, que se especificó en {1}. Ejecuta "dotnet workload restore" para instalar esta versión de carga de trabajo. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.fr.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.fr.xlf index 67335a21d9c6..276b2f0a65ad 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.fr.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.fr.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Les charges de travail sont configurées pour installer et mettre à jour à l’aide des versions de charge de travail, mais aucune n’a été trouvée. Exécutez « dotnet workload restore » pour installer une version de charge de travail. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + La version de charge de travail {0}, qui a été spécifiée dans {1}, est introuvable. Exécutez « dotnet workload restore » pour installer cette version de charge de travail. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.it.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.it.xlf index 365f8204831d..b2b1981d2d98 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.it.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.it.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + I carichi di lavoro sono configurati per l'installazione e l'aggiornamento con le versioni del carico di lavoro, ma non ne sono stati trovati. Eseguire il "dotnet workload restore" per installare una versione del carico di lavoro. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + La versione del carico di lavoro {0}, specificata in {1}, non è stata trovata. Eseguire "dotnet workload restore" per installare questa versione del carico di lavoro. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ja.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ja.xlf index f3732fe1749e..6d96a0eee41b 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ja.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ja.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + ワークロードは、ワークロード バージョンを使用してインストールおよび更新するように構成されていますが、何も見つかりませんでした。"dotnet workload restore" を実行して、ワークロード バージョンをインストールします。 {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + {1} で指定されたワークロード バージョン {0} が見つかりませんでした。"dotnet workload restore" を実行して、このワークロード バージョンをインストールします。 {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ko.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ko.xlf index 7596c18b6519..23765dfe04fb 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ko.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ko.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + 워크로드 버전을 사용하여 설치하고 업데이트하도록 워크로드를 구성했지만, 워크로드 버전을 찾을 수 없습니다. "dotnet workload restore"를 실행하여 워크로드 버전을 설치하세요. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + {1}에 지정된 워크로드 버전 {0}을(를) 찾을 수 없습니다. "dotnet workload restore"을 실행하여 이 워크로드 버전을 설치합니다. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pl.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pl.xlf index ddefe998f88f..aa81adada6fc 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pl.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pl.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Obciążenia są skonfigurowane do instalowania i aktualizowania przy użyciu wersji obciążeń, ale żadnych nie znaleziono. Uruchom polecenie „dotnet workload restore”, aby zainstalować wersję obciążenia. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + Nie znaleziono wersji obciążenia {0} określonej w kontenerze {1}. Uruchom polecenie „dotnet workload restore”, aby zainstalować tę wersję obciążenia. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pt-BR.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pt-BR.xlf index e0cb1a1b4026..309a2ca50056 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pt-BR.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.pt-BR.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + As cargas de trabalho estão configuradas para instalar e atualizar usando versões de carga de trabalho, mas nenhuma foi encontrada. Execute "dotnet workload restore" para instalar uma versão de carga de trabalho. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + A versão da carga de trabalho {0}, especificada em {1}, não foi localizada. Execute "dotnet workload restore" para instalar esta versão da carga de trabalho. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ru.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ru.xlf index 91916afa511d..a323d09a7753 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ru.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.ru.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + Рабочие нагрузки настроены на установку и обновление с использованием версий рабочей нагрузки, но они не найдены. Запустите команду "dotnet workload restore", чтобы установить версию рабочей нагрузки. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + Версия рабочей нагрузки {0}, указанная в {1}, не найдена. Запустите команду "dotnet workload restore", чтобы установить эту версию рабочей нагрузки. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.tr.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.tr.xlf index d2784679f71d..91fd9628a5d1 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.tr.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.tr.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + İş yükleri, iş yükü sürümlerini kullanarak yüklenip güncelleştirilmek üzere yapılandırıldı, ancak herhangi bir iş yükü bulunamadı. İş yükü sürümünü yüklemek için "dotnet workload restore" komutunu çalıştırın. {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + {1} konumunda belirtilen {0} iş yükü sürümü bulunamadı. Bu iş yükü sürümünü yüklemek için "dotnet workload restore" komutunu çalıştırın. {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hans.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hans.xlf index 6818b5c4f049..f6a3b5aa5b5f 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hans.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hans.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + 工作负载配置为使用工作负载版本进行安装和更新,但未找到任何版本。运行 "dotnet workload restore" 以安装工作负载版本。 {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + 找不到在 {1} 中指定的工作负载版本 {0}。运行“dotnet workload restore”以安装此工作负载版本。 {Locked="dotnet workload restore"} diff --git a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hant.xlf b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hant.xlf index 0825c75572f8..676512955bbc 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hant.xlf +++ b/src/Cli/dotnet/commands/dotnet-workload/xlf/LocalizableStrings.zh-Hant.xlf @@ -24,7 +24,7 @@ Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. - Workloads are configured to install and update using workload versions, but none were found. Run "dotnet workload restore" to install a workload version. + 工作負載已設定為使用工作負載版本來安裝和更新,但找不到任何工作負載版本。執行 "dotnet workload restore" 以安裝工作負載版本。 {Locked="dotnet workload restore"} @@ -74,7 +74,7 @@ Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. - Workload version {0}, which was specified in {1}, was not found. Run "dotnet workload restore" to install this workload version. + 找不到 {1} 中指定的工作負載版本 {0}。執行 "dotnet workload restore" 以安裝此工作負載版本。 {Locked="dotnet workload restore"} diff --git a/src/Containers/Microsoft.NET.Build.Containers/ImageBuilder.cs b/src/Containers/Microsoft.NET.Build.Containers/ImageBuilder.cs index 096f70610377..0df6d3fb633a 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/ImageBuilder.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/ImageBuilder.cs @@ -50,6 +50,9 @@ internal ImageBuilder(ManifestV2 manifest, string manifestMediaType, ImageConfig /// public bool IsWindows => _baseImageConfig.IsWindows; + // For tests + internal string ManifestConfigDigest => _manifest.Config.digest; + /// /// Builds the image configuration ready for further processing. /// diff --git a/src/Containers/Microsoft.NET.Build.Containers/ImageIndexGenerator.cs b/src/Containers/Microsoft.NET.Build.Containers/ImageIndexGenerator.cs new file mode 100644 index 000000000000..bc23073080ea --- /dev/null +++ b/src/Containers/Microsoft.NET.Build.Containers/ImageIndexGenerator.cs @@ -0,0 +1,100 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Text.Json; +using System.Text.Json.Nodes; +using Microsoft.NET.Build.Containers.Resources; +using Microsoft.NET.Build.Containers.Tasks; + +namespace Microsoft.NET.Build.Containers; + +internal readonly struct ImageInfo +{ + internal string Config { get; init; } + internal string ManifestDigest { get; init; } + internal string Manifest { get; init; } + internal string ManifestMediaType { get; init; } + + public override string ToString() => ManifestDigest; +} + +internal static class ImageIndexGenerator +{ + /// + /// Generates an image index from the given images. + /// + /// + /// Returns json string of image index and image index mediaType. + /// + /// + internal static (string, string) GenerateImageIndex(ImageInfo[] imageInfos) + { + if (imageInfos.Length == 0) + { + throw new ArgumentException(string.Format(Strings.ImagesEmpty)); + } + + string manifestMediaType = imageInfos[0].ManifestMediaType; + + if (!imageInfos.All(image => string.Equals(image.ManifestMediaType, manifestMediaType, StringComparison.OrdinalIgnoreCase))) + { + throw new ArgumentException(Strings.MixedMediaTypes); + } + + if (manifestMediaType == SchemaTypes.DockerManifestV2) + { + return GenerateImageIndex(imageInfos, SchemaTypes.DockerManifestV2, SchemaTypes.DockerManifestListV2); + } + else if (manifestMediaType == SchemaTypes.OciManifestV1) + { + return GenerateImageIndex(imageInfos, SchemaTypes.OciManifestV1, SchemaTypes.OciImageIndexV1); + } + else + { + throw new NotSupportedException(string.Format(Strings.UnsupportedMediaType, manifestMediaType)); + } + } + + private static (string, string) GenerateImageIndex(ImageInfo[] images, string manifestMediaType, string imageIndexMediaType) + { + // Here we are using ManifestListV2 struct, but we could use ImageIndexV1 struct as well. + // We are filling the same fiels, so we can use the same struct. + var manifests = new PlatformSpecificManifest[images.Length]; + for (int i = 0; i < images.Length; i++) + { + var image = images[i]; + + var manifest = new PlatformSpecificManifest + { + mediaType = manifestMediaType, + size = image.Manifest.Length, + digest = image.ManifestDigest, + platform = GetArchitectureAndOsFromConfig(image) + }; + manifests[i] = manifest; + } + + var dockerManifestList = new ManifestListV2 + { + schemaVersion = 2, + mediaType = imageIndexMediaType, + manifests = manifests + }; + + return (JsonSerializer.SerializeToNode(dockerManifestList)?.ToJsonString() ?? "", dockerManifestList.mediaType); + } + + private static PlatformInformation GetArchitectureAndOsFromConfig(ImageInfo image) + { + var configJson = JsonNode.Parse(image.Config) as JsonObject ?? + throw new ArgumentException($"{nameof(image.Config)} should be a JSON object.", nameof(image.Config)); + + var architecture = configJson["architecture"]?.ToString() ?? + throw new ArgumentException($"{nameof(image.Config)} should contain 'architecture'.", nameof(image.Config)); + + var os = configJson["os"]?.ToString() ?? + throw new ArgumentException($"{nameof(image.Config)} should contain 'os'.", nameof(image.Config)); + + return new PlatformInformation { architecture = architecture, os = os }; + } +} diff --git a/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net10.0/PublicAPI.Unshipped.txt b/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net10.0/PublicAPI.Unshipped.txt index 1522357b9a11..b19e4fa81718 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net10.0/PublicAPI.Unshipped.txt +++ b/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net10.0/PublicAPI.Unshipped.txt @@ -12,12 +12,27 @@ Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsTrimmed.get Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsTrimmed.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsSelfContained.get -> bool Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsSelfContained.set -> void -Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifier.get -> string! -Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifier.set -> void +Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifiers.get -> string![]! +Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifiers.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UserBaseImage.get -> string? Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UserBaseImage.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UsesInvariantGlobalization.get -> bool Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UsesInvariantGlobalization.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.Cancel() -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.CreateImageIndex() -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.Dispose() -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.GeneratedImageIndex.get -> string! +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.GeneratedImageIndex.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.ImageTags.get -> string![]! +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.ImageTags.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.GeneratedContainers.get -> Microsoft.Build.Framework.ITaskItem![]! +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.GeneratedContainers.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.OutputRegistry.get -> string! +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.OutputRegistry.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.Repository.get -> string! +Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.Repository.set -> void +override Microsoft.NET.Build.Containers.Tasks.CreateImageIndex.Execute() -> bool static readonly Microsoft.NET.Build.Containers.Constants.Version -> string! Microsoft.NET.Build.Containers.ContainerHelpers Microsoft.NET.Build.Containers.ContainerHelpers.ParsePortError @@ -196,6 +211,8 @@ Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerDigest.get Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerDigest.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedArchiveOutputPath.get -> string! Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedArchiveOutputPath.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerMediaType.get -> string! +Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerMediaType.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.Repository.get -> string! Microsoft.NET.Build.Containers.Tasks.CreateNewImage.Repository.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.ImageTags.get -> string![]! diff --git a/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Unshipped.txt b/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Unshipped.txt index 6dd6551ddb37..43526e9c3ab4 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Unshipped.txt +++ b/src/Containers/Microsoft.NET.Build.Containers/PublicAPI/net472/PublicAPI.Unshipped.txt @@ -62,6 +62,8 @@ Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerDigest.get Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerDigest.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedArchiveOutputPath.get -> string! Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedArchiveOutputPath.set -> void +Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerMediaType.get -> string! +Microsoft.NET.Build.Containers.Tasks.CreateNewImage.GeneratedContainerMediaType.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.Repository.get -> string! Microsoft.NET.Build.Containers.Tasks.CreateNewImage.Repository.set -> void Microsoft.NET.Build.Containers.Tasks.CreateNewImage.ImageTags.get -> string![]! @@ -123,8 +125,8 @@ Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsTrimmed.get Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsTrimmed.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsSelfContained.get -> bool Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.IsSelfContained.set -> void -Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifier.get -> string! -Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifier.set -> void +Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifiers.get -> string![]! +Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.TargetRuntimeIdentifiers.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UsesInvariantGlobalization.get -> bool Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag.UsesInvariantGlobalization.set -> void Microsoft.NET.Build.Containers.Tasks.ComputeDotnetBaseImageAndTag diff --git a/src/Containers/Microsoft.NET.Build.Containers/Registry/DefaultManifestOperations.cs b/src/Containers/Microsoft.NET.Build.Containers/Registry/DefaultManifestOperations.cs index 14889a669f34..a8b2248d8996 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Registry/DefaultManifestOperations.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Registry/DefaultManifestOperations.cs @@ -38,10 +38,9 @@ public async Task GetAsync(string repositoryName, string re }; } - public async Task PutAsync(string repositoryName, string reference, ManifestV2 manifest, string mediaType, CancellationToken cancellationToken) + public async Task PutAsync(string repositoryName, string reference, string manifestJson, string mediaType, CancellationToken cancellationToken) { - string jsonString = JsonSerializer.SerializeToNode(manifest)?.ToJsonString() ?? ""; - HttpContent manifestUploadContent = new StringContent(jsonString); + HttpContent manifestUploadContent = new StringContent(manifestJson); manifestUploadContent.Headers.ContentType = new MediaTypeHeaderValue(mediaType); HttpResponseMessage putResponse = await _client.PutAsync(new Uri(_baseUri, $"/v2/{repositoryName}/manifests/{reference}"), manifestUploadContent, cancellationToken).ConfigureAwait(false); diff --git a/src/Containers/Microsoft.NET.Build.Containers/Registry/IManifestOperations.cs b/src/Containers/Microsoft.NET.Build.Containers/Registry/IManifestOperations.cs index 16751a5c6685..23381179403d 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Registry/IManifestOperations.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Registry/IManifestOperations.cs @@ -14,5 +14,5 @@ internal interface IManifestOperations { public Task GetAsync(string repositoryName, string reference, CancellationToken cancellationToken); - public Task PutAsync(string repositoryName, string reference, ManifestV2 manifest, string mediaType, CancellationToken cancellationToken); + public Task PutAsync(string repositoryName, string reference, string manifestListJson, string mediaType, CancellationToken cancellationToken); } diff --git a/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs b/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs index 6ac75508f459..fe43d88cc822 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs @@ -1,11 +1,11 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using NuGet.Packaging; using System.Diagnostics; using System.Net.Http.Json; using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.RegularExpressions; using Microsoft.Extensions.Logging; using Microsoft.NET.Build.Containers.Resources; using NuGet.RuntimeModel; @@ -529,6 +529,17 @@ private async Task UploadBlobAsync(string repository, string digest, Stream cont } + public async Task PushManifestListAsync(string repositoryName, string[] tags, string manifestListJson, string mediaType, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + foreach (var tag in tags) + { + _logger.LogInformation(Strings.Registry_TagUploadStarted, tag, RegistryName); + await _registryAPI.Manifest.PutAsync(repositoryName, tag, manifestListJson, mediaType, cancellationToken).ConfigureAwait(false); + _logger.LogInformation(Strings.Registry_TagUploaded, tag, RegistryName); + } + } + public Task PushAsync(BuiltImage builtImage, SourceImageReference source, DestinationImageReference destination, CancellationToken cancellationToken) => PushAsync(builtImage, source, destination, pushTags: true, cancellationToken); @@ -593,13 +604,14 @@ private async Task PushAsync(BuiltImage builtImage, SourceImageReference source, // Tags can refer to an image manifest or an image manifest list. // In the first case, we push tags to the registry. // In the second case, we push the manifest digest so the manifest list can refer to it. + string manifestJson = JsonSerializer.SerializeToNode(builtImage.Manifest)?.ToJsonString() ?? ""; if (pushTags) { Debug.Assert(destination.Tags.Length > 0); foreach (string tag in destination.Tags) { _logger.LogInformation(Strings.Registry_TagUploadStarted, tag, RegistryName); - await _registryAPI.Manifest.PutAsync(destination.Repository, tag, builtImage.Manifest, builtImage.ManifestMediaType, cancellationToken).ConfigureAwait(false); + await _registryAPI.Manifest.PutAsync(destination.Repository, tag, manifestJson, builtImage.ManifestMediaType, cancellationToken).ConfigureAwait(false); _logger.LogInformation(Strings.Registry_TagUploaded, tag, RegistryName); } } @@ -607,7 +619,7 @@ private async Task PushAsync(BuiltImage builtImage, SourceImageReference source, { string manifestDigest = builtImage.Manifest.GetDigest(); _logger.LogInformation(Strings.Registry_ManifestUploadStarted, RegistryName, manifestDigest); - await _registryAPI.Manifest.PutAsync(destination.Repository, manifestDigest, builtImage.Manifest, builtImage.ManifestMediaType, cancellationToken).ConfigureAwait(false); + await _registryAPI.Manifest.PutAsync(destination.Repository, manifestDigest, manifestJson, builtImage.ManifestMediaType, cancellationToken).ConfigureAwait(false); _logger.LogInformation(Strings.Registry_ManifestUploaded, RegistryName); } } diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.Designer.cs b/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.Designer.cs index 0edd6dbaa53e..aff92942f408 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.Designer.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.Designer.cs @@ -168,6 +168,15 @@ internal static string BlobUploadFailed { } } + /// + /// Looks up a localized string similar to Building image index '{0}' on top of manifests {1}.. + /// + internal static string BuildingImageIndex { + get { + return ResourceManager.GetString("BuildingImageIndex", resourceCulture); + } + } + /// /// Looks up a localized string similar to Pushed image '{0}' to {1}.. /// @@ -339,6 +348,15 @@ internal static string HostObjectNotDetected { } } + /// + /// Looks up a localized string similar to Pushed image index '{0}' to registry '{1}'.. + /// + internal static string ImageIndexUploadedToRegistry { + get { + return ResourceManager.GetString("ImageIndexUploadedToRegistry", resourceCulture); + } + } + /// /// Looks up a localized string similar to CONTAINER1009: Failed to load image from local registry. stdout: {0}. /// @@ -357,6 +375,15 @@ internal static string ImagePullNotSupported { } } + /// + /// Looks up a localized string similar to Cannot create manifest list (image index) because no images were provided.. + /// + internal static string ImagesEmpty { + get { + return ResourceManager.GetString("ImagesEmpty", resourceCulture); + } + } + /// /// Looks up a localized string similar to CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring.. /// @@ -366,6 +393,15 @@ internal static string InvalidEnvVar { } } + /// + /// Looks up a localized string similar to Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata.. + /// + internal static string InvalidImageMetadata { + get { + return ResourceManager.GetString("InvalidImageMetadata", resourceCulture); + } + } + /// /// Looks up a localized string similar to CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character.. /// @@ -447,6 +483,15 @@ internal static string InvalidTags { } } + /// + /// Looks up a localized string similar to Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none.. + /// + internal static string InvalidTargetRuntimeIdentifiers { + get { + return ResourceManager.GetString("InvalidTargetRuntimeIdentifiers", resourceCulture); + } + } + /// /// Looks up a localized string similar to CONTAINER1003: Token response had neither token nor access_token.. /// @@ -510,6 +555,15 @@ internal static string MissingPortNumber { } } + /// + /// Looks up a localized string similar to 'mediaType' of manifests should be the same in manifest list (image index).. + /// + internal static string MixedMediaTypes { + get { + return ResourceManager.GetString("MixedMediaTypes", resourceCulture); + } + } + /// /// Looks up a localized string similar to CONTAINER1004: No RequestUri specified.. /// @@ -753,6 +807,15 @@ internal static string UnrecognizedMediaType { } } + /// + /// Looks up a localized string similar to Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'.. + /// + internal static string UnsupportedMediaType { + get { + return ResourceManager.GetString("UnsupportedMediaType", resourceCulture); + } + } + /// /// Looks up a localized string similar to Unable to create tarball for mediaType '{0}'.. /// diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.resx b/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.resx index ff3ca21248cd..57168a5f08bf 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.resx +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/Strings.resx @@ -201,6 +201,9 @@ CONTAINER2019: Invalid SDK semantic version '{0}'. {StrBegins="CONTAINER2019: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + CONTAINER2018: Invalid SDK prerelease version '{0}' - only 'rc' and 'preview' are supported. {StrBegins="CONTAINER2018: "} @@ -347,10 +350,36 @@ Pushed image '{0}' to registry '{1}'. + + Pushed image index '{0}' to registry '{1}'. + + Building image '{0}' with tags '{1}' on top of base image '{2}'. + + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + + + 'mediaType' of manifests should be the same in manifest list (image index). + + + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + + + Cannot create manifest list (image index) because no images were provided. + + + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + Error while reading daemon config: {0} {0} is the exception message that ends with period diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.cs.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.cs.xlf index f19cef8cc149..f9b14762b904 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.cs.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.cs.xlf @@ -57,6 +57,13 @@ CONTAINER1001: Nepovedlo se nahrát objekt blob pomocí {0}; přijatý stavový kód {1} {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Image {0} byla vložena do {1}. @@ -152,6 +159,11 @@ Nebyl zjištěn žádný objekt hostitele. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: Nepodařilo se načíst bitovou kopii z místního registru. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: Načítání imagí z místního registru se nepodporuje. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' není platná proměnná prostředí. Ignorování. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: Odvozený název image „{0}“ obsahuje zcela neplatné znaky. Platné znaky pro název obrázku jsou alfanumerické znaky, -, /, nebo _, a název obrázku musí začínat alfanumerickým znakem. @@ -212,6 +234,11 @@ CONTAINER2010: Byla zadána neplatná {0} : {1}. {0} musí být seznam platných značek obrázků oddělených středníky. Značky obrázků musí být alfanumerické, podtržítka, spojovníky nebo tečky. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: Odpověď tokenu neměla token ani access_token. @@ -247,6 +274,11 @@ CONTAINER2016: Položka ContainerPort '{0}' neurčuje číslo portu. Ujistěte se prosím, že položka Include je číslo portu, například <ContainerPort Include="80" />. {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: Nebyl zadán žádný identifikátor RequestUri. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Nepovedlo se vytvořit tarball pro image OCI s více značkami. @@ -382,9 +414,14 @@ CONTAINER2001: Nerozpoznaný typ mediaType '{0}'. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Nepovedlo se vytvořit tarball pro mediaType {0}. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.de.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.de.xlf index 80fb43e87319..9aac91628a8a 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.de.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.de.xlf @@ -57,6 +57,13 @@ CONTAINER1001: Fehler beim Hochladen des Blobs mit {0}; der Statuscode „{1}“ wurde empfangen. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Bild "{0}" wurde in {1} gepusht. @@ -152,6 +159,11 @@ Es wurde kein Hostobjekt erkannt. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: Fehler beim Laden des Images aus der lokalen Registrierung. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: Das Pullen von Images aus der lokalen Registrierung wird nicht unterstützt. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: „{1}“ war keine gültige Umgebungsvariable. Sie wird ignoriert. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: Der abgeleitete Imagename '{0}' enthält vollständig ungültige Zeichen. Die gültigen Zeichen für einen Bildnamen sind alphanumerische Zeichen, -, /, oder _, und der Bildname muss mit einem alphanumerischen Zeichen beginnen. @@ -212,6 +234,11 @@ CONTAINER2010: Ungültige {0} angegeben: {1}. {0} muss eine durch Semikolons getrennte Liste gültiger Imagetags sein. Imagetags müssen alphanumerisch, Unterstrich, Bindestrich oder Punkt sein. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: Die Tokenantwort enthielt weder ein Token noch access_token. @@ -247,6 +274,11 @@ CONTAINER2016: Das ContainerPort-Element „{0}“ gibt keine Portnummer an. Stellen Sie sicher, dass der Include des Elements eine Portnummer ist, z. B. „<ContainerPort Include="80" />“ {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: Es wurde kein RequestUri angegeben. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Der Tarball für das oci-Bild mit mehreren Kategorien kann nicht erstellt werden. @@ -382,9 +414,14 @@ CONTAINER2001: Unbekannter mediaType „{0}“. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Tarball für mediaType „{0}“ kann nicht erstellt werden. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.es.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.es.xlf index e0a08945d481..f943f93fa92c 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.es.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.es.xlf @@ -57,6 +57,13 @@ CONTAINER1001: no se pudo cargar el blob mediante {0}; se ha recibido el código de estado "{1}". {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Insertada la imagen “{0}” en {1}. @@ -152,6 +159,11 @@ No se detectó ningún objeto host. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: no se pudo cargar la imagen desde el registro local. Stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: No se admite la extracción de imágenes del registro local. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: "{1}" no era una variable de entorno válida. Ignorando. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: el nombre de imagen inferido '{0}' contiene caracteres totalmente no válidos. Los caracteres válidos para un nombre de imagen son los caracteres alfanuméricos, -, /, o _; el nombre de imagen tiene que comenzar con uno. @@ -212,6 +234,11 @@ CONTAINER2010: se proporcionó un {0} no válido: {1}. {0} debe ser una lista delimitada por punto y coma de etiquetas de imagen válidas. Las etiquetas de imagen deben ser alfanuméricas, con guion bajo, guiones o puntos. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: La respuesta del token no tenía ningún token ni access_token. @@ -247,6 +274,11 @@ CONTAINER2016: El elemento ContainerPort "{0}" no especifica el número de puerto. Asegúrate de que la inclusión del elemento es un número de puerto, por ejemplo, "<ContainerPort Include="80" />" {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: No se especificó RequestUri. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + No se puede crear un tarball para una imagen oci con varias etiquetas. @@ -382,9 +414,14 @@ CONTAINER2001: mediaType "{0}" no reconocido. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + No se puede crear un tarball para el mediaType "{0}". diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.fr.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.fr.xlf index 4b2d59b77ccc..436a7f45faba 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.fr.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.fr.xlf @@ -57,6 +57,13 @@ CONTAINER1001: échec du chargement de l’objet blob à l’aide de {0}; le code d’état «{1}» a été reçu. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. L’image '{0}' a été envoyée à {1}. @@ -152,6 +159,11 @@ Aucun objet hôte détecté. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: Échec du chargement de l'image à partir du registre local. sortie standard : {0} @@ -162,11 +174,21 @@ CONTAINER1010: L'extraction d'images à partir du registre local n'est pas prise en charge. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0} : '{1}' n’était pas une variable d’environnement valide. Ignorant. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: le nom d'image déduit '{0}' contient des caractères entièrement non valides. Les caractères valides pour un nom d'image sont les caractères alphanumériques, -, / ou _, et le nom de l'image doit commencer par un caractère alphanumérique. @@ -212,6 +234,11 @@ CONTAINER2010: {0} non valide fournie : {1}. {0} doit être une liste de balises d’image valides délimitées par des points-virgules. Les balises d’image doivent être alphanumériques, traits de soulignement, traits d’union ou point. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: la réponse de jeton n’avait ni jeton ni access_token. @@ -247,6 +274,11 @@ CONTAINER2016: l’élément ContainerPort '{0}' ne spécifie pas le numéro de port. Vérifiez que l’élément Include est un numéro de port, par exemple '<ContainerPort Include="80" />' {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: aucun RequestUri spécifié. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Impossible de créer un tarball pour l’image oci avec plusieurs balises. @@ -382,9 +414,14 @@ CONTAINER2001: '{0}' mediaType non reconnu. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Impossible de créer tarball pour mediaType '{0}'. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.it.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.it.xlf index 58f8e6aa3df5..9209a128d3a9 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.it.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.it.xlf @@ -57,6 +57,13 @@ CONTAINER1001: non è stato possibile caricare il BLOB usando {0}; codice di stato ricevuto '{1}'. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. È stato eseguito il push dell'immagine '{0}' in {1}. @@ -152,6 +159,11 @@ Nessun oggetto host rilevato. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: non è stato possibile caricare l'immagine dal registro locale. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: il pull di immagini dal registro locale non è supportato. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' non è una variabile di ambiente valida. Il valore verrà ignorato. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: il nome dell'immagine dedotto '{0}' contiene caratteri completamente non validi. I caratteri validi per un nome di immagine sono caratteri alfanumerici, -, / o _, e il nome dell'immagine deve iniziare con un carattere alfanumerico. @@ -212,6 +234,11 @@ CONTAINER2010: il valore {0} specificato non è valido: {1}. {0} deve essere un elenco delimitato da punto e virgola di tag di immagine validi. I tag immagine devono essere alfanumerici, di sottolineatura, trattino o punto. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: la risposta del token non contiene né token né access_token. @@ -247,6 +274,11 @@ CONTAINER2016: l'elemento ContainerPort '{0}' non specifica il numero di porta. Assicurarsi che il valore Include dell'elemento sia un numero di porta, ad esempio '<ContainerPort Include="80" />' {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: nessun RequestUri specificato. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Non è possibile creare il tarball per l'immagine OCI con più tag. @@ -382,9 +414,14 @@ CONTAINER2001: mediaType '{0}' non riconosciuto. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Impossibile creare il tarball per un mediaType '{0}'. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ja.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ja.xlf index a884882357a9..3646bde68d76 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ja.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ja.xlf @@ -57,6 +57,13 @@ CONTAINER1001: {0} を使用して BLOB をアップロードできませんでした; 状態コード '{1}' を受信しました。 {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. イメージ '{0}' を {1} にプッシュしました。 @@ -152,6 +159,11 @@ ホスト オブジェクトが検出されませんでした。 + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: ローカル レジストリからイメージを読み込めませんでした。stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: ローカル レジストリからのイメージのプルはサポートされていません。 {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' は有効な環境変数ではありませんでした。無視しています。 {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: 推定されたイメージ名 '{0}' に、完全に無効な文字が含まれています。イメージ名に有効な文字は英数字、-、/、または _で、イメージ名の先頭には英数字を使用する必要があります。 @@ -212,6 +234,11 @@ CONTAINER2010: 無効な {0} が指定されました: {1}。{0} は、セミコロンで区切られた有効なイメージ タグのリストである必要があります。イメージ タグは、英数字、アンダースコア、ハイフン、またはピリオドである必要があります。 {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: トークン応答にトークンも access_token もありませんでした。 @@ -247,6 +274,11 @@ CONTAINER2016: ContainerPort 項目 '{0}' でポート番号が指定されていません。項目の Include がポート番号 (e '<ContainerPort Include="80" />' など) であることを確認してください {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: RequestUri が指定されていません。 @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + 複数のタグを持つ oci イメージの tarball を作成できません。 @@ -382,9 +414,14 @@ CONTAINER2001: 認識されない mediaType '{0}' です。 {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + mediaType '{0}' の tarball を作成できません。 diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ko.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ko.xlf index 3277da337672..be9903c994e7 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ko.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ko.xlf @@ -57,6 +57,13 @@ CONTAINER1001: {0}을(를) 사용하여 Blob을 업로드하지 못했습니다. '{1}' 상태 코드를 수신했습니다. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. '{0}' 이미지를 {1}에 푸시했습니다. @@ -152,6 +159,11 @@ 호스트 개체가 검색되지 않았습니다. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: 로컬 레지스트리에서 이미지를 로드하지 못했습니다. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: 로컬 레지스트리에서 이미지 끌어오기가 지원되지 않습니다. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}'은(는) 유효한 환경 변수가 아닙니다. 무시 중. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: 유추된 이미지 이름 '{0}'에 완전히 잘못된 문자가 포함되어 있습니다. 이미지 이름의 유효한 문자는 영숫자, -, /또는 _이며 이미지 이름은 영숫자 문자로 시작해야 합니다. @@ -212,6 +234,11 @@ CONTAINER2010: 잘못된 {0}이(가) 제공됨: {1}. {0}은(는) 세미콜론으로 구분된 유효한 이미지 태그 목록이어야 합니다. 이미지 태그는 영숫자, 밑줄, 하이픈 또는 마침표여야 합니다. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: 토큰 응답에 토큰이나 access_token이 없습니다. @@ -247,6 +274,11 @@ CONTAINER2016: ContainerPort 항목 '{0}'이(가) 포트 번호를 지정하지 않습니다. 항목의 포함이 포트 번호인지 확인하세요(예: '<ContainerPort Include="80" />'). {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: RequestUri가 지정되지 않았습니다. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + 태그가 여러 개 있는 OCI 이미지에 대한 tarball을 만들 수 없습니다. @@ -382,9 +414,14 @@ CONTAINER2001: 미디어 유형 '{0}'을(를) 인식할 수 없습니다. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + mediaType '{0}' 대한 tarball을 만들 수 없습니다. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pl.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pl.xlf index f749d54b6456..9a24297f33d2 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pl.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pl.xlf @@ -57,6 +57,13 @@ CONTAINER1001: nie można przekazać obiektu blob przy użyciu {0}; odebrano kod stanu „{1}”. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Wypchnięty obraz „{0}” do „{1}”. @@ -152,6 +159,11 @@ Nie wykryto obiektu hosta. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: Nie można załadować obrazu z rejestru lokalnego. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: Ściąganie obrazów z rejestru lokalnego nie jest obsługiwane. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: „{1}” nie jest prawidłową zmienną środowiskową. Ignorowanie. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: Wywnioskowana nazwa obrazu „{0}” zawiera całkowicie nieprawidłowe znaki. Prawidłowe znaki nazwy obrazu to znaki alfanumeryczne oraz —, /, lub _, a nazwa obrazu musi zaczynać się znakiem alfanumerycznym. @@ -212,6 +234,11 @@ CONTAINER2010: podano nieprawidłowy {0}: {1}. {0} musi być rozdzielaną średnikami listą prawidłowych tagów obrazów. Tagi obrazów muszą być alfanumeryczne, zawierać podkreślenia, łączniki lub kropki. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: odpowiedź tokenu nie miała tokenu ani access_token. @@ -247,6 +274,11 @@ CONTAINER2016: element ContainerPort „{0}” nie określa numeru portu. Upewnij się, że element Include jest numerem portu, na przykład „<ContainerPort Include="80" />” {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: nie określono identyfikatora RequestUri. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Nie można utworzyć elementu tarball dla obrazu OCI z wieloma tagami. @@ -382,9 +414,14 @@ CONTAINER2001: nierozpoznany typ nośnika „{0}”. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Nie można utworzyć elementu tarball dla elementu mediaType „{0}”. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pt-BR.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pt-BR.xlf index 7391317d6a86..5d33fbd91e46 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pt-BR.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.pt-BR.xlf @@ -57,6 +57,13 @@ CONTAINER1001: Falha ao carregar o blob usando {0}; código de status recebido '{1}'. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Imagem enviada '{0}' para {1}. @@ -152,6 +159,11 @@ Nenhum objeto de host detectado. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: falha ao carregar a imagem do registro local. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: A extração de imagens do registro local não é suportada. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' não era uma variável de ambiente válida. Ignorando. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: o nome da imagem inferida '{0}' contém caracteres totalmente inválidos. Os caracteres válidos para um nome de imagem são caracteres alfanuméricos, -, / ou _, e o nome da imagem deve começar com um caractere alfanumérico. @@ -212,6 +234,11 @@ CONTAINER2010: inválido {0} fornecido: {1}. {0} deve ser uma lista delimitada por ponto-e-vírgula de marcas de imagem válidas. As tags de imagem devem ser alfanuméricas, sublinhado, hífen ou ponto. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: A resposta do token não tinha token nem access_token. @@ -247,6 +274,11 @@ CONTAINER2016: O item ContainerPort '{0}' não especifica o número da porta. Certifique-se de que o Include do item seja um número de porta, por exemplo '<ContainerPort Include="80" />' {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: Nenhum RequestUri especificado. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Não é possível criar tarball para imagem oci com várias marcas. @@ -382,9 +414,14 @@ CONTAINER2001: MediaType não reconhecido '{0}'. {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Não é possível criar tarball para mediaType "{0}". diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ru.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ru.xlf index c4de2491b871..902bba0a69f1 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ru.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.ru.xlf @@ -57,6 +57,13 @@ CONTAINER1001: не удалось отправить BLOB-объект с помощью {0}; получен код состояния "{1}". {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. Изображение "{0}" отправлено в {1}. @@ -152,6 +159,11 @@ Объект узла не обнаружен. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: не удалось загрузить образ из локального реестра. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: извлечение образов из локального реестра не поддерживается. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: "{1}" не является допустимой переменной среды. Пропуск. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: Предполагаемое имя изображения "{0}" содержит совершенно недопустимые символы. Допустимыми символами для имени изображения являются буквенно-цифровые символы, -, / или _, а имя изображения должно начинаться с буквенно-цифрового символа. @@ -212,6 +234,11 @@ CONTAINER2010: предоставлен недопустимый {0}: {1}. {0} должен быть списком допустимых тегов изображений, разделенных точкой с запятой. В качестве тегов изображений допускаются буквы, цифры, символы подчеркивания, дефисы и точки. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: ответ токена не содержит маркера и access_token. @@ -247,6 +274,11 @@ CONTAINER2016: элемент ContainerPort "{0}" не указывает номер порта. Убедитесь, что include элемента является номером порта, например "<ContainerPort Include="80" />" {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: не указан RequestUri. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Невозможно создать tarball для образа oci с несколькими тегами. @@ -382,9 +414,14 @@ CONTAINER2001: нераспознанный тип мультимедиа "{0}". {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + Не удалось создать tarball для mediaType "{0}". diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.tr.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.tr.xlf index 29f191e7e991..605c9bdda808 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.tr.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.tr.xlf @@ -57,6 +57,13 @@ CONTAINER1001: Blob, {0} kullanarak karşıya yüklenemedi; '{1}' durum kodu alındı. {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. '{0}' görüntüsü {1} konumuna gönderildi. @@ -152,6 +159,11 @@ Ana bilgisayar nesnesi algılanmadı. + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: Görüntü yerel kayıt defterinden yüklenemedi. stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: Yerel kayıt defterinden görüntü çekme desteklenmiyor. {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' geçerli bir Ortam Değişkeni değildi. Görmezden geliniyor. {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: Çıkarsanan '{0}' görüntü adı tamamen geçersiz karakterler içeriyor. Bir görüntü adında geçerli karakterler şunlardan oluşur: alfasayısal karakterler, -, /, veya _. Görüntü adı alfasayısal karakterle başlamalıdır. @@ -212,6 +234,11 @@ CONTAINER2010: Geçersiz {0} sağlandı: {1}. {0}, geçerli resim etiketlerinin noktalı virgülle ayrılmış listesi olmalıdır. Resim etiketleri alfasayısal, alt çizgi, kısa çizgi veya nokta olmalıdır. {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: Belirteç yanıtında belirteç veya access_token yok. @@ -247,6 +274,11 @@ CONTAINER2016: ContainerPort öğesi ('{0}'), bağlantı noktası numarasını belirtmiyor. Lütfen öğenin Include değerinin bir bağlantı noktası numarası olduğundan emin olun, örneğin '<ContainerPort Include="80" />' {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: RequestUri belirtilmedi. @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + Birden çok etikete sahip oci görüntüsü için tarball oluşturulamıyor. @@ -382,9 +414,14 @@ CONTAINER2001: Tanınmayan mediaType ('{0}'). {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + mediaType '{0}' için tarball oluşturulamıyor. diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hans.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hans.xlf index f0b18185caa3..0477091274c0 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hans.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hans.xlf @@ -57,6 +57,13 @@ CONTAINER1001: 无法使用 {0} 上传 blob;已收到状态代码“{1}”。 {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. 已将图像“{0}”推送到 {1}。 @@ -152,6 +159,11 @@ 未检测到主机对象。 + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: 未能从本地注册表加载映像。stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: 不支持从本地注册表拉取映像。 {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: "{1}" 不是有效的环境变量。忽略。 {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: 推断的图像名称“{0}”包含完全无效的字符。图像名称的有效字符包括字母数字字符、-、/ 或 _,图像名称必须以字母数字字符开头。 @@ -212,6 +234,11 @@ CONTAINER2010: 提供的 {0} 无效: {1}。{0} 必须是有效图像标记的分号分隔列表。图像标记必须是字母数字、下划线、连字符或句点。 {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: 令牌响应既没有令牌,也没有access_token。 @@ -247,6 +274,11 @@ CONTAINER2016: ContainerPort 项“{0}”未指定端口号。请确保项的 Include 是端口号,例如 "<ContainerPort Include="80" />" {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: 未指定 RequestUri。 @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + 无法为具有多个标记的 oci 图像创建 tarball。 @@ -382,9 +414,14 @@ CONTAINER2001: 无法识别 mediaType“{0}”。 {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + 无法为 mediaType“{0}”创建 tarball。 diff --git a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hant.xlf b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hant.xlf index e402d6ca0525..bc58505af2bc 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hant.xlf +++ b/src/Containers/Microsoft.NET.Build.Containers/Resources/xlf/Strings.zh-Hant.xlf @@ -57,6 +57,13 @@ CONTAINER1001: 無法使用 {0} 上傳 blob; 收到狀態碼 '{1}'。 {StrBegins="CONTAINER1001: "} + + Building image index '{0}' on top of manifests {1}. + Building image index '{0}' on top of manifests {1}. + + {0} is the name of the image index and its tag, {1} is the list of manifests digests + + Pushed image '{0}' to {1}. 已將影像 '{0}' 推送至 {1}。 @@ -152,6 +159,11 @@ 未偵測到主機物件。 + + Pushed image index '{0}' to registry '{1}'. + Pushed image index '{0}' to registry '{1}'. + + CONTAINER1009: Failed to load image from local registry. stdout: {0} CONTAINER1009: 無法從本機登錄載入映像。stdout: {0} @@ -162,11 +174,21 @@ CONTAINER1010: 不支援從本機登錄提取映像。 {StrBegins="CONTAINER1010: "} + + Cannot create manifest list (image index) because no images were provided. + Cannot create manifest list (image index) because no images were provided. + + CONTAINER2015: {0}: '{1}' was not a valid Environment Variable. Ignoring. CONTAINER2015: {0}: '{1}' 不是有效的環境變數。正在忽略。 {StrBegins="CONTAINER2015: "} + + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + Cannot create manifest list (image index) because provided images are invalid. Items must have 'Config', 'Manifest', 'ManifestMediaType' and 'ManifestDigest' metadata. + + CONTAINER2005: The inferred image name '{0}' contains entirely invalid characters. The valid characters for an image name are alphanumeric characters, -, /, or _, and the image name must start with an alphanumeric character. CONTAINER2005: 推斷的映像名稱 '{0}' 包含完全無效字元。映像名稱的有效字元是英數字元、-、/ 或 _,並且映像名稱必須以英數字元開頭。 @@ -212,6 +234,11 @@ CONTAINER2010: 提供的 {0} 無效: {1}。{0} 必須是有效映像標記的分號分隔清單。映像標記必須是英數字元、底線、連字號或句號。 {StrBegins="CONTAINER2010: "} + + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + Invalid string[] TargetRuntimeIdentifiers. Either all should be 'linux-musl' or none. + + CONTAINER1003: Token response had neither token nor access_token. CONTAINER1003: 權杖回應沒有權杖,也沒有access_token。 @@ -247,6 +274,11 @@ CONTAINER2016: ContainerPort 項目 '{0}' 未指定連接埠號碼。請確保項目的 Include 是連接埠號碼,例如 '<ContainerPort Include="80" />' {StrBegins="CONTAINER2016: "} + + 'mediaType' of manifests should be the same in manifest list (image index). + 'mediaType' of manifests should be the same in manifest list (image index). + + CONTAINER1004: No RequestUri specified. CONTAINER1004: 未指定 RequestUri。 @@ -259,7 +291,7 @@ Unable to create tarball for oci image with multiple tags. - Unable to create tarball for oci image with multiple tags. + 無法為具有多個標籤的 oci 影像建立 tarball。 @@ -382,9 +414,14 @@ CONTAINER2001: 無法辨識的 mediaType '{0}'。 {StrBegins="CONTAINER2001: "} + + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + Cannot create manifest list (image index) for the provided 'mediaType' = '{0}'. + + Unable to create tarball for mediaType '{0}'. - Unable to create tarball for mediaType '{0}'. + 無法為 mediaType '{0}' 建立 tarball。 diff --git a/src/Containers/Microsoft.NET.Build.Containers/Tasks/ComputeDotnetBaseImageAndTag.cs b/src/Containers/Microsoft.NET.Build.Containers/Tasks/ComputeDotnetBaseImageAndTag.cs index 836b44e90751..b5573582900b 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Tasks/ComputeDotnetBaseImageAndTag.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Tasks/ComputeDotnetBaseImageAndTag.cs @@ -44,7 +44,7 @@ public sealed class ComputeDotnetBaseImageAndTag : Microsoft.Build.Utilities.Tas /// If this is set to linux-musl-ARCH then we need to use `alpine` for all containers, and tag on `aot` or `extra` as necessary. /// [Required] - public string TargetRuntimeIdentifier { get; set; } + public string[] TargetRuntimeIdentifiers { get; set; } /// /// If a project is self-contained then it includes a runtime, and so the runtime-deps image should be used. @@ -84,7 +84,7 @@ public sealed class ComputeDotnetBaseImageAndTag : Microsoft.Build.Utilities.Tas FrameworkReferences.Length > 0 && FrameworkReferences.Any(x => x.ItemSpec.Equals("Microsoft.AspNetCore.App", StringComparison.OrdinalIgnoreCase)); - private bool IsMuslRid => TargetRuntimeIdentifier.StartsWith("linux-musl", StringComparison.Ordinal); + private bool IsMuslRid; private bool IsBundledRuntime => IsSelfContained; private bool RequiresInference => String.IsNullOrEmpty(UserBaseImage); @@ -99,7 +99,7 @@ public ComputeDotnetBaseImageAndTag() TargetFrameworkVersion = ""; ContainerFamily = ""; FrameworkReferences = []; - TargetRuntimeIdentifier = ""; + TargetRuntimeIdentifiers = []; UserBaseImage = ""; } @@ -113,16 +113,39 @@ public override bool Execute() } else { - var defaultRegistry = RegistryConstants.MicrosoftContainerRegistryDomain; - if (ComputeRepositoryAndTag(out var repository, out var tag)) + if (TargetRuntimeIdentiriersAreValid()) { - ComputedContainerBaseImage = $"{defaultRegistry}/{repository}:{tag}"; - LogInferencePerformedTelemetry($"{defaultRegistry}/{repository}", tag!); + var defaultRegistry = RegistryConstants.MicrosoftContainerRegistryDomain; + if (ComputeRepositoryAndTag(out var repository, out var tag)) + { + ComputedContainerBaseImage = $"{defaultRegistry}/{repository}:{tag}"; + LogInferencePerformedTelemetry($"{defaultRegistry}/{repository}", tag!); + } } return !Log.HasLoggedErrors; } } + private bool TargetRuntimeIdentiriersAreValid() + { + // For "linux-musl" RIDs we choose the alpine base image. + // And because we compute the base image only once, we need to ensure that all RIDs are "linux-musl" or none of them. + var muslRidsCount = TargetRuntimeIdentifiers.Count(rid => rid.StartsWith("linux-musl", StringComparison.Ordinal)); + if (muslRidsCount > 0) + { + if (muslRidsCount == TargetRuntimeIdentifiers.Length) + { + IsMuslRid = true; + } + else + { + Log.LogError(Resources.Strings.InvalidTargetRuntimeIdentifiers); + return false; + } + } + return true; + } + private string UbuntuCodenameForSDKVersion(SemanticVersion version) { if (version >= SemanticVersion.Parse("8.0.300")) @@ -314,14 +337,14 @@ private void LogNoInferencePerformedTelemetry() containerFamily = ContainerFamily; } } - var telemetryData = new InferenceTelemetryData(InferencePerformed: false, TargetFramework: ParseSemVerToMajorMinor(TargetFrameworkVersion), userBaseImage, userTag, containerFamily, GetTelemetryProjectType(), GetTelemetryPublishMode(), UsesInvariantGlobalization, TargetRuntimeIdentifier); + var telemetryData = new InferenceTelemetryData(InferencePerformed: false, TargetFramework: ParseSemVerToMajorMinor(TargetFrameworkVersion), userBaseImage, userTag, containerFamily, GetTelemetryProjectType(), GetTelemetryPublishMode(), UsesInvariantGlobalization, TargetRuntimeIdentifiers); LogTelemetryData(telemetryData); } private void LogInferencePerformedTelemetry(string imageName, string tag) { // for all inference use cases we will use .NET's images, so we can safely log name, tag, and family - var telemetryData = new InferenceTelemetryData(InferencePerformed: true, TargetFramework: ParseSemVerToMajorMinor(TargetFrameworkVersion), imageName, tag, String.IsNullOrEmpty(ContainerFamily) ? null : ContainerFamily, GetTelemetryProjectType(), GetTelemetryPublishMode(), UsesInvariantGlobalization, TargetRuntimeIdentifier); + var telemetryData = new InferenceTelemetryData(InferencePerformed: true, TargetFramework: ParseSemVerToMajorMinor(TargetFrameworkVersion), imageName, tag, String.IsNullOrEmpty(ContainerFamily) ? null : ContainerFamily, GetTelemetryProjectType(), GetTelemetryPublishMode(), UsesInvariantGlobalization, TargetRuntimeIdentifiers); LogTelemetryData(telemetryData); } @@ -342,7 +365,7 @@ private void LogTelemetryData(InferenceTelemetryData telemetryData) { nameof(telemetryData.ProjectType), telemetryData.ProjectType.ToString() }, { nameof(telemetryData.PublishMode), telemetryData.PublishMode.ToString() }, { nameof(telemetryData.IsInvariant), telemetryData.IsInvariant.ToString() }, - { nameof(telemetryData.TargetRuntime), telemetryData.TargetRuntime } + { nameof(telemetryData.TargetRuntimes), string.Join(";", telemetryData.TargetRuntimes) } }; Log.LogTelemetry("sdk/container/inference", telemetryProperties); } @@ -359,8 +382,8 @@ private void LogTelemetryData(InferenceTelemetryData telemetryData) /// Classifies the project into categories - currently only the broad categories of web/console are known. /// Categorizes the publish mode of the app - FDD, SC, Trimmed, AOT in rough order of complexity/container customization /// We make inference decisions on the invariant-ness of the project, so it's useful to track how often that is used. - /// Different RIDs change the inference calculation, so it's useful to know how different RIDs flow into the results of inference. - private record class InferenceTelemetryData(bool InferencePerformed, string TargetFramework, string? BaseImage, string? BaseImageTag, string? ContainerFamily, ProjectType ProjectType, PublishMode PublishMode, bool IsInvariant, string TargetRuntime); + /// Different RIDs change the inference calculation, so it's useful to know how different RIDs flow into the results of inference. + private record class InferenceTelemetryData(bool InferencePerformed, string TargetFramework, string? BaseImage, string? BaseImageTag, string? ContainerFamily, ProjectType ProjectType, PublishMode PublishMode, bool IsInvariant, string[] TargetRuntimes); private enum ProjectType { AspNetCore, diff --git a/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateImageIndex.cs b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateImageIndex.cs new file mode 100644 index 000000000000..0894686603d2 --- /dev/null +++ b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateImageIndex.cs @@ -0,0 +1,169 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.Build.Framework; +using Microsoft.Extensions.Logging; +using Microsoft.NET.Build.Containers.Logging; +using Microsoft.NET.Build.Containers.Resources; +using ILogger = Microsoft.Extensions.Logging.ILogger; +using Task = System.Threading.Tasks.Task; + +namespace Microsoft.NET.Build.Containers.Tasks; + +public sealed class CreateImageIndex : Microsoft.Build.Utilities.Task, ICancelableTask, IDisposable +{ + #region Parameters + /// + /// Manifests to include in the image index. + /// + [Required] + public ITaskItem[] GeneratedContainers { get; set; } + + /// + /// The registry to push the image index to. + /// + [Required] + public string OutputRegistry { get; set; } + + /// + /// The name of the output image index (manifest list) that will be pushed to the registry. + /// + [Required] + public string Repository { get; set; } + + /// + /// The tag to associate with the new image index (manifest list). + /// + [Required] + public string[] ImageTags { get; set; } + + /// + /// The generated image index (manifest list) in JSON format. + /// + [Output] + public string GeneratedImageIndex { get; set; } + + public CreateImageIndex() + { + GeneratedContainers = Array.Empty(); + OutputRegistry = string.Empty; + Repository = string.Empty; + ImageTags = Array.Empty(); + GeneratedImageIndex = string.Empty; + } + #endregion + + private readonly CancellationTokenSource _cancellationTokenSource = new(); + + public void Cancel() => _cancellationTokenSource.Cancel(); + + public void Dispose() + { + _cancellationTokenSource.Dispose(); + } + + public override bool Execute() + { + try + { + Task.Run(() => ExecuteAsync(_cancellationTokenSource.Token)).GetAwaiter().GetResult(); + } + catch (TaskCanceledException ex) + { + Log.LogWarningFromException(ex); + } + catch (OperationCanceledException ex) + { + Log.LogWarningFromException(ex); + } + return !Log.HasLoggedErrors; + } + + internal async Task ExecuteAsync(CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + + var images = ParseImages(); + if (Log.HasLoggedErrors) + { + return false; + } + + using MSBuildLoggerProvider loggerProvider = new(Log); + ILoggerFactory msbuildLoggerFactory = new LoggerFactory(new[] { loggerProvider }); + ILogger logger = msbuildLoggerFactory.CreateLogger(); + + logger.LogInformation(Strings.BuildingImageIndex, GetRepositoryAndTagsString(), string.Join(", ", images.Select(i => i.ManifestDigest))); + + try + { + (string imageIndex, string mediaType) = ImageIndexGenerator.GenerateImageIndex(images); + + GeneratedImageIndex = imageIndex; + + await PushToRemoteRegistry(GeneratedImageIndex, mediaType, logger, cancellationToken); + } + catch (ContainerHttpException e) + { + if (BuildEngine != null) + { + Log.LogErrorFromException(e, true); + } + } + catch (ArgumentException ex) + { + Log.LogErrorFromException(ex); + } + + return !Log.HasLoggedErrors; + } + + private ImageInfo[] ParseImages() + { + var images = new ImageInfo[GeneratedContainers.Length]; + + for (int i = 0; i < GeneratedContainers.Length; i++) + { + var unparsedImage = GeneratedContainers[i]; + + string config = unparsedImage.GetMetadata("Configuration"); + string manifestDigest = unparsedImage.GetMetadata("ManifestDigest"); + string manifest = unparsedImage.GetMetadata("Manifest"); + string manifestMediaType = unparsedImage.GetMetadata("ManifestMediaType"); + + if (string.IsNullOrEmpty(config) || string.IsNullOrEmpty(manifestDigest) || string.IsNullOrEmpty(manifest)) + { + Log.LogError(Strings.InvalidImageMetadata, unparsedImage.ItemSpec); + break; + } + + images[i] = new ImageInfo + { + Config = config, + ManifestDigest = manifestDigest, + Manifest = manifest, + ManifestMediaType = manifestMediaType + }; + } + + return images; + } + + private async Task PushToRemoteRegistry(string manifestList, string mediaType, ILogger logger, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + Debug.Assert(ImageTags.Length > 0); + var registry = new Registry(OutputRegistry, logger, RegistryMode.Push); + await registry.PushManifestListAsync(Repository, ImageTags, manifestList, mediaType, cancellationToken).ConfigureAwait(false); + logger.LogInformation(Strings.ImageIndexUploadedToRegistry, GetRepositoryAndTagsString(), OutputRegistry); + } + + private string? _repositoryAndTagsString = null; + + private string GetRepositoryAndTagsString() + { + _repositoryAndTagsString ??= $"{Repository}:{string.Join(", ", ImageTags)}"; + return _repositoryAndTagsString; + } +} diff --git a/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.Interface.cs b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.Interface.cs index 4f69658c66d2..3da5135b9b07 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.Interface.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.Interface.cs @@ -173,6 +173,9 @@ partial class CreateNewImage [Output] public string GeneratedArchiveOutputPath { get; set; } + [Output] + public string GeneratedContainerMediaType { get; set; } + [Output] public ITaskItem[] GeneratedContainerNames { get; set; } @@ -208,6 +211,7 @@ public CreateNewImage() GeneratedContainerManifest = ""; GeneratedContainerDigest = ""; GeneratedArchiveOutputPath = ""; + GeneratedContainerMediaType = ""; GeneratedContainerNames = Array.Empty(); GenerateLabels = false; diff --git a/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.cs b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.cs index aa81ae801953..34c4984ae0bb 100644 --- a/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.cs +++ b/src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateNewImage.cs @@ -174,6 +174,7 @@ internal async Task ExecuteAsync(CancellationToken cancellationToken) GeneratedContainerConfiguration = builtImage.Config; GeneratedContainerDigest = builtImage.Manifest.GetDigest(); GeneratedArchiveOutputPath = ArchiveOutputPath; + GeneratedContainerMediaType = builtImage.ManifestMediaType; GeneratedContainerNames = destinationImageReference.FullyQualifiedImageNames().Select(name => new Microsoft.Build.Utilities.TaskItem(name)).ToArray(); switch (destinationImageReference.Kind) diff --git a/src/Containers/packaging/build/Microsoft.NET.Build.Containers.props b/src/Containers/packaging/build/Microsoft.NET.Build.Containers.props index 22ec95911a7b..82178233188c 100644 --- a/src/Containers/packaging/build/Microsoft.NET.Build.Containers.props +++ b/src/Containers/packaging/build/Microsoft.NET.Build.Containers.props @@ -15,6 +15,7 @@ + diff --git a/src/Containers/packaging/build/Microsoft.NET.Build.Containers.targets b/src/Containers/packaging/build/Microsoft.NET.Build.Containers.targets index 11589947cc51..e9e52d5dfece 100644 --- a/src/Containers/packaging/build/Microsoft.NET.Build.Containers.targets +++ b/src/Containers/packaging/build/Microsoft.NET.Build.Containers.targets @@ -34,14 +34,21 @@ + $(RuntimeIdentifiers) - $(RuntimeIdentifier) - linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) + $(RuntimeIdentifier) + linux-$(NETCoreSdkPortableRuntimeIdentifier.Split('-')[1]) + <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(ContainerBaseImage)' == ''">true <_ContainerIsUsingMicrosoftDefaultImages Condition="'$(ContainerBaseImage)' != ''">false + + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> + <_TargetRuntimeIdentifiers Include="$(ContainerRuntimeIdentifier)" Condition="'$(ContainerRuntimeIdentifiers)' == ''" /> + + + + + <_TargetRuntimeIdentifiers Remove ="$(_TargetRuntimeIdentifiers)" /> + @@ -99,9 +110,9 @@ - + - + @@ -229,10 +240,8 @@ - - + $(NetCoreRoot) dotnet @@ -271,7 +280,133 @@ + + + + + $(GeneratedContainerManifest) + $(GeneratedContainerConfiguration) + $(GeneratedContainerDigest) + $(GeneratedContainerMediaType) + + + + + + + + + <_rids Include="$(ContainerRuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' != ''" /> + <_rids Include="$(RuntimeIdentifiers)" Condition="'$(ContainerRuntimeIdentifiers)' == '' and '$(RuntimeIdentifiers)' != ''" /> + <_InnerBuild + Include="$(MSBuildProjectFullPath)" + AdditionalProperties=" + ContainerRuntimeIdentifier=%(_rids.Identity); + RuntimeIdentifier=%(_rids.Identity); + ContainerBaseRegistry=$(ContainerBaseRegistry); + ContainerBaseName=$(ContainerBaseName); + ContainerBaseTag=$(ContainerBaseTag); + ContainerRegistry=$(ContainerRegistry); + _ContainerImageTags=@(ContainerImageTags, ';'); + ContainerRepository=$(ContainerRepository); + ContainerWorkingDirectory=$(ContainerWorkingDirectory); + _ContainerEntrypoint=@(ContainerEntrypoint, ';'); + _ContainerEntrypointArgs=@(ContainerEntrypointArgs, ';'); + _ContainerAppCommand=@(ContainerAppCommand, ';'); + _ContainerAppCommandArgs=@(ContainerAppCommandArgs, ';'); + ContainerAppCommandInstruction=$(ContainerAppCommandInstruction); + _ContainerDefaultArgs=@(ContainerDefaultArgs, ';'); + _ContainerLabel=@(ContainerLabel->'%(Identity):%(Value)'); + _ContainerPort=@(ContainerPort->'%(Identity):%(Type)'); + _ContainerEnvironmentVariables=@(ContainerEnvironmentVariable->'%(Identity):%(Value)'); + ContainerUser=$(ContainerUser); + ContainerGenerateLabels=$(ContainerGenerateLabels); + ContainerGenerateLabelsImageBaseDigest=$(ContainerGenerateLabelsImageBaseDigest) + "/> + <_rids Remove ="$(_rids)" /> + + + + + + + + <_SkipCreateImageIndex>false + <_SkipCreateImageIndex Condition="'$(ContainerRegistry)' == ''">true + + + + + + + + + + + + + + + + + + <_ParsedContainerLabel + Condition="'$(_ContainerLabel)' != ':'" + Include="$(_ContainerLabel)"/> + + + <_ParsedContainerPort + Condition="'$(_ContainerPort)' != ':'" + Include="$(_ContainerPort)"/> + + + <_ParsedContainerEnvironmentVariables + Condition="'$(_ContainerEnvironmentVariables)' != ':'" + Include="$(_ContainerEnvironmentVariables)"/> + + + + + $([System.IO.Path]::Combine($(ContainerArchiveOutputPath), $(ContainerRepository)-$(ContainerRuntimeIdentifier).tar.gz)) + + + + + <_IsMultiTFMBuild Condition="'$(TargetFrameworks)' != '' and '$(TargetFramework)' == ''">true + <_IsMultiRIDBuild Condition="'$(BuildingInsideVisualStudio)' != 'true' and (('$(RuntimeIdentifiers)' != '' and '$(RuntimeIdentifier)' == '') or ('$(ContainerRuntimeIdentifiers)' != '' and '$(ContainerRuntimeIdentfier)' == ''))">true + <_IsSingleRIDBuild Condition="'$(_IsMultiRIDBuild)' == ''">true + + + + + + + + + diff --git a/src/Layout/redist/targets/GenerateLayout.targets b/src/Layout/redist/targets/GenerateLayout.targets index 84838632c10f..3160feb51095 100644 --- a/src/Layout/redist/targets/GenerateLayout.targets +++ b/src/Layout/redist/targets/GenerateLayout.targets @@ -178,7 +178,8 @@ BeforeTargets="Build"> netcoreapp3.1 - net9.0 + $(NetCurrent) + net9.0 $(NuGetPackageRoot)/microsoft.testplatform.cli/$(MicrosoftTestPlatformCLIPackageVersion)/contentFiles/any/$(TestCliNuGetDirectoryTargetFramework)/ diff --git a/src/Layout/tool_fsharp/tool_fsc.csproj b/src/Layout/tool_fsharp/tool_fsc.csproj index d0e032fef721..3131d245407b 100644 --- a/src/Layout/tool_fsharp/tool_fsc.csproj +++ b/src/Layout/tool_fsharp/tool_fsc.csproj @@ -33,6 +33,7 @@ Shipping Release net9.0 + $(NetCurrent) (); diff --git a/src/SourceBuild/content/eng/finish-source-only.proj b/src/SourceBuild/content/eng/finish-source-only.proj index 77c5d5e262c0..df0ef28dde91 100644 --- a/src/SourceBuild/content/eng/finish-source-only.proj +++ b/src/SourceBuild/content/eng/finish-source-only.proj @@ -170,8 +170,7 @@ BeforeTargets="Build" DependsOnTargets=" CheckIfPrebuiltsExistToPack; - CreatePrebuiltsTarballIfPrebuiltsExist; - ErrorOnPrebuilts"/> + CreatePrebuiltsTarballIfPrebuiltsExist"/> @@ -202,11 +201,12 @@ - diff --git a/src/SourceBuild/content/repo-projects/Directory.Build.targets b/src/SourceBuild/content/repo-projects/Directory.Build.targets index a954493e82c7..649a2742b218 100644 --- a/src/SourceBuild/content/repo-projects/Directory.Build.targets +++ b/src/SourceBuild/content/repo-projects/Directory.Build.targets @@ -756,6 +756,8 @@ + + diff --git a/src/SourceBuild/content/repo-projects/scenario-tests.proj b/src/SourceBuild/content/repo-projects/scenario-tests.proj index ea2150209de3..2bf89ec6dcfd 100644 --- a/src/SourceBuild/content/repo-projects/scenario-tests.proj +++ b/src/SourceBuild/content/repo-projects/scenario-tests.proj @@ -8,6 +8,10 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsTestResultsDir)', 'scenario-tests')) $([MSBuild]::NormalizePath('$(SrcDir)', 'sdk', 'NuGet.config')) $(ScenarioTestsArtifactsDir)NuGet.config + + + $(BuildArgs) /p:NetCurrent=$(NetCurrent) + $(TestCommand) /p:NetCurrent=$(NetCurrent) diff --git a/src/SourceBuild/patches/arcade/0001-Update to .NET 10 SDK and TFM to net10.0 in arcade.patch b/src/SourceBuild/patches/arcade/0001-Update to .NET 10 SDK and TFM to net10.0 in arcade.patch deleted file mode 100644 index 4b49c0b4ed4e..000000000000 --- a/src/SourceBuild/patches/arcade/0001-Update to .NET 10 SDK and TFM to net10.0 in arcade.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Viktor Hofer -Date: Wed, 6 Nov 2024 16:43:26 +0000 -Subject: [PATCH] Update to .NET 10 SDK and TFM to net10.0 in arcade - -Backport: https://github.com/dotnet/arcade/pull/15221 ---- - Directory.Build.props | 5 +++++ - global.json | 4 ++-- - .../src/build/Packaging.targets | 4 ++++ - .../Sdk/tools/dotnet-cli/DotNetCli.props | 2 +- - .../Sdk/tools/xunit-runner/XUnitRunner.targets | 2 +- - .../Microsoft.DotNet.XliffTasks.csproj | 4 ---- - tests/UnitTests.proj | 5 +++-- - 7 files changed, 16 insertions(+), 10 deletions(-) - -diff --git a/Directory.Build.props b/Directory.Build.props -index 9d84f1dc6..b25de0091 100644 ---- a/Directory.Build.props -+++ b/Directory.Build.props -@@ -17,4 +17,9 @@ - - $(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904 -+ -+ net10.0 -+ net9.0 -+ $(NetCurrent) -+ $(NetToolCurrent) - - -diff --git a/global.json b/global.json -index af88ae5bf..904f8d03d 100644 ---- a/global.json -+++ b/global.json -@@ -1,9 +1,9 @@ - { - "sdk": { -- "version": "9.0.100", -+ "version": "10.0.100-alpha.1.24551.9", - "rollForward": "latestFeature" - }, - "tools": { -- "dotnet": "9.0.100" -+ "dotnet": "10.0.100-alpha.1.24551.9" - }, - "msbuild-sdks": { -diff --git a/src/Microsoft.DotNet.Build.Tasks.Packaging/src/build/Packaging.targets b/src/Microsoft.DotNet.Build.Tasks.Packaging/src/build/Packaging.targets -index b94b6736d..e0fadabb2 100644 ---- a/src/Microsoft.DotNet.Build.Tasks.Packaging/src/build/Packaging.targets -+++ b/src/Microsoft.DotNet.Build.Tasks.Packaging/src/build/Packaging.targets -@@ -955,4 +955,8 @@ - @(NETCoreApp90RIDs) - -+ -+ -+ @(NETCoreApp100RIDs) -+ - - -diff --git a/src/Microsoft.DotNet.Helix/Sdk/tools/dotnet-cli/DotNetCli.props b/src/Microsoft.DotNet.Helix/Sdk/tools/dotnet-cli/DotNetCli.props -index 63552b1ed..15d5a63aa 100644 ---- a/src/Microsoft.DotNet.Helix/Sdk/tools/dotnet-cli/DotNetCli.props -+++ b/src/Microsoft.DotNet.Helix/Sdk/tools/dotnet-cli/DotNetCli.props -@@ -4,5 +4,5 @@ - - false -- 9.0.0 -+ 10.0.0-alpha.2.24531.4 - runtime - $(BundledNETCoreAppPackageVersion) -diff --git a/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets b/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets -index 0ae8d1482..9312e2672 100644 ---- a/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets -+++ b/src/Microsoft.DotNet.Helix/Sdk/tools/xunit-runner/XUnitRunner.targets -@@ -3,5 +3,5 @@ - - -- net9.0 -+ net10.0 - netcoreapp2.0 - -diff --git a/src/Microsoft.DotNet.XliffTasks/Microsoft.DotNet.XliffTasks.csproj b/src/Microsoft.DotNet.XliffTasks/Microsoft.DotNet.XliffTasks.csproj -index 1059c3bc4..165a4a7d5 100644 ---- a/src/Microsoft.DotNet.XliffTasks/Microsoft.DotNet.XliffTasks.csproj -+++ b/src/Microsoft.DotNet.XliffTasks/Microsoft.DotNet.XliffTasks.csproj -@@ -2,8 +2,4 @@ - - -- - $(NetToolMinimum);$(NetFrameworkToolCurrent) - true -diff --git a/tests/UnitTests.proj b/tests/UnitTests.proj -index 910ccf3b0..ad85e4bac 100644 ---- a/tests/UnitTests.proj -+++ b/tests/UnitTests.proj -@@ -117,8 +117,9 @@ - - -- -+ -+ - - diff --git a/src/SourceBuild/patches/symreader/0001-Target-NetCurrent-property.patch b/src/SourceBuild/patches/symreader/0001-Target-NetCurrent-property.patch new file mode 100644 index 000000000000..6a4031e9158d --- /dev/null +++ b/src/SourceBuild/patches/symreader/0001-Target-NetCurrent-property.patch @@ -0,0 +1,23 @@ +From 826f90739ccf6f99d6481253ec2feac07d96f1a4 Mon Sep 17 00:00:00 2001 +From: Matt Thalman +Date: Wed, 18 Dec 2024 16:20:33 -0600 +Subject: [PATCH] Target NetCurrent property (#331) + +Backport: https://github.com/dotnet/symreader/pull/331 + +--- + src/Microsoft.DiaSymReader/Microsoft.DiaSymReader.csproj | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Microsoft.DiaSymReader/Microsoft.DiaSymReader.csproj b/src/Microsoft.DiaSymReader/Microsoft.DiaSymReader.csproj +index c635aee..b920f9c 100644 +--- a/src/Microsoft.DiaSymReader/Microsoft.DiaSymReader.csproj ++++ b/src/Microsoft.DiaSymReader/Microsoft.DiaSymReader.csproj +@@ -1,6 +1,6 @@ +  + +- netstandard2.0;net9.0 ++ netstandard2.0;$(NetCurrent) + true + true + true diff --git a/src/SourceBuild/patches/wpf/0001-condition-winforms-private-package-tfm.patch b/src/SourceBuild/patches/wpf/0001-condition-winforms-private-package-tfm.patch new file mode 100644 index 000000000000..9ada10a40249 --- /dev/null +++ b/src/SourceBuild/patches/wpf/0001-condition-winforms-private-package-tfm.patch @@ -0,0 +1,23 @@ +From 0a9987a2d861e38b3d4505ea62ea634616ad1c29 Mon Sep 17 00:00:00 2001 +From: Viktor Hofer +Date: Thu, 19 Dec 2024 22:48:00 +0100 +Subject: [PATCH] Fix winforms TFM when building inside the VMR + +Backport: https://github.com/dotnet/wpf/pull/10197 + +--- + eng/WpfArcadeSdk/tools/SdkReferences.targets | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/eng/WpfArcadeSdk/tools/SdkReferences.targets b/eng/WpfArcadeSdk/tools/SdkReferences.targets +index 6bbded2bc..64777d4d4 100644 +--- a/eng/WpfArcadeSdk/tools/SdkReferences.targets ++++ b/eng/WpfArcadeSdk/tools/SdkReferences.targets +@@ -125,6 +125,7 @@ + And $([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '3.0')) "> + + ++ <_WinFormsTargetFrameworkVersion Condition="'$(_WinFormsTargetFrameworkVersion)' == '' and '$(DotNetBuildOrchestrator)' == 'true'">$(NetCurrent) + <_WinFormsTargetFrameworkVersion Condition="'$(_WinFormsTargetFrameworkVersion)' == ''">$(_targetFrameworkRoot) + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets index 84885ab5514a..c38f4e38e9d5 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets @@ -22,8 +22,12 @@ Copyright (c) .NET Foundation. All rights reserved. + + + Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' And '$(TargetPlatformIdentifier)' == 'Windows' + And ('$(Language)' != 'C++' Or '$(IncludeWindowsSDKRefFrameworkReferences)' == 'true')"> diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props index 2cfe0e4e20e4..7d9a8585a230 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.props @@ -170,4 +170,10 @@ Copyright (c) .NET Foundation. All rights reserved. + + + diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/NUnit-VisualBasic-Item/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/NUnit-VisualBasic-Item/.template.config/localize/templatestrings.it.json index 997b0d40cba1..938c218e8331 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/NUnit-VisualBasic-Item/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/NUnit-VisualBasic-Item/.template.config/localize/templatestrings.it.json @@ -1,6 +1,6 @@ { "author": "Aleksei Kharlov aka halex2005 (codeofclimber.ru)", "name": "Elemento di test NUnit 3", - "description": "Consente di creare una nuova classe di test NUnit", + "description": "Crea una nuova classe di test NUnit", "postActions/openInEditor/description": "Apre la classe di fixture di test creata nell'editor" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.cs.json index fe41e5a3650a..333f70ca439e 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.cs.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Soubor řešení", "description": "Vytvořit prázdné řešení neobsahující projekty", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Zvolte formát souboru řešení: sln nebo slnx.", + "symbols/Format/displayName": "Formát souboru řešení", + "symbols/Format/choices/sln/description": "Soubor řešení", + "symbols/Format/choices/sln/displayName": "Formát .sln", + "symbols/Format/choices/slnx/description": "Soubor řešení XML", + "symbols/Format/choices/slnx/displayName": "Formát .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.de.json index b393ed7bbbd7..5619c1c6ab7a 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.de.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Projektmappendatei", "description": "Erstellt eine leere Projektmappe, die keine Projekte enthält", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Wählen Sie das Format für die Projektmappendatei aus: SLN oder SLNX.", + "symbols/Format/displayName": "Projektmappendateiformat", + "symbols/Format/choices/sln/description": "Projektmappendatei", + "symbols/Format/choices/sln/displayName": "SLN-Format", + "symbols/Format/choices/slnx/description": "XML-Projektmappendatei", + "symbols/Format/choices/slnx/displayName": "SLNX-Format" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.es.json index 9f6203851904..25264844d4b2 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.es.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Archivo de la solución", "description": "Crea una solución vacía sin proyectos.", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Elija el formato del archivo de solución: sln o slnx.", + "symbols/Format/displayName": "Formato de archivo de solución", + "symbols/Format/choices/sln/description": "Archivo de solución", + "symbols/Format/choices/sln/displayName": "formato de .sln", + "symbols/Format/choices/slnx/description": "Archivo de solución XML", + "symbols/Format/choices/slnx/displayName": "formato .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.fr.json index 1b30d59b7781..ea4b3d6c81b2 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.fr.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Fichier solution", "description": "Créer une solution vide ne contenant aucun projet", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Choisissez le format du fichier de solution : sln ou slnx.", + "symbols/Format/displayName": "Format du fichier de solution", + "symbols/Format/choices/sln/description": "Fichier de solutions", + "symbols/Format/choices/sln/displayName": "Format .sln", + "symbols/Format/choices/slnx/description": "Fichier de solution XML", + "symbols/Format/choices/slnx/displayName": "Format .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.it.json index 83820bbb5df5..8491005f76c6 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.it.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "File di soluzione", "description": "Crea una soluzione vuota che non contiene alcun progetto", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Scegliere il formato per il file di soluzione: sln o slnx.", + "symbols/Format/displayName": "Formato del file di soluzione", + "symbols/Format/choices/sln/description": "File di soluzione", + "symbols/Format/choices/sln/displayName": "formato .sln", + "symbols/Format/choices/slnx/description": "File di soluzione XML", + "symbols/Format/choices/slnx/displayName": "formato .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ja.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ja.json index 95391ab9c0a1..c7b1f52f31fc 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ja.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ja.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "ソリューション ファイル", "description": "プロジェクトを含まない空のソリューションを作成します。", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "ソリューション ファイルの形式を選択してください: sln または slnx。", + "symbols/Format/displayName": "ソリューション ファイル形式", + "symbols/Format/choices/sln/description": "ソリューション ファイル", + "symbols/Format/choices/sln/displayName": ".sln 形式", + "symbols/Format/choices/slnx/description": "XML ソリューション ファイル", + "symbols/Format/choices/slnx/displayName": ".slnx 形式" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ko.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ko.json index 372dcc2e6aec..beffb6e2d326 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ko.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ko.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "솔루션 파일", "description": "프로젝트 없는 빈 솔루션 만들기", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "솔루션 파일의 형식(sln 또는 slnx)을 선택합니다.", + "symbols/Format/displayName": "솔루션 파일 형식", + "symbols/Format/choices/sln/description": "솔루션 파일", + "symbols/Format/choices/sln/displayName": ".sln 형식", + "symbols/Format/choices/slnx/description": "XML 솔루션 파일", + "symbols/Format/choices/slnx/displayName": ".slnx 형식" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pl.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pl.json index f573cd5ff73b..ea36b2bc3a63 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pl.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pl.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Plik rozwiązania", "description": "Utwórz puste rozwiązanie niezawierające żadnych projektów", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Wybierz format dla pliku rozwiązania: sln lub slnx.", + "symbols/Format/displayName": "Format pliku rozwiązania", + "symbols/Format/choices/sln/description": "Plik rozwiązania", + "symbols/Format/choices/sln/displayName": "Format .sln", + "symbols/Format/choices/slnx/description": "Plik rozwiązania w formacie XML", + "symbols/Format/choices/slnx/displayName": "Format .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pt-BR.json index 319705608ecb..d8d3854bf42f 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.pt-BR.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Arquivo de Solução", "description": "Uma solução vazia sem projetos", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Escolha o formato do arquivo de solução: sln ou slnx.", + "symbols/Format/displayName": "Formato do arquivo de solução", + "symbols/Format/choices/sln/description": "Arquivo de solução", + "symbols/Format/choices/sln/displayName": "Formato .sln", + "symbols/Format/choices/slnx/description": "Arquivo de Solução XML", + "symbols/Format/choices/slnx/displayName": "Formato .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ru.json index 92477412bc1c..a5f5d5301da2 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.ru.json @@ -2,10 +2,10 @@ "author": "Майкрософт", "name": "Файл решения", "description": "Создание пустого решения, не содержащего проектов", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Выберите формат файла решения: sln или slnx.", + "symbols/Format/displayName": "Формат файла решения", + "symbols/Format/choices/sln/description": "Файл решения", + "symbols/Format/choices/sln/displayName": "Формат .sln", + "symbols/Format/choices/slnx/description": "XML-файл решения", + "symbols/Format/choices/slnx/displayName": "Формат .slnx" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.tr.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.tr.json index e3cd9702fdd6..8132511a7326 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.tr.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.tr.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "Çözüm Dosyası", "description": "Hiçbir proje içermeyen boş bir çözüm oluştur", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "Çözüm dosyasının biçimini seçin: sln veya slnx.", + "symbols/Format/displayName": "Çözüm dosyası biçimi", + "symbols/Format/choices/sln/description": "Çözüm dosyası", + "symbols/Format/choices/sln/displayName": ".sln biçimi", + "symbols/Format/choices/slnx/description": "XML Çözüm dosyası", + "symbols/Format/choices/slnx/displayName": ".slnx biçimi" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hans.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hans.json index 2ae629c21472..eeda38a2af28 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hans.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hans.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "解决方案文件", "description": "创建不包含项目的空解决方案", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "选择解决方案文件的格式: sln 或 slnx。", + "symbols/Format/displayName": "解决方案文件格式", + "symbols/Format/choices/sln/description": "解决方案文件", + "symbols/Format/choices/sln/displayName": ".sln 格式", + "symbols/Format/choices/slnx/description": "XML 解决方案文件", + "symbols/Format/choices/slnx/displayName": ".slnx 格式" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hant.json index 93db3e86a6d0..42f07a6c8cbb 100644 --- a/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ItemTemplates/content/Solution/.template.config/localize/templatestrings.zh-Hant.json @@ -2,10 +2,10 @@ "author": "Microsoft", "name": "方案檔", "description": "建立不含專案的空白方案", - "symbols/Format/description": "Choose the format for the solution file: sln or slnx.", - "symbols/Format/displayName": "Solution file format", - "symbols/Format/choices/sln/description": "Solution file", - "symbols/Format/choices/sln/displayName": ".sln format", - "symbols/Format/choices/slnx/description": "XML Solution file", - "symbols/Format/choices/slnx/displayName": ".slnx format" + "symbols/Format/description": "選擇解決方案檔案的格式: sln 或 slnx。", + "symbols/Format/displayName": "解決方案檔案格式", + "symbols/Format/choices/sln/description": "解決方案檔案", + "symbols/Format/choices/sln/displayName": ".sln 格式", + "symbols/Format/choices/slnx/description": "XML 解決方案檔案", + "symbols/Format/choices/slnx/displayName": ".slnx 格式" } \ No newline at end of file diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.cs.json index 90949e4d4a2f..20a6307d12b3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.cs.json @@ -4,8 +4,8 @@ "description": "Projekt obsahující testy MSTest, který se dá spustit na .NET v systémech Windows, Linux a MacOS.", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (jenom Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.es.json index 1787687b1e97..0505b2aa395d 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", @@ -18,7 +18,7 @@ "symbols/Framework/choices/net6.0-windows/description": ".NET 6 (solo Windows)", "symbols/Framework/choices/netcoreapp3.1/description": ".NET Core 3.1", "symbols/Framework/choices/net481/description": ".NET Framework 4.8.1", - "symbols/Framework/choices/net48/description": ".NET Framework 4.8", + "symbols/Framework/choices/net48/description": ".NET Framework 4.8", "symbols/Framework/choices/net472/description": ".NET Framework 4.7.2", "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.fr.json index 92df5d07b578..3df256509dea 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.fr.json @@ -4,7 +4,7 @@ "description": "Un projet qui contient des tests MSTest pouvant être exécutés sur .NET sous Windows, Linux et MacOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows uniquement)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.it.json index 0ecc964a2b5b..67082fef3d18 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.it.json @@ -3,7 +3,7 @@ "name": "Progetto di test MSTest", "description": "Progetto che contiene i test MSTest eseguibili in .NET in Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Ignora il framework di destinazione", - "symbols/TargetFrameworkOverride/displayName": "Sostituisci framework di destinazione", + "symbols/TargetFrameworkOverride/displayName": "Override del framework di destinazione", "symbols/Framework/description": "Il framework di destinazione per il progetto.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", @@ -24,7 +24,7 @@ "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.", - "symbols/skipRestore/displayName": "Ignora ripristino", + "symbols/skipRestore/displayName": "Salta ripristino", "symbols/langVersion/description": "Imposta la proprietà LangVersion nel file di progetto creato", "symbols/langVersion/displayName": "Versione del linguaggio", "symbols/UseMSTestSdk/description": "Usare lo stile del progetto MSTest.Sdk. Per altre informazioni, vedere https://aka.ms/mstest/sdk", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pl.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pl.json index c9fdc148bd48..d8584131ae72 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pl.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pl.json @@ -3,9 +3,9 @@ "name": "MSTest — projekt testowy", "description": "Projekt zawierający testy MSTest, które mogą być uruchamiane na platformie .NET w systemach Windows, Linux i MacOS.", "symbols/TargetFrameworkOverride/description": "Zastępuje platformę docelową", - "symbols/TargetFrameworkOverride/displayName": "Odrzucenie platformy docelowej", + "symbols/TargetFrameworkOverride/displayName": "Zastąpienie struktury docelowej", "symbols/Framework/description": "Platforma docelowa dla tego projektu.", - "symbols/Framework/displayName": "Platforma", + "symbols/Framework/displayName": "Struktura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (tylko system Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json index 292ace6ccbdd..c1b64cdd822b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,7 +4,7 @@ "description": "Um projeto que contém testes do MSTest que podem ser executados no .NET no Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (somente Windows)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.ru.json index 928e28705747..5a9482179d1f 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.ru.json @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 55a1df310c93..6960dbd0882b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 MacOS 版的 .NET 上執行的 MSTest 測試的專案。", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (僅限 Windows)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.cs.json index 0a7e1c4ce3b6..12fad66b02d8 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.cs.json @@ -4,8 +4,8 @@ "description": "Projekt obsahující testy MSTest, který se dá spustit na .NET v systémech Windows, Linux a MacOS.", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (jenom Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.de.json index e7b25fccb442..b47694470873 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.de.json @@ -3,7 +3,7 @@ "name": "MSTest-Testprojekt", "description": "Ein Projekt, das MSTest-Tests enthält, die auf .NET unter Windows, Linux und macOS ausgeführt werden können.", "symbols/TargetFrameworkOverride/description": "Überschreibt das Zielframework", - "symbols/TargetFrameworkOverride/displayName": "Überschreibung des Zielframeworks", + "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.es.json index 85a050607356..1a2375af74a0 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", @@ -18,7 +18,7 @@ "symbols/Framework/choices/net6.0-windows/description": ".NET 6 (solo Windows)", "symbols/Framework/choices/netcoreapp3.1/description": ".NET Core 3.1", "symbols/Framework/choices/net481/description": ".NET Framework 4.8.1", - "symbols/Framework/choices/net48/description": ".NET Framework 4.8", + "symbols/Framework/choices/net48/description": ".NET Framework 4.8", "symbols/Framework/choices/net472/description": ".NET Framework 4.7.2", "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.fr.json index 4a34be376d5c..ec6d1b3fbfb0 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.fr.json @@ -4,7 +4,7 @@ "description": "Un projet qui contient des tests MSTest pouvant être exécutés sur .NET sous Windows, Linux et MacOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows uniquement)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", @@ -38,7 +38,7 @@ "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Couverture du code Microsoft", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "Sélectionnez le profil d’extensions du Kit de développement logiciel (SDK) lors de l’utilisation de l’exécuteur MSTest. Plus d’informations sur https://aka.ms/mstest/sdk/extensions-profile", - "symbols/ExtensionsProfile/displayName": "Test du profil d’extensions", + "symbols/ExtensionsProfile/displayName": "Test du profil des extensions", "symbols/ExtensionsProfile/choices/Default/description": "Profil d’extensions par défaut (recommandé)", "symbols/ExtensionsProfile/choices/Default/displayName": "Par défaut", "symbols/ExtensionsProfile/choices/None/description": "Aucune extension n’est activée", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.it.json index cf1d0c23d6d2..7788268f2615 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.it.json @@ -30,7 +30,7 @@ "symbols/UseMSTestSdk/description": "Usare lo stile del progetto MSTest.Sdk. Per altre informazioni, vedere https://aka.ms/mstest/sdk", "symbols/UseMSTestSdk/displayName": "Usa MSTest.Sdk", "symbols/TestRunner/description": "Selezionare lo strumento di esecuzione/la piattaforma. Per altre informazioni, vedere https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "Test runner", + "symbols/TestRunner/displayName": "Test Runner", "symbols/TestRunner/choices/MSTest/description": "Usa MSTest Runner (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "Usa la piattaforma VSTest", "symbols/CoverageTool/description": "Strumento di copertura da usare per il progetto.", @@ -40,7 +40,7 @@ "symbols/ExtensionsProfile/description": "Selezionare il profilo delle estensioni SDK quando si usa MSTest Runner. Per altre informazioni, vedere https://aka.ms/mstest/sdk/extensions-profile", "symbols/ExtensionsProfile/displayName": "Test del profilo delle estensioni", "symbols/ExtensionsProfile/choices/Default/description": "Profilo estensioni predefinito (scelta consigliata)", - "symbols/ExtensionsProfile/choices/Default/displayName": "Predefinita", + "symbols/ExtensionsProfile/choices/Default/displayName": "Impostazione predefinita", "symbols/ExtensionsProfile/choices/None/description": "Nessuna estensione abilitata", "symbols/ExtensionsProfile/choices/None/displayName": "Nessuno", "symbols/ExtensionsProfile/choices/AllMicrosoft/description": "Abilita tutte le estensioni spedite da Microsoft (incluse le estensioni con una licenza restrittiva)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.pt-BR.json index 3674eb49ec57..2796b853e55a 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.pt-BR.json @@ -3,8 +3,8 @@ "name": "Projeto de Teste MSTest", "description": "Um projeto que contém testes do MSTest que podem ser executados no .NET no Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", - "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (somente Windows)", @@ -23,8 +23,8 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", - "symbols/skipRestore/displayName": "Ignorar restauração", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", + "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", "symbols/UseMSTestSdk/description": "Use o estilo de projeto MSTest.Sdk. Mais informações em https://aka.ms/mstest/sdk", @@ -34,7 +34,7 @@ "symbols/TestRunner/choices/MSTest/description": "Usar o MSTest Runner (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "Usar a plataforma VSTest", "symbols/CoverageTool/description": "A ferramenta de cobertura a ser usada para o projeto.", - "symbols/CoverageTool/displayName": "Ferramenta de cobertura", + "symbols/CoverageTool/displayName": "Ferramenta Cobertura", "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Cobertura de Código da Microsoft", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "Selecione o perfil de extensões do SDK ao usar o Executor do MSTest. Mais informações em https://aka.ms/mstest/sdk/extensions-profile", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.ru.json index 85064d1f3673..9b4e1e651204 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.ru.json @@ -23,18 +23,18 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", "symbols/UseMSTestSdk/description": "Используйте стиль проекта MSTest.Sdk. Дополнительные сведения на https://aka.ms/mstest/sdk", "symbols/UseMSTestSdk/displayName": "Использовать MSTest.Sdk", "symbols/TestRunner/description": "Выберите средство выполнения тестов или платформу. Дополнительные сведения на https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "Test Runner", + "symbols/TestRunner/displayName": "Средство выполнения тестов", "symbols/TestRunner/choices/MSTest/description": "Используйте MSTest Runner (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "Используйте платформу VSTest", "symbols/CoverageTool/description": "Инструмент покрытия, который следует использовать для проекта.", - "symbols/CoverageTool/displayName": "Средство охвата", + "symbols/CoverageTool/displayName": "Средство оценки объема протестированного кода", "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Покрытие кода (Майкрософт)", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "Выберите профиль расширений SDK при использовании MSTest Runner. Дополнительные сведения на https://aka.ms/mstest/sdk/extensions-profile", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.tr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.tr.json index f0db9accfa26..277c77b3f8e3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.tr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.tr.json @@ -28,7 +28,7 @@ "symbols/langVersion/description": "Oluşturulan proje dosyasında LangVersion özelliğini ayarlar", "symbols/langVersion/displayName": "Dil sürümü", "symbols/UseMSTestSdk/description": "MSTest.Sdk proje stilini kullanın.. Daha fazla bilgi: https://aka.ms/mstest/sdk", - "symbols/UseMSTestSdk/displayName": "MSTest.Sdk’sını kullan", + "symbols/UseMSTestSdk/displayName": "MSTest.Sdk kullan", "symbols/TestRunner/description": "Çalıştırıcıyı/platformu seçin. Daha fazla bilgi: https://aka.ms/mstest/sdk/extensions-profile", "symbols/TestRunner/displayName": "Test çalıştırıcı", "symbols/TestRunner/choices/MSTest/description": "MSTest Çalıştırıcısı'nı kullan (Microsoft.Testing.Platform)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hans.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hans.json index d662df313966..ca1825cfffaf 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hans.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hans.json @@ -30,11 +30,11 @@ "symbols/UseMSTestSdk/description": "使用 MSTest.Sdk 项目样式。有关详细信息,请访问 https://aka.ms/mstest/sdk", "symbols/UseMSTestSdk/displayName": "使用 MSTest.Sdk", "symbols/TestRunner/description": "选择运行器/平台。有关详细信息,请访问 https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "测试运行程序", + "symbols/TestRunner/displayName": "Test Runner", "symbols/TestRunner/choices/MSTest/description": "使用 MSTest 运行器(Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "使用 VSTest 平台", "symbols/CoverageTool/description": "要用于项目的覆盖率工具。", - "symbols/CoverageTool/displayName": "覆盖率工具", + "symbols/CoverageTool/displayName": "覆盖工具", "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Microsoft 代码覆盖率", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "使用 MSTest 运行器时选择 SDK 扩展配置文件。有关详细信息,请访问 https://aka.ms/mstest/sdk/extensions-profile", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hant.json index a7bb050b775d..6d732ec2a392 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-FSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 MacOS 版的 .NET 上執行的 MSTest 測試的專案。", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (僅限 Windows)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.cs.json index 2064d2b109a4..c43e978e6aa8 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.cs.json @@ -4,8 +4,8 @@ "description": "Projekt obsahující testy MSTest, který se dá spustit na .NET v systémech Windows, Linux a MacOS.", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (jenom Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.es.json index 227f27b145b4..44b8743beae1 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", @@ -18,7 +18,7 @@ "symbols/Framework/choices/net6.0-windows/description": ".NET 6 (solo Windows)", "symbols/Framework/choices/netcoreapp3.1/description": ".NET Core 3.1", "symbols/Framework/choices/net481/description": ".NET Framework 4.8.1", - "symbols/Framework/choices/net48/description": ".NET Framework 4.8", + "symbols/Framework/choices/net48/description": ".NET Framework 4.8", "symbols/Framework/choices/net472/description": ".NET Framework 4.7.2", "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.fr.json index b6b4ad0e3a70..35c5ee5ab560 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.fr.json @@ -4,7 +4,7 @@ "description": "Un projet qui contient des tests MSTest pouvant être exécutés sur .NET sous Windows, Linux et MacOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows uniquement)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.it.json index 6ab1957c4529..ff8f14caffce 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.it.json @@ -3,7 +3,7 @@ "name": "Progetto di test MSTest", "description": "Progetto che contiene i test MSTest eseguibili in .NET in Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Ignora il framework di destinazione", - "symbols/TargetFrameworkOverride/displayName": "Sostituzione del framework di destinazione", + "symbols/TargetFrameworkOverride/displayName": "Override del framework di destinazione", "symbols/Framework/description": "Il framework di destinazione per il progetto.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", @@ -24,7 +24,7 @@ "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.", - "symbols/skipRestore/displayName": "Ignora ripristino", + "symbols/skipRestore/displayName": "Salta ripristino", "symbols/langVersion/description": "Imposta la proprietà LangVersion nel file di progetto creato", "symbols/langVersion/displayName": "Versione del linguaggio", "symbols/UseMSTestSdk/description": "Usare lo stile del progetto MSTest.Sdk. Per altre informazioni, vedere https://aka.ms/mstest/sdk", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pl.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pl.json index 54ec2936fa4b..894e409b294a 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pl.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pl.json @@ -3,9 +3,9 @@ "name": "MSTest — projekt testowy", "description": "Projekt zawierający testy MSTest, które mogą być uruchamiane na platformie .NET w systemach Windows, Linux i MacOS.", "symbols/TargetFrameworkOverride/description": "Zastępuje platformę docelową", - "symbols/TargetFrameworkOverride/displayName": "Odrzucenie platformy docelowej", + "symbols/TargetFrameworkOverride/displayName": "Zastąpienie struktury docelowej", "symbols/Framework/description": "Platforma docelowa dla tego projektu.", - "symbols/Framework/displayName": "Platforma", + "symbols/Framework/displayName": "Struktura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (tylko system Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pt-BR.json index fd5ab216c9de..074a3539ab3c 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.pt-BR.json @@ -4,7 +4,7 @@ "description": "Um projeto que contém testes do MSTest que podem ser executados no .NET no Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (somente Windows)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.ru.json index a19c3c966e40..e50ed4ce3608 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.ru.json @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.tr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.tr.json index b647767d430f..8dbd27d9520b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.tr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.tr.json @@ -28,9 +28,9 @@ "symbols/langVersion/description": "Oluşturulan proje dosyasında LangVersion özelliğini ayarlar", "symbols/langVersion/displayName": "Dil sürümü", "symbols/UseMSTestSdk/description": "MSTest.Sdk proje stilini kullanın.. Daha fazla bilgi: https://aka.ms/mstest/sdk", - "symbols/UseMSTestSdk/displayName": "MSTest.Sdk’sını kullan", + "symbols/UseMSTestSdk/displayName": "MSTest.Sdk kullan", "symbols/TestRunner/description": "Çalıştırıcıyı/platformu seçin. Daha fazla bilgi: https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "Çalıştırıcıyı test et", + "symbols/TestRunner/displayName": "Test çalıştırıcı", "symbols/TestRunner/choices/MSTest/description": "MSTest Çalıştırıcısı'nı kullan (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "VSTest platformunu kullan", "symbols/CoverageTool/description": "Projede kullanılacak kapsam aracı.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hans.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hans.json index 33c39f8d5198..1970c96f9d99 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hans.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hans.json @@ -34,7 +34,7 @@ "symbols/TestRunner/choices/MSTest/description": "使用 MSTest 运行器(Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "使用 VSTest 平台", "symbols/CoverageTool/description": "要用于项目的覆盖率工具。", - "symbols/CoverageTool/displayName": "覆盖率工具", + "symbols/CoverageTool/displayName": "覆盖工具", "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Microsoft 代码覆盖率", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "使用 MSTest 运行器时选择 SDK 扩展配置文件。有关详细信息,请访问 https://aka.ms/mstest/sdk/extensions-profile", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json index b8e94e05061f..0c4eefabba7e 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/MSTest-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 MacOS 版的 .NET 上執行的 MSTest 測試的專案。", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (僅限 Windows)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.cs.json index f4b8efc6f99c..8e23ffbf2e6c 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt obsahující testy NUnit, který se dá spustit na .NET v systémech Windows, Linux a macOS", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.de.json index c60a1f45130f..cb898c089f00 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.de.json @@ -3,10 +3,10 @@ "name": "NUnit 3-Testprojekt", "description": "Ein Projekt, das NUnit-Tests enthält, die auf .NET unter Windows, Linux und macOS ausgeführt werden können.", "symbols/TargetFrameworkOverride/description": "Überschreibt das Zielframework", - "symbols/TargetFrameworkOverride/displayName": "Überschreibung des Zielframeworks", + "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.es.json index e5aca0829613..d20f67b27c0f 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.fr.json index 50a9eaf7cdcc..287f0f1dd95f 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests NUnit pouvant être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json index 7e30eb2f047d..9ec10ce11c41 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes NUnit que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.ru.json index 5b5f0be4fc6b..4d7182c14662 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 641d51ead5f8..3224bf67dab3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 NUnit 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.cs.json index 2f14d205a4f6..ca3a0266bf76 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.cs.json @@ -5,8 +5,8 @@ "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.de.json index 9dbc40663365..01cf24eedcb4 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.de.json @@ -6,7 +6,7 @@ "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.es.json index 9ee4b9d23fb1..5262dcb1a4f1 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.fr.json index 7e003d08d99c..d72475f5088e 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests NUnit pouvant être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json index 318efee36957..eb61dd093f75 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes NUnit que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.ru.json index fff314fcf804..89be206a39a2 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json index d2fbaf7cf44d..953d1d86e4f6 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 NUnit 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.cs.json index 948582708682..9df13d812ae3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt obsahující testy NUnit, který se dá spustit na .NET v systémech Windows, Linux a macOS", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.de.json index d3172ba52c06..fea5c6f7e6e9 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.de.json @@ -3,10 +3,10 @@ "name": "NUnit 3-Testprojekt", "description": "Ein Projekt, das NUnit-Tests enthält, die auf .NET unter Windows, Linux und macOS ausgeführt werden können.", "symbols/TargetFrameworkOverride/description": "Überschreibt das Zielframework", - "symbols/TargetFrameworkOverride/displayName": "Überschreibung des Zielframeworks", + "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.es.json index 9a3d0e6e2067..c6ef3d56bfab 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.fr.json index cdb8760b3521..d21ce18f21cf 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests NUnit pouvant être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json index 232d32bc3afa..f5bc7704e658 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes NUnit que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.ru.json index fb491aaf82a8..7f3390bb4b7c 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json index c8532d26e052..ba9e95a10973 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/NUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 NUnit 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.cs.json index ab88f233c1a1..57db94bebe85 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.cs.json @@ -4,8 +4,8 @@ "description": "Projekt, který obsahuje testy Playwright pomocí testovací architektury MSTest, který se dá spustit v .NET ve Windows, Linuxu a MacOS.", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (jenom Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.de.json index 69504dc97d3e..814a8992ca0c 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.de.json @@ -3,7 +3,7 @@ "name": "MSTest Playwright-Testprojekt", "description": "Ein Projekt, das Playwright-Tests mit MSTest-Testframework enthält, das unter .NET unter Windows, Linux und MacOS ausgeführt werden kann.", "symbols/TargetFrameworkOverride/description": "Überschreibt das Zielframework", - "symbols/TargetFrameworkOverride/displayName": "Überschreibung des Zielframeworks", + "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.es.json index 587b4bf49756..67afb7f139c5 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)", "symbols/Framework/choices/net9.0/description": ".NET 9", @@ -18,7 +18,7 @@ "symbols/Framework/choices/net6.0-windows/description": ".NET 6 (solo Windows)", "symbols/Framework/choices/netcoreapp3.1/description": ".NET Core 3.1", "symbols/Framework/choices/net481/description": ".NET Framework 4.8.1", - "symbols/Framework/choices/net48/description": ".NET Framework 4.8", + "symbols/Framework/choices/net48/description": ".NET Framework 4.8", "symbols/Framework/choices/net472/description": ".NET Framework 4.7.2", "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", @@ -30,7 +30,7 @@ "symbols/UseMSTestSdk/description": "Use el estilo de proyecto MSTest.Sdk. Más información en https://aka.ms/mstest/sdk", "symbols/UseMSTestSdk/displayName": "Usar MSTest.Sdk", "symbols/TestRunner/description": "Seleccione el ejecutor o la plataforma. Más información en https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "Test Runner", + "symbols/TestRunner/displayName": "Ejecutor de pruebas", "symbols/TestRunner/choices/MSTest/description": "Usar MSTest Runner (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "Uso de la plataforma VSTest", "symbols/CoverageTool/description": "Herramienta de cobertura que se va a usar para el proyecto.", @@ -38,7 +38,7 @@ "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Cobertura de código de Microsoft", "symbols/CoverageTool/choices/coverlet/description": "cubrecama", "symbols/ExtensionsProfile/description": "Seleccione el perfil de extensiones del SDK al usar MSTest Runner. Más información en https://aka.ms/mstest/sdk/extensions-profile", - "symbols/ExtensionsProfile/displayName": "Prueba del perfil de extensiones", + "symbols/ExtensionsProfile/displayName": "Probar perfil de extensiones", "symbols/ExtensionsProfile/choices/Default/description": "Perfil de extensiones predeterminadas (recomendado)", "symbols/ExtensionsProfile/choices/Default/displayName": "Valor predeterminado", "symbols/ExtensionsProfile/choices/None/description": "No hay extensiones habilitadas", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.fr.json index 4aaaec3bd586..71a5fcbd4edc 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.fr.json @@ -4,7 +4,7 @@ "description": "Un projet qui contient des tests Playwright utilisant le framework de test MSTest, qui peut être exécuté sur .NET sur Windows, Linux et MacOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows uniquement)", @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.it.json index 8badcf6ede67..89cf1ade85ac 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.it.json @@ -3,7 +3,7 @@ "name": "Progetto di test playwright MSTest", "description": "Progetto che contiene test Playwright che usano il framework di test MSTest, eseguibile in .NET in Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Ignora il framework di destinazione", - "symbols/TargetFrameworkOverride/displayName": "Sostituzione del framework di destinazione", + "symbols/TargetFrameworkOverride/displayName": "Override del framework di destinazione", "symbols/Framework/description": "Il framework di destinazione per il progetto.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": ".NET 10", @@ -24,7 +24,7 @@ "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.", - "symbols/skipRestore/displayName": "Ignora ripristino", + "symbols/skipRestore/displayName": "Salta ripristino", "symbols/langVersion/description": "Imposta la proprietà LangVersion nel file di progetto creato", "symbols/langVersion/displayName": "Versione del linguaggio", "symbols/UseMSTestSdk/description": "Usare lo stile del progetto MSTest.Sdk. Per altre informazioni, vedere https://aka.ms/mstest/sdk", @@ -40,7 +40,7 @@ "symbols/ExtensionsProfile/description": "Selezionare il profilo delle estensioni SDK quando si usa MSTest Runner. Per altre informazioni, vedere https://aka.ms/mstest/sdk/extensions-profile", "symbols/ExtensionsProfile/displayName": "Test del profilo delle estensioni", "symbols/ExtensionsProfile/choices/Default/description": "Profilo estensioni predefinito (scelta consigliata)", - "symbols/ExtensionsProfile/choices/Default/displayName": "Predefinita", + "symbols/ExtensionsProfile/choices/Default/displayName": "Impostazione predefinita", "symbols/ExtensionsProfile/choices/None/description": "Nessuna estensione abilitata", "symbols/ExtensionsProfile/choices/None/displayName": "Nessuno", "symbols/ExtensionsProfile/choices/AllMicrosoft/description": "Abilita tutte le estensioni spedite da Microsoft (incluse le estensioni con una licenza restrittiva)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ja.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ja.json index bd8519a9b930..95617797a195 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ja.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ja.json @@ -28,9 +28,9 @@ "symbols/langVersion/description": "作成されたプロジェクト ファイルで LangVersion プロパティを設定します", "symbols/langVersion/displayName": "言語バージョン", "symbols/UseMSTestSdk/description": "MSTest.Sdk プロジェクト スタイルを使用します。https://aka.ms/mstest/sdk の詳細情報", - "symbols/UseMSTestSdk/displayName": "MSTest.Sdk を使用する", + "symbols/UseMSTestSdk/displayName": "MSTest.Sdk を使用します", "symbols/TestRunner/description": "ランナー/プラットフォームを選択します。https://aka.ms/mstest/sdk/extensions-profile の詳細情報", - "symbols/TestRunner/displayName": "テスト ランナー", + "symbols/TestRunner/displayName": "Test Runner", "symbols/TestRunner/choices/MSTest/description": "MSTest Runner を使用する (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "VSTest プラットフォームを使用する", "symbols/CoverageTool/description": "プロジェクトに使用するカバレッジ ツール。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json index ace29986181c..5fffce42d47e 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,7 +4,7 @@ "description": "Um projeto que contém testes do Playwright usando a estrutura de teste MSTest, que pode ser executada no .NET no Windows, Linux e macOS.", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": ".NET 10", "symbols/Framework/choices/net10.0-windows/description": ".NET 10 (somente Windows)", @@ -23,22 +23,22 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", "symbols/UseMSTestSdk/description": "Use o estilo de projeto MSTest.Sdk. Mais informações em https://aka.ms/mstest/sdk", - "symbols/UseMSTestSdk/displayName": "Usar MSTest.SDK", + "symbols/UseMSTestSdk/displayName": "Usar MSTest.Sdk", "symbols/TestRunner/description": "Selecione o executor/plataforma. Mais informações em https://aka.ms/mstest/sdk/extensions-profile", - "symbols/TestRunner/displayName": "Executar teste", + "symbols/TestRunner/displayName": "Executor de teste", "symbols/TestRunner/choices/MSTest/description": "Usar o MSTest Runner (Microsoft.Testing.Platform)", "symbols/TestRunner/choices/VSTest/description": "Usar a plataforma VSTest", "symbols/CoverageTool/description": "A ferramenta de cobertura a ser usada para o projeto.", - "symbols/CoverageTool/displayName": "Ferramenta de cobertura", + "symbols/CoverageTool/displayName": "Ferramenta Cobertura", "symbols/CoverageTool/choices/Microsoft.CodeCoverage/description": "Cobertura de Código da Microsoft", "symbols/CoverageTool/choices/coverlet/description": "coverlet", "symbols/ExtensionsProfile/description": "Selecione o perfil de extensões do SDK ao usar o Executor do MSTest. Mais informações em https://aka.ms/mstest/sdk/extensions-profile", - "symbols/ExtensionsProfile/displayName": "Perfil de extensões de teste", + "symbols/ExtensionsProfile/displayName": "Testando o perfil de extensões", "symbols/ExtensionsProfile/choices/Default/description": "Perfil de extensões padrão (recomendado)", "symbols/ExtensionsProfile/choices/Default/displayName": "Padrão", "symbols/ExtensionsProfile/choices/None/description": "Nenhuma extensão está habilitada", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ru.json index ef5313d27a70..bdc222f13ff1 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.ru.json @@ -23,7 +23,7 @@ "symbols/Framework/choices/net471/description": ".NET Framework 4.7.1", "symbols/Framework/choices/net47/description": ".NET Framework 4.7", "symbols/Framework/choices/net462/description": ".NET Framework 4.6.2", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 2ef9ff776c26..cc6ebb16b9e6 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-MSTest-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 MacOS 版的 .NET 上執行、使用 MSTest 測試架構的 Playwright 測試的專案。", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": ".NET 9", "symbols/Framework/choices/net10.0-windows/description": ".NET 9 (僅限 Windows)", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.cs.json index 3f2392b6579a..daa6680ca68b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt, který obsahuje testy Playwright pomocí testovací architektury NUnit, který se dá spustit v .NET ve Windows, Linuxu a MacOS.", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.de.json index 95b714435d58..a769584f1319 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.de.json @@ -3,10 +3,10 @@ "name": "NUnit Playwright-Testprojekt", "description": "Ein Projekt, das Playwright-Tests mit NUnit-Testframework enthält, das unter .NET unter Windows, Linux und MacOS ausgeführt werden kann.", "symbols/TargetFrameworkOverride/description": "Überschreibt das Zielframework", - "symbols/TargetFrameworkOverride/displayName": "Überschreibung des Zielframeworks", + "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.es.json index 861ff21d45fc..4145185dc841 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.fr.json index 27b3a2f26df9..88ed72a44278 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests Playwright utilisant le framework de test NUnit, qui peut fonctionner sur .NET sous Windows, Linux et MacOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "symbols/langVersion/description": "Définit la propriété LangVersion dans le fichier projet créé", "symbols/langVersion/displayName": "Version du langage", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.it.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.it.json index 53da72d5c626..59f06c948887 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.it.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.it.json @@ -3,14 +3,14 @@ "name": "Progetto di test playwright NUnit", "description": "Progetto che contiene test Playwright che usano il framework di test NUnit, eseguibile in .NET in Windows, Linux e MacOS.", "symbols/TargetFrameworkOverride/description": "Ignora il framework di destinazione", - "symbols/TargetFrameworkOverride/displayName": "Sostituzione del framework di destinazione", + "symbols/TargetFrameworkOverride/displayName": "Override del framework di destinazione", "symbols/Framework/description": "Il framework di destinazione per il progetto.", "symbols/Framework/displayName": "Framework", "symbols/Framework/choices/net10.0/description": "net10.0 di destinazione", "symbols/EnablePack/description": "Indica se abilitare o meno la creazione del pacchetto (tramite \"dotnet pack\") per il progetto.", "symbols/EnablePack/displayName": "Abilita pacchetto", "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.", - "symbols/skipRestore/displayName": "Ignora ripristino", + "symbols/skipRestore/displayName": "Salta ripristino", "symbols/langVersion/description": "Imposta la proprietà LangVersion nel file di progetto creato", "symbols/langVersion/displayName": "Versione del linguaggio", "postActions/restoreNugetPackages/description": "Ripristina i pacchetti NuGet richiesti da questo progetto.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json index de5dda80d21f..c7dabdfbd421 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -3,14 +3,14 @@ "name": "Projeto de Teste NUnit do Playwright", "description": "Um projeto que contém testes do Playwright usando a estrutura de teste NUnit, que pode ser executada no .NET no Windows, Linux e macOS.", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", - "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", - "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", - "symbols/skipRestore/displayName": "Ignorar restauração", + "symbols/EnablePack/displayName": "Habilitar pacote", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", + "symbols/skipRestore/displayName": "Ignorar restauração", "symbols/langVersion/description": "Define a propriedade LangVersion no arquivo do projeto criado", "symbols/langVersion/displayName": "Versão do idioma", "postActions/restoreNugetPackages/description": "Restaura os pacotes do NuGet exigidos por este projeto.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.ru.json index 29b5a32c0c51..06239b7e4f80 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "symbols/langVersion/description": "Задает свойство LangVersion в создаваемом файле проекта.", "symbols/langVersion/displayName": "Версия языка", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 2300924811e5..365a03d1536e 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/Playwright-NUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 MacOS 版的 .NET 上執行、使用 NUnit 測試架構的 Playwright 測試的專案。", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.cs.json index b860e7a91962..eb3d6e531760 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt obsahující testy xUnit.net, které je možné spustit na .NET ve Windows, Linuxu a macOS", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.de.json index be77d05be890..0eb9331cbcb6 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.de.json @@ -6,7 +6,7 @@ "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.es.json index 8da2b713bb9f..5f50824302d5 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.fr.json index c7c3d51ad26f..79cb208edf5b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests xUnit.net qui peuvent être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "postActions/restoreNugetPackages/description": "Restaurez les packages NuGet requis par ce projet.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Exécutez « dotnet restore »", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pl.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pl.json index 6fc40822dc85..3c180485d1e7 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pl.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pl.json @@ -3,9 +3,9 @@ "name": "xUnit — projekt testowy", "description": "Projekt zawierający testy xUnit.net, które mogą być uruchamiane na platformie .NET w systemach Windows, Linux i macOS", "symbols/TargetFrameworkOverride/description": "Zastępuje platformę docelową", - "symbols/TargetFrameworkOverride/displayName": "Odrzucenie platformy docelowej", + "symbols/TargetFrameworkOverride/displayName": "Zastąpienie struktury docelowej", "symbols/Framework/description": "Platforma docelowa dla tego projektu.", - "symbols/Framework/displayName": "Platforma", + "symbols/Framework/displayName": "Struktura", "symbols/Framework/choices/net10.0/description": "Docelowa platforma net10.0", "symbols/EnablePack/description": "Określa, czy włączyć pakowanie (za pośrednictwem „pakietu dotnet”) dla projektu.", "symbols/EnablePack/displayName": "Włącz pakiet", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json index f774157cfb79..7c36c4794af2 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes xUnit.net que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "postActions/restoreNugetPackages/description": "Restaura os pacotes do NuGet exigidos por este projeto.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Executa \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.ru.json index 6830d4974b65..949590a1a6d3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "postActions/restoreNugetPackages/description": "Восстановление пакетов NuGet, необходимых для этого проекта.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 18ccb5575129..ad268deb9946 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 xUnit.net 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.cs.json index 78fa5c781f3c..aeeb72b73203 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt obsahující testy xUnit.net, které je možné spustit na .NET ve Windows, Linuxu a macOS", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.de.json index c160f9959f58..418373d024eb 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.de.json @@ -6,7 +6,7 @@ "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.es.json index 31341187ca0c..544d08a8050f 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.fr.json index d14eeed32f47..47fa4d1facfc 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests xUnit.net qui peuvent être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "postActions/restoreNugetPackages/description": "Restaurez les packages NuGet requis par ce projet.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Exécutez « dotnet restore »", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json index 914d01ec8ce6..d624e4f73835 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes xUnit.net que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "postActions/restoreNugetPackages/description": "Restaura os pacotes do NuGet exigidos por este projeto.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Executa \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.ru.json index 3f752e7c1e3d..7452c55021c6 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "postActions/restoreNugetPackages/description": "Восстановление пакетов NuGet, необходимых для этого проекта.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json index ee9381c71956..9f10b2ffab59 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-FSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 xUnit.net 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.cs.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.cs.json index b860e7a91962..eb3d6e531760 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.cs.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.cs.json @@ -4,9 +4,9 @@ "description": "Projekt obsahující testy xUnit.net, které je možné spustit na .NET ve Windows, Linuxu a macOS", "symbols/TargetFrameworkOverride/description": "Přepíše cílovou architekturu.", "symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/displayName": "Architektura", - "symbols/Framework/choices/net10.0/description": "Target net10.0", + "symbols/Framework/description": "Cílová architektura pro projekt", + "symbols/Framework/displayName": "Framework", + "symbols/Framework/choices/net10.0/description": "Cílit na net10.0", "symbols/EnablePack/description": "Určuje, jestli se má pro projekt povolit balení (přes „dotnet pack“).", "symbols/EnablePack/displayName": "Povolit balíček", "symbols/skipRestore/description": "Je-li zadáno, přeskočí automatické obnovení projektu při vytvoření.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.de.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.de.json index be77d05be890..0eb9331cbcb6 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.de.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.de.json @@ -6,7 +6,7 @@ "symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung", "symbols/Framework/description": "Das Zielframework für das Projekt.", "symbols/Framework/displayName": "Framework", - "symbols/Framework/choices/net10.0/description": "Ziel net10.0", + "symbols/Framework/choices/net10.0/description": "Ziel-Net10.0", "symbols/EnablePack/description": "Gibt an, ob die Paketerstellung (über \"dotnet pack\") für das Projekt aktiviert werden soll.", "symbols/EnablePack/displayName": "Paket aktivieren", "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.es.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.es.json index 8da2b713bb9f..5f50824302d5 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.es.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.es.json @@ -5,7 +5,7 @@ "symbols/TargetFrameworkOverride/description": "Invalida la plataforma de destino", "symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino", "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/displayName": "Marco", + "symbols/Framework/displayName": "Plataforma", "symbols/Framework/choices/net10.0/description": "net10.0 de destino", "symbols/EnablePack/description": "Indica si se va a habilitar o no el empaquetado (a través de \"dotnet pack\") para el proyecto.", "symbols/EnablePack/displayName": "Habilitar paquete", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.fr.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.fr.json index c7c3d51ad26f..79cb208edf5b 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.fr.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.fr.json @@ -4,12 +4,12 @@ "description": "Un projet qui contient des tests xUnit.net qui peuvent être exécutés sur .NET sous Windows, Linux et macOS.", "symbols/TargetFrameworkOverride/description": "Remplace l’infrastructure cible", "symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible", - "symbols/Framework/description": "Framework cible du projet.", + "symbols/Framework/description": "Le cadre cible du projet.", "symbols/Framework/displayName": "Infrastructure", - "symbols/Framework/choices/net10.0/description": "net10.0 cible", + "symbols/Framework/choices/net10.0/description": "Cible net10.0", "symbols/EnablePack/description": "Indique s’il faut activer ou non la création de packages (via « dotnet pack ») pour le projet.", "symbols/EnablePack/displayName": "Activer le pack", - "symbols/skipRestore/description": "S’il est spécifié, ignore la restauration automatique du projet lors de la création.", + "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", "symbols/skipRestore/displayName": "Ignorer la restauration", "postActions/restoreNugetPackages/description": "Restaurez les packages NuGet requis par ce projet.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Exécutez « dotnet restore »", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ja.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ja.json index cf5f3c00e288..c7d2438ec69c 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ja.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ja.json @@ -10,7 +10,7 @@ "symbols/EnablePack/description": "(\"dotnet pack\" を使用して) プロジェクトのパッケージ化を有効にするかどうか。", "symbols/EnablePack/displayName": "パックを有効にする", "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。", - "symbols/skipRestore/displayName": "復元をスキップする", + "symbols/skipRestore/displayName": "復元のスキップ", "postActions/restoreNugetPackages/description": "このプロジェクトに必要な NuGet パッケージを復元します。", "postActions/restoreNugetPackages/manualInstructions/default/text": "'dotnet restore' を実行する", "postActions/openInEditor/description": "エディターで Class1.cs を開きます" diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json index f774157cfb79..7c36c4794af2 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.pt-BR.json @@ -4,12 +4,12 @@ "description": "Um projeto que contém testes xUnit.net que podem ser executados no .NET no Windows, Linux e macOS", "symbols/TargetFrameworkOverride/description": "Substitui a estrutura de destino", "symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino", - "symbols/Framework/description": "A estrutura de destino do projeto.", + "symbols/Framework/description": "A estrutura de destino para o projeto.", "symbols/Framework/displayName": "Estrutura", "symbols/Framework/choices/net10.0/description": "Target net10.0", "symbols/EnablePack/description": "Se deseja ou não habilitar o empacotamento (via \"dotnet pack\") para o projeto.", "symbols/EnablePack/displayName": "Habilitar pacote", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto sendo criado.", + "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto na criação.", "symbols/skipRestore/displayName": "Ignorar restauração", "postActions/restoreNugetPackages/description": "Restaura os pacotes do NuGet exigidos por este projeto.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Executa \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ru.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ru.json index 6830d4974b65..949590a1a6d3 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ru.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.ru.json @@ -9,7 +9,7 @@ "symbols/Framework/choices/net10.0/description": "Целевая среда net10.0", "symbols/EnablePack/description": "Следует ли включить упаковку (через \"dotnet pack\") для проекта.", "symbols/EnablePack/displayName": "Включить пакет", - "symbols/skipRestore/description": "Позволяет пропускать автоматическое восстановление проекта при создании.", + "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", "symbols/skipRestore/displayName": "Пропустить восстановление", "postActions/restoreNugetPackages/description": "Восстановление пакетов NuGet, необходимых для этого проекта.", "postActions/restoreNugetPackages/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"", diff --git a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json index 18ccb5575129..ad268deb9946 100644 --- a/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json +++ b/template_feed/Microsoft.DotNet.Common.ProjectTemplates.10.0/content/XUnit-VisualBasic/.template.config/localize/templatestrings.zh-Hant.json @@ -4,7 +4,7 @@ "description": "包含可以在 Windows、Linux 和 macOS 版的 .NET 上執行的 xUnit.net 測試的專案", "symbols/TargetFrameworkOverride/description": "覆寫目標 Framework", "symbols/TargetFrameworkOverride/displayName": "目標架構覆寫", - "symbols/Framework/description": "專案的目標 Framework。", + "symbols/Framework/description": "專案的目標架構。", "symbols/Framework/displayName": "架構", "symbols/Framework/choices/net10.0/description": "目標 net10.0", "symbols/EnablePack/description": "是否要啟用專案的封裝 (透過 \"dotnet pack\")。", diff --git a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs index c9962361469f..3d30bc649adf 100644 --- a/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs +++ b/test/HelixTasks/SDKCustomCreateXUnitWorkItemsWithTestExclusion.cs @@ -157,7 +157,7 @@ private async Task ExecuteAsync() var testFilter = string.IsNullOrEmpty(assemblyPartitionInfo.ClassListArgumentString) ? "" : $"--filter \"{assemblyPartitionInfo.ClassListArgumentString}\""; command = $"{driver} test {assemblyName} -e HELIX_WORK_ITEM_TIMEOUT={timeout} {testExecutionDirectory} {msbuildAdditionalSdkResolverFolder} " + - $"{(XUnitArguments != null ? " " + XUnitArguments : "")} --results-directory .{Path.DirectorySeparatorChar} --logger trx --logger \"console;verbosity=detailed\" --blame-hang --blame-hang-timeout 30m {testFilter} -- {arguments}"; + $"{(XUnitArguments != null ? " " + XUnitArguments : "")} --results-directory .{Path.DirectorySeparatorChar} --logger trx --logger \"console;verbosity=detailed\" --blame-hang --blame-hang-timeout 15m {testFilter} -- {arguments}"; Log.LogMessage($"Creating work item with properties Identity: {assemblyName}, PayloadDirectory: {publishDirectory}, Command: {command}"); diff --git a/test/Microsoft.DotNet.MSBuildSdkResolver.Tests/GivenAnMSBuildSdkResolver.cs b/test/Microsoft.DotNet.MSBuildSdkResolver.Tests/GivenAnMSBuildSdkResolver.cs index ce2ceceb0515..ba6bee057b4d 100644 --- a/test/Microsoft.DotNet.MSBuildSdkResolver.Tests/GivenAnMSBuildSdkResolver.cs +++ b/test/Microsoft.DotNet.MSBuildSdkResolver.Tests/GivenAnMSBuildSdkResolver.cs @@ -202,8 +202,16 @@ public void ItReturnsHighestSdkAvailableThatIsCompatibleWithMSBuild(bool disallo result.Success.Should().BeTrue($"No error expected. Error encountered: {string.Join(Environment.NewLine, result.Errors ?? new string[] { })}. Mocked Process Path: {environment.ProcessPath}. Mocked Path: {environment.PathEnvironmentVariable}"); result.Path.Should().Be((disallowPreviews ? compatibleRtm : compatiblePreview).FullName); result.AdditionalPaths.Should().BeNull(); - result.PropertiesToAdd.Count.Should().Be(2); - result.PropertiesToAdd.Should().ContainKey(DotnetHost); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + // DotnetHost is the path to dotnet.exe. Can be only on Windows. + result.PropertiesToAdd.Count.Should().Be(2); + result.PropertiesToAdd.Should().ContainKey(DotnetHost); + } + else + { + result.PropertiesToAdd.Count.Should().Be(1); + } result.PropertiesToAdd.Should().ContainKey(MSBuildTaskHostRuntimeVersion); result.PropertiesToAdd[MSBuildTaskHostRuntimeVersion].Should().Be("mockRuntimeVersion"); result.Version.Should().Be(disallowPreviews ? "98.98.98" : "99.99.99-preview"); @@ -279,8 +287,16 @@ public void ItReturnsHighestSdkAvailableThatIsCompatibleWithMSBuildWhenVersionIn result.Success.Should().BeTrue($"No error expected. Error encountered: {string.Join(Environment.NewLine, result.Errors ?? new string[] { })}. Mocked Process Path: {environment.ProcessPath}. Mocked Path: {environment.PathEnvironmentVariable}"); result.Path.Should().Be((disallowPreviews ? compatibleRtm : compatiblePreview).FullName); result.AdditionalPaths.Should().BeNull(); - result.PropertiesToAdd.Count.Should().Be(4); - result.PropertiesToAdd.Should().ContainKey(DotnetHost); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + // DotnetHost is the path to dotnet.exe. Can be only on Windows. + result.PropertiesToAdd.Count.Should().Be(4); + result.PropertiesToAdd.Should().ContainKey(DotnetHost); + } + else + { + result.PropertiesToAdd.Count.Should().Be(3); + } result.PropertiesToAdd.Should().ContainKey(MSBuildTaskHostRuntimeVersion); result.PropertiesToAdd[MSBuildTaskHostRuntimeVersion].Should().Be("mockRuntimeVersion"); result.PropertiesToAdd.Should().ContainKey("SdkResolverHonoredGlobalJson"); diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/ContainerCli.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/ContainerCli.cs index 82ccc3d4a2c9..a83e24239f15 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/ContainerCli.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/ContainerCli.cs @@ -7,6 +7,8 @@ static class ContainerCli { public static bool IsPodman => _isPodman.Value; + public static bool IsAvailable => _isAvailable.Value; + public static RunExeCommand PullCommand(ITestOutputHelper log, params string[] args) => CreateCommand(log, "pull", args); @@ -60,4 +62,7 @@ private static RunExeCommand CreateCommand(ITestOutputHelper log, string command private static readonly Lazy _isPodman = new(() => new DockerCli(loggerFactory: new TestLoggerFactory()).GetCommand() == DockerCli.PodmanCommand); + + private static readonly Lazy _isAvailable = + new(() => new DockerCli(loggerFactory: new TestLoggerFactory()).IsAvailable()); } diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateImageIndexTests.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateImageIndexTests.cs new file mode 100644 index 000000000000..2615b2e178ee --- /dev/null +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateImageIndexTests.cs @@ -0,0 +1,169 @@ +// 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.CompilerServices; +using FakeItEasy; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using Microsoft.NET.Build.Containers.IntegrationTests; +using Microsoft.NET.Build.Containers.UnitTests; +using NuGet.Protocol; +using Task = System.Threading.Tasks.Task; + +namespace Microsoft.NET.Build.Containers.Tasks.IntegrationTests; + +[Collection("Docker tests")] +public class CreateImageIndexTests +{ + private ITestOutputHelper _testOutput; + + public CreateImageIndexTests(ITestOutputHelper testOutput) + { + _testOutput = testOutput; + } + + [DockerAvailableFact] + public async Task CreateImageIndex_Baseline() + { + DirectoryInfo newProjectDir = CreateNewProject(); + (IBuildEngine buildEngine, List errors) = SetupBuildEngine(); + string outputRegistry = DockerRegistryManager.LocalRegistry; + string repository = "dotnet/create-image-index-baseline"; + string[] tags = new[] { "tag1", "tag2" }; + + // Create images for 2 rids + TaskItem image1 = PublishAndCreateNewImage("linux-x64", outputRegistry, repository, tags, newProjectDir, buildEngine, errors); + TaskItem image2 = PublishAndCreateNewImage("linux-arm64", outputRegistry, repository, tags, newProjectDir, buildEngine, errors); + + // Create image index + CreateImageIndex cii = new(); + cii.BuildEngine = buildEngine; + cii.OutputRegistry = outputRegistry; + cii.Repository = repository; + cii.ImageTags = tags; + cii.GeneratedContainers = [image1, image2]; + Assert.True(cii.Execute(), FormatBuildMessages(errors)); + + // Assert that the image index is created correctly + cii.GeneratedImageIndex.Should().NotBeNullOrEmpty(); + var imageIndex = cii.GeneratedImageIndex.FromJson(); + imageIndex.manifests.Should().HaveCount(2); + + imageIndex.manifests[0].digest.Should().Be(image1.GetMetadata("ManifestDigest")); + imageIndex.manifests[0].platform.os.Should().Be("linux"); + imageIndex.manifests[0].platform.architecture.Should().Be("amd64"); + + imageIndex.manifests[1].digest.Should().Be(image2.GetMetadata("ManifestDigest")); + imageIndex.manifests[1].platform.os.Should().Be("linux"); + imageIndex.manifests[1].platform.architecture.Should().Be("arm64"); + + // Assert that the image index is pushed to the registry + var loggerFactory = new TestLoggerFactory(_testOutput); + var logger = loggerFactory.CreateLogger(nameof(CreateImageIndex_Baseline)); + Registry registry = new(outputRegistry, logger, RegistryMode.Pull); + + await AssertThatImageIsReferencedInImageIndex("linux-x64", repository, tags, registry); + await AssertThatImageIsReferencedInImageIndex("linux-arm64", repository, tags, registry); + + newProjectDir.Delete(true); + } + + private DirectoryInfo CreateNewProject() + { + DirectoryInfo newProjectDir = new(GetTestDirectoryName()); + if (newProjectDir.Exists) + { + newProjectDir.Delete(recursive: true); + } + newProjectDir.Create(); + new DotnetNewCommand(_testOutput, "console", "-f", ToolsetInfo.CurrentTargetFramework) + .WithVirtualHive() + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + return newProjectDir; + } + + private TaskItem PublishAndCreateNewImage( + string rid, + string outputRegistry, + string repository, + string[] tags, + DirectoryInfo newProjectDir, + IBuildEngine buildEngine, + List errors) + { + new DotnetCommand(_testOutput, "publish", "-c", "Release", "-r", rid, "--no-self-contained") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + + CreateNewImage cni = new(); + + cni.BuildEngine = buildEngine; + + cni.BaseRegistry = "mcr.microsoft.com"; + cni.BaseImageName = "dotnet/runtime"; + cni.BaseImageTag = "7.0"; + + cni.OutputRegistry = outputRegistry; + cni.LocalRegistry = DockerAvailableFactAttribute.LocalRegistry; + cni.PublishDirectory = Path.Combine(newProjectDir.FullName, "bin", "Release", ToolsetInfo.CurrentTargetFramework, rid, "publish"); + cni.Repository = repository; + cni.ImageTags = tags.Select(t => $"{t}-{rid}").ToArray(); + cni.WorkingDirectory = "app/"; + cni.ContainerRuntimeIdentifier = rid; + cni.Entrypoint = new TaskItem[] { new("dotnet"), new("build") }; + cni.RuntimeIdentifierGraphPath = ToolsetUtils.GetRuntimeGraphFilePath(); + + Assert.True(cni.Execute(), FormatBuildMessages(errors)); + + TaskItem generatedContainer = new("GeneratedContainer" + rid); + generatedContainer.SetMetadata("Manifest", cni.GeneratedContainerManifest); + generatedContainer.SetMetadata("Configuration", cni.GeneratedContainerConfiguration); + generatedContainer.SetMetadata("ManifestDigest", cni.GeneratedContainerDigest); + generatedContainer.SetMetadata("ManifestMediaType", cni.GeneratedContainerMediaType); + + return generatedContainer; + } + + private async Task AssertThatImageIsReferencedInImageIndex(string rid, string repository, string[] tags, Registry registry) + { + foreach (var tag in tags) + { + var individualImage = await registry.GetImageManifestAsync( + repository, + $"{tag}-{rid}", + rid, + ToolsetUtils.RidGraphManifestPicker, + cancellationToken: default).ConfigureAwait(false); + individualImage.Should().NotBeNull(); + + var imageFromImageIndex = await registry.GetImageManifestAsync( + repository, + tag, + rid, + ToolsetUtils.RidGraphManifestPicker, + cancellationToken: default).ConfigureAwait(false); + imageFromImageIndex.Should().NotBeNull(); + + imageFromImageIndex.ManifestConfigDigest.Should().Be(individualImage.ManifestConfigDigest); + } + } + + private static (IBuildEngine buildEngine, List errors) SetupBuildEngine() + { + List errors = new(); + IBuildEngine buildEngine = A.Fake(); + A.CallTo(() => buildEngine.LogWarningEvent(A.Ignored)).Invokes((BuildWarningEventArgs e) => errors.Add(e.Message)); + A.CallTo(() => buildEngine.LogErrorEvent(A.Ignored)).Invokes((BuildErrorEventArgs e) => errors.Add(e.Message)); + A.CallTo(() => buildEngine.LogMessageEvent(A.Ignored)).Invokes((BuildMessageEventArgs e) => errors.Add(e.Message)); + + return (buildEngine, errors); + } + + private static string GetTestDirectoryName([CallerMemberName] string testName = "DefaultTest") => Path.Combine(TestSettings.TestArtifactsDirectory, testName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss")); + + private static string FormatBuildMessages(List messages) => string.Join("\r\n", messages); +} + diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateNewImageTests.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateNewImageTests.cs index ad5d2b8fe905..0f5ae607e328 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateNewImageTests.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/CreateNewImageTests.cs @@ -155,7 +155,7 @@ public void Tasks_EndToEnd_With_EnvironmentVariable_Validation() File.WriteAllText(Path.Combine(newProjectDir.FullName, "Program.cs"), $"Console.Write(Environment.GetEnvironmentVariable(\"GoodEnvVar\"));"); - new DotnetCommand(_testOutput, "build", "--configuration", "release", "/p:runtimeidentifier=linux-x64", $"/p:RuntimeFrameworkVersion={DockerRegistryManager.RuntimeFrameworkVersion}") + new DotnetCommand(_testOutput, "build", "--configuration", "release", "/p:runtimeidentifier=linux-x64") .WithWorkingDirectory(newProjectDir.FullName) .Execute() .Should().Pass(); @@ -164,7 +164,7 @@ public void Tasks_EndToEnd_With_EnvironmentVariable_Validation() (IBuildEngine buildEngine, List errors) = SetupBuildEngine(); pcp.BuildEngine = buildEngine; - pcp.FullyQualifiedBaseImageName = $"mcr.microsoft.com/{DockerRegistryManager.RuntimeBaseImage}:{DockerRegistryManager.Net9PreviewImageTag}"; + pcp.FullyQualifiedBaseImageName = $"mcr.microsoft.com/{DockerRegistryManager.RuntimeBaseImage}:{DockerRegistryManager.Net9ImageTag}"; pcp.ContainerRegistry = ""; pcp.ContainerRepository = "dotnet/envvarvalidation"; pcp.ContainerImageTag = "latest"; @@ -177,7 +177,7 @@ public void Tasks_EndToEnd_With_EnvironmentVariable_Validation() Assert.True(pcp.Execute(), FormatBuildMessages(errors)); Assert.Equal("mcr.microsoft.com", pcp.ParsedContainerRegistry); Assert.Equal("dotnet/runtime", pcp.ParsedContainerImage); - Assert.Equal(DockerRegistryManager.Net9PreviewImageTag, pcp.ParsedContainerTag); + Assert.Equal(DockerRegistryManager.Net9ImageTag, pcp.ParsedContainerTag); Assert.Single(pcp.NewContainerEnvironmentVariables); Assert.Equal("Foo", pcp.NewContainerEnvironmentVariables[0].GetMetadata("Value")); diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerRegistryManager.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerRegistryManager.cs index 5734483b579e..7c460b5aad66 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerRegistryManager.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerRegistryManager.cs @@ -15,12 +15,11 @@ public class DockerRegistryManager public const string Net6ImageTag = "6.0"; public const string Net7ImageTag = "7.0"; public const string Net8ImageTag = "8.0"; - public const string Net9PreviewImageTag = "9.0-preview"; - public const string RuntimeFrameworkVersion = "9.0.0-preview.3.24172.9"; + public const string Net9ImageTag = "9.0"; public const string Net8PreviewWindowsSpecificImageTag = $"{Net8ImageTag}-nanoserver-ltsc2022"; public const string LocalRegistry = "localhost:5010"; - public const string FullyQualifiedBaseImageDefault = $"{BaseImageSource}/{RuntimeBaseImage}:{Net9PreviewImageTag}"; - public const string FullyQualifiedBaseImageAspNet = $"{BaseImageSource}/{AspNetBaseImage}:{Net9PreviewImageTag}"; + public const string FullyQualifiedBaseImageDefault = $"{BaseImageSource}/{RuntimeBaseImage}:{Net9ImageTag}"; + public const string FullyQualifiedBaseImageAspNet = $"{BaseImageSource}/{AspNetBaseImage}:{Net9ImageTag}"; private static string? s_registryContainerId; internal class SameArchManifestPicker : IManifestPicker @@ -72,7 +71,7 @@ public static async Task StartAndPopulateDockerRegistry(ITestOutputHelper testOu EnsureRegistryLoaded(new Uri($"http://{LocalRegistry}"), s_registryContainerId, logger, testOutput); - foreach (string? tag in new[] { Net6ImageTag, Net7ImageTag, Net8ImageTag, Net9PreviewImageTag }) + foreach (string? tag in new[] { Net6ImageTag, Net7ImageTag, Net8ImageTag, Net9ImageTag }) { logger.LogInformation("Pulling image '{repo}/{image}:{tag}'.", BaseImageSource, RuntimeBaseImage, tag); string dotnetdll = System.Reflection.Assembly.GetExecutingAssembly().Location; diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchFact.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchFact.cs new file mode 100644 index 000000000000..36ad9fbc0c9a --- /dev/null +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchFact.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.NET.Build.Containers.IntegrationTests; + +public class DockerIsAvailableAndSupportsArchFactAttribute : FactAttribute +{ + public DockerIsAvailableAndSupportsArchFactAttribute(string arch) + { + if (!DockerSupportsArchHelper.DaemonIsAvailable) + { + base.Skip = "Skipping test because Docker is not available on this host."; + } + else if (!DockerSupportsArchHelper.DaemonSupportsArch(arch)) + { + base.Skip = $"Skipping test because Docker daemon does not support {arch}."; + } + } +} diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchInlineData.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchInlineData.cs index bf5b8d4bd65d..caafbaea4b45 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchInlineData.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/DockerSupportsArchInlineData.cs @@ -9,12 +9,6 @@ namespace Microsoft.NET.Build.Containers.IntegrationTests; public class DockerSupportsArchInlineData : DataAttribute { - // an optimization - this doesn't change over time so we can compute it once - private static string[] LinuxPlatforms = GetSupportedLinuxPlatforms(); - - // another optimization - daemons don't switch types easily or quickly, so this is as good as static - private static bool IsWindowsDockerDaemon = GetIsWindowsDockerDaemon(); - private readonly string _arch; private readonly object[] _data; @@ -26,26 +20,40 @@ public DockerSupportsArchInlineData(string arch, params object[] data) public override IEnumerable GetData(MethodInfo testMethod) { - if (DaemonSupportsArch(_arch)) + if (DockerSupportsArchHelper.DaemonSupportsArch(_arch)) { return new object[][] { _data.Prepend(_arch).ToArray() }; - }; + } + else + { + base.Skip = $"Skipping test because Docker daemon does not support {_arch}."; + } return Array.Empty(); } +} + +internal static class DockerSupportsArchHelper +{ + internal static bool DaemonIsAvailable => ContainerCli.IsAvailable; - private bool DaemonSupportsArch(string arch) + internal static bool DaemonSupportsArch(string arch) { + // an optimization - this doesn't change over time so we can compute it once + string[] LinuxPlatforms = GetSupportedLinuxPlatforms(); + if (LinuxPlatforms.Contains(arch)) { return true; } else { + // another optimization - daemons don't switch types easily or quickly, so this is as good as static + bool IsWindowsDockerDaemon = GetIsWindowsDockerDaemon(); + if (IsWindowsDockerDaemon && arch.StartsWith("windows", StringComparison.OrdinalIgnoreCase)) { return true; } - base.Skip = $"Skipping test because Docker daemon does not support {arch}."; return false; } } diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/EndToEndTests.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/EndToEndTests.cs index 10132a38f476..4267a39ebf25 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/EndToEndTests.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/EndToEndTests.cs @@ -3,6 +3,8 @@ using System.Formats.Tar; using System.Runtime.CompilerServices; +using System.Text.Json; +using Microsoft.Build.Logging; using Microsoft.DotNet.Cli.Utils; using Microsoft.NET.Build.Containers.LocalDaemons; using Microsoft.NET.Build.Containers.Resources; @@ -64,7 +66,7 @@ public async Task ApiEndToEndWithRegistryPushAndPull() ImageBuilder imageBuilder = await registry.GetImageManifestAsync( DockerRegistryManager.RuntimeBaseImage, - DockerRegistryManager.Net9PreviewImageTag, + DockerRegistryManager.Net9ImageTag, "linux-x64", ToolsetUtils.RidGraphManifestPicker, cancellationToken: default).ConfigureAwait(false); @@ -80,7 +82,7 @@ public async Task ApiEndToEndWithRegistryPushAndPull() BuiltImage builtImage = imageBuilder.Build(); // Push the image back to the local registry - var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9PreviewImageTag); + var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9ImageTag); var destinationReference = new DestinationImageReference(registry, NewImageName(), new[] { "latest", "1.0" }); await registry.PushAsync(builtImage, sourceReference, destinationReference, cancellationToken: default).ConfigureAwait(false); @@ -111,7 +113,7 @@ public async Task ApiEndToEndWithLocalLoad() ImageBuilder imageBuilder = await registry.GetImageManifestAsync( DockerRegistryManager.RuntimeBaseImage, - DockerRegistryManager.Net9PreviewImageTag, + DockerRegistryManager.Net9ImageTag, "linux-x64", ToolsetUtils.RidGraphManifestPicker, cancellationToken: default).ConfigureAwait(false); @@ -126,7 +128,7 @@ public async Task ApiEndToEndWithLocalLoad() BuiltImage builtImage = imageBuilder.Build(); // Load the image into the local registry - var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9PreviewImageTag); + var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9ImageTag); var destinationReference = new DestinationImageReference(registry, NewImageName(), new[] { "latest", "1.0" }); await new DockerCli(_loggerFactory).LoadAsync(builtImage, sourceReference, destinationReference, default).ConfigureAwait(false); @@ -152,7 +154,7 @@ public async Task ApiEndToEndWithArchiveWritingAndLoad() ImageBuilder imageBuilder = await registry.GetImageManifestAsync( DockerRegistryManager.RuntimeBaseImage, - DockerRegistryManager.Net9PreviewImageTag, + DockerRegistryManager.Net9ImageTag, "linux-x64", ToolsetUtils.RidGraphManifestPicker, cancellationToken: default).ConfigureAwait(false); @@ -169,7 +171,7 @@ public async Task ApiEndToEndWithArchiveWritingAndLoad() // Write the image to disk var archiveFile = Path.Combine(TestSettings.TestArtifactsDirectory, nameof(ApiEndToEndWithArchiveWritingAndLoad), "app.tar.gz"); - var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9PreviewImageTag); + var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9ImageTag); var destinationReference = new DestinationImageReference(new ArchiveFileRegistry(archiveFile), NewImageName(), new[] { "latest", "1.0" }); await destinationReference.LocalRegistry!.LoadAsync(builtImage, sourceReference, destinationReference, default).ConfigureAwait(false); @@ -356,11 +358,6 @@ private string BuildLocalApp([CallerMemberName] string testName = "TestName", st new DotnetCommand(_testOutput, "publish", "-bl", "MinimalTestApp", "-r", rid, "-f", _oldFramework, "-c", "Debug") .WithWorkingDirectory(workingDirectory); - if (tfm == ToolsetInfo.CurrentTargetFramework) - { - publishCommand.Arguments.AddRange(new[] { "-p", $"RuntimeFrameworkVersion={DockerRegistryManager.RuntimeFrameworkVersion}" }); - } - publishCommand.Execute() .Should().Pass(); @@ -523,8 +520,7 @@ public async Task EndToEnd_NoAPI_ProjectType(string projectType, bool addPackage $"/p:ContainerRegistry={DockerRegistryManager.LocalRegistry}", $"/p:ContainerRepository={imageName}", $"/p:ContainerImageTag={imageTag}", - "/p:UseRazorSourceGenerator=false", - $"/p:RuntimeFrameworkVersion={DockerRegistryManager.RuntimeFrameworkVersion}") + "/p:UseRazorSourceGenerator=false") .WithEnvironmentVariable("NUGET_PACKAGES", privateNuGetAssets.FullName) .WithWorkingDirectory(newProjectDir.FullName) .Execute(); @@ -680,8 +676,7 @@ public void EndToEnd_NoAPI_Console() $"/p:ContainerRegistry={DockerRegistryManager.LocalRegistry}", $"/p:ContainerRepository={imageName}", $"/p:ContainerImageTag={imageTag}", - "/p:EnableSdkContainerSupport=true", - $"/p:RuntimeFrameworkVersion={DockerRegistryManager.RuntimeFrameworkVersion}") + "/p:EnableSdkContainerSupport=true") .WithEnvironmentVariable("NUGET_PACKAGES", privateNuGetAssets.FullName) .WithWorkingDirectory(newProjectDir.FullName) .Execute() @@ -705,6 +700,485 @@ public void EndToEnd_NoAPI_Console() privateNuGetAssets.Delete(true); } + [DockerIsAvailableAndSupportsArchFact("linux/arm64")] + public void EndToEndMultiArch_LocalRegistry() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + string imageArm64 = $"{imageName}:{imageTag}-linux-arm64"; + + // Create a new console project + DirectoryInfo newProjectDir = CreateNewProject("console"); + + // Run PublishContainer for multi-arch + CommandResult commandResult = new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute(); + + // Check that the app was published for each RID, + // images were created locally for each RID + // and image index was NOT created + commandResult.Should().Pass() + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-x64")) + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-arm64")) + .And.HaveStdOutContaining($"Pushed image '{imageX64}' to local registry") + .And.HaveStdOutContaining($"Pushed image '{imageArm64}' to local registry") + .And.NotHaveStdOutContaining("Pushed image index"); + + // Check that the containers can be run + CommandResult processResultX64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-x64", + imageX64) + .Execute(); + processResultX64.Should().Pass().And.HaveStdOut("Hello, World!"); + + CommandResult processResultArm64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-arm64", + imageArm64) + .Execute(); + processResultArm64.Should().Pass().And.HaveStdOut("Hello, World!"); + + // Cleanup + newProjectDir.Delete(true); + } + + private DirectoryInfo CreateNewProject(string template, [CallerMemberName] string callerMemberName = "") + { + DirectoryInfo newProjectDir = new DirectoryInfo(Path.Combine(TestSettings.TestArtifactsDirectory, callerMemberName)); + + if (newProjectDir.Exists) + { + newProjectDir.Delete(recursive: true); + } + + newProjectDir.Create(); + + new DotnetNewCommand(_testOutput, template, "-f", ToolsetInfo.CurrentTargetFramework) + .WithVirtualHive() + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + + return newProjectDir; + } + + private string GetPublishArtifactsPath(string projectDir, string rid) + => Path.Combine(projectDir, "bin", "Debug", ToolsetInfo.CurrentTargetFramework, rid, "publish"); + + [DockerIsAvailableAndSupportsArchFact("linux/arm64")] + public void EndToEndMultiArch_ArchivePublishing() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + string imageArm64 = $"{imageName}:{imageTag}-linux-arm64"; + string archiveOutput = Path.Combine(TestSettings.TestArtifactsDirectory, "tarballs-output"); + string imageX64Tarball = Path.Combine(archiveOutput, $"{imageName}-linux-x64.tar.gz"); + string imageArm64Tarball = Path.Combine(archiveOutput, $"{imageName}-linux-arm64.tar.gz"); + + // Create a new console project + DirectoryInfo newProjectDir = CreateNewProject("console"); + + // Run PublishContainer for multi-arch with ContainerArchiveOutputPath + CommandResult commandResult = new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerArchiveOutputPath={archiveOutput}", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute(); + + // Check that the app was published for each RID, + // images were created locally for each RID + // and image index was NOT created + commandResult.Should().Pass() + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-x64")) + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-arm64")) + .And.HaveStdOutContaining($"Pushed image '{imageX64}' to local archive at '{imageX64Tarball}'") + .And.HaveStdOutContaining($"Pushed image '{imageArm64}' to local archive at '{imageArm64Tarball}'") + .And.NotHaveStdOutContaining("Pushed image index"); + + // Check that tarballs were created + File.Exists(imageX64Tarball).Should().BeTrue(); + File.Exists(imageArm64Tarball).Should().BeTrue(); + + // Load the images from the tarballs + ContainerCli.LoadCommand(_testOutput, "--input", imageX64Tarball) + .Execute() + .Should().Pass(); + ContainerCli.LoadCommand(_testOutput, "--input", imageArm64Tarball) + .Execute() + .Should().Pass(); + + // Check that the containers can be run + CommandResult processResultX64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-x64", + imageX64) + .Execute(); + processResultX64.Should().Pass().And.HaveStdOut("Hello, World!"); + + CommandResult processResultArm64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-arm64", + imageArm64) + .Execute(); + processResultArm64.Should().Pass().And.HaveStdOut("Hello, World!"); + + // Cleanup + newProjectDir.Delete(true); + } + + [DockerIsAvailableAndSupportsArchFact("linux/arm64")] + public void EndToEndMultiArch_RemoteRegistry() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string registry = DockerRegistryManager.LocalRegistry; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + string imageArm64 = $"{imageName}:{imageTag}-linux-arm64"; + string imageIndex = $"{imageName}:{imageTag}"; + + // Create a new console project + DirectoryInfo newProjectDir = CreateNewProject("console"); + + // Run PublishContainer for multi-arch with ContainerRegistry + CommandResult commandResult = new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRegistry={registry}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute(); + + // Check that the app was published for each RID, + // images were created locally for each RID + // and image index was created + commandResult.Should().Pass() + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-x64")) + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-arm64")) + .And.HaveStdOutContaining($"Pushed image '{imageX64}' to registry") + .And.HaveStdOutContaining($"Pushed image '{imageArm64}' to registry") + .And.HaveStdOutContaining($"Pushed image index '{imageIndex}' to registry '{registry}'"); + + + // Check that the containers can be run + // First pull the image from the registry, then tag so the image won't be overwritten + string imageX64Tagged = $"{registry}/test-image-{imageName}-x64"; + ContainerCli.PullCommand( + _testOutput, + "--platform", + "linux/amd64", + $"{registry}/{imageIndex}") + .Execute() + .Should().Pass(); + ContainerCli.TagCommand( + _testOutput, + $"{registry}/{imageIndex}", + imageX64Tagged) + .Execute() + .Should().Pass(); + CommandResult processResultX64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-x64", + imageX64Tagged) + .Execute(); + processResultX64.Should().Pass().And.HaveStdOut("Hello, World!"); + + string imageArm64Tagged = $"{registry}/test-image-{imageName}-arm64"; + ContainerCli.PullCommand( + _testOutput, + "--platform", + "linux/arm64", + $"{registry}/{imageIndex}") + .Execute() + .Should().Pass(); + ContainerCli.TagCommand( + _testOutput, + $"{registry}/{imageIndex}", + imageArm64Tagged) + .Execute() + .Should().Pass(); + CommandResult processResultArm64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + $"test-container-{imageName}-arm64", + imageArm64Tagged) + .Execute(); + processResultArm64.Should().Pass().And.HaveStdOut("Hello, World!"); + + // Cleanup + newProjectDir.Delete(true); + } + + [DockerAvailableFact] + public void EndToEndMultiArch_ContainerRuntimeIdentifiersOverridesRuntimeIdentifiers() + { + // Create a new console project + DirectoryInfo newProjectDir = CreateNewProject("console"); + string imageName = NewImageName(); + string imageTag = "1.0"; + + // Run PublishContainer for multi-arch with ContainerRuntimeIdentifiers + // RuntimeIdentifiers should contain all the RIDs from ContainerRuntimeIdentifiers to be able to publish + CommandResult commandResult = new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + "/p:ContainerRuntimeIdentifiers=linux-arm64", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute(); + + // Check that the app was published only for RID from ContainerRuntimeIdentifiers + // images were created locally only for RID for from ContainerRuntimeIdentifiers + commandResult.Should().Pass() + .And.NotHaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-x64")) + .And.HaveStdOutContaining(GetPublishArtifactsPath(newProjectDir.FullName, "linux-arm64")) + .And.NotHaveStdOutContaining($"Pushed image '{imageName}:{imageTag}-linux-x64' to local registry") + .And.HaveStdOutContaining($"Pushed image '{imageName}:{imageTag}-linux-arm64' to local registry"); + + // Cleanup + newProjectDir.Delete(true); + } + + [DockerIsAvailableAndSupportsArchFact("linux/arm64")] + public void EndToEndMultiArch_EnvVariables() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + string imageArm64 = $"{imageName}:{imageTag}-linux-arm64"; + + // Create new console app, set ContainerEnvironmentVariables, and set to output env variable + DirectoryInfo newProjectDir = CreateNewProject("console"); + var csprojPath = Path.Combine(newProjectDir.FullName, $"{nameof(EndToEndMultiArch_EnvVariables)}.csproj"); + var csprojContent = File.ReadAllText(csprojPath); + csprojContent = csprojContent.Replace("", + """ + + + + + + """); + File.WriteAllText(csprojPath, csprojContent); + File.WriteAllText(Path.Combine(newProjectDir.FullName, "Program.cs"), + """ + Console.Write(Environment.GetEnvironmentVariable("GoodEnvVar")); + Console.Write(Environment.GetEnvironmentVariable("AnotherEnvVar")); + """); + + // Run PublishContainer for multi-arch + new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + + // Check that the env var is printed + string containerNameX64 = $"test-container-{imageName}-x64"; + CommandResult processResultX64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + containerNameX64, + imageX64) + .Execute(); + processResultX64.Should().Pass().And.HaveStdOut("FooBar"); + + // Check that the env var is printed + string containerNameArm64 = $"test-container-{imageName}-arm64"; + CommandResult processResultArm64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + containerNameArm64, + imageArm64) + .Execute(); + processResultArm64.Should().Pass().And.HaveStdOut("FooBar"); + + // Cleanup + newProjectDir.Delete(true); + } + + [DockerIsAvailableAndSupportsArchFact("linux/arm64")] + public void EndToEndMultiArch_Ports() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + string imageArm64 = $"{imageName}:{imageTag}-linux-arm64"; + + // Create new web app, set ContainerPort + DirectoryInfo newProjectDir = CreateNewProject("webapp"); + var csprojPath = Path.Combine(newProjectDir.FullName, $"{nameof(EndToEndMultiArch_Ports)}.csproj"); + var csprojContent = File.ReadAllText(csprojPath); + csprojContent = csprojContent.Replace("", + """ + + + + + + """); + File.WriteAllText(csprojPath, csprojContent); + + // Run PublishContainer for multi-arch + new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + + // Check that the ports are correct + var containerNameX64 = $"test-container-{imageName}-x64"; + CommandResult processResultX64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + containerNameX64, + "-P", + "--detach", + imageX64) + .Execute(); + processResultX64.Should().Pass(); + + // 8080 is the default port + CheckPorts(containerNameX64, [8080, 8082, 8083], [8081]); + + // Check that the ports are correct + var containerNameArm64 = $"test-container-{imageName}-arm64"; + CommandResult processResultArm64 = ContainerCli.RunCommand( + _testOutput, + "--rm", + "--name", + containerNameArm64, + "-P", + "--detach", + imageArm64) + .Execute(); + processResultArm64.Should().Pass(); + + // 8080 is the default port + CheckPorts(containerNameArm64, [8080, 8082, 8083], [8081]); + + // Cleanup + // we ran containers with detached option, so we need to stop them + ContainerCli.StopCommand(_testOutput, containerNameX64) + .Execute() + .Should().Pass(); + ContainerCli.StopCommand(_testOutput, containerNameArm64) + .Execute() + .Should().Pass(); + newProjectDir.Delete(true); + } + + private void CheckPorts(string containerName, int[] correctPorts, int[] incorrectPorts) + { + foreach (var port in correctPorts) + { + // Check the provided port is available + ContainerCli.PortCommand(_testOutput, containerName, port) + .Execute().Should().Pass(); + } + foreach (var port in incorrectPorts) + { + // Check that not provided port is not available + ContainerCli.PortCommand(_testOutput, containerName, port) + .Execute().Should().Fail(); + } + } + + [DockerAvailableFact] + public void EndToEndMultiArch_Labels() + { + string imageName = NewImageName(); + string imageTag = "1.0"; + string imageX64 = $"{imageName}:{imageTag}-linux-x64"; + + // Create new console app + DirectoryInfo newProjectDir = CreateNewProject("webapp"); + + // Run PublishContainer for multi-arch with ContainerGenerateLabels + new DotnetCommand( + _testOutput, + "build", + "/t:PublishContainer", + "/p:RuntimeIdentifiers=\"linux-x64;linux-arm64\"", + $"/p:ContainerBaseImage={DockerRegistryManager.FullyQualifiedBaseImageAspNet}", + $"/p:ContainerRepository={imageName}", + $"/p:ContainerImageTag={imageTag}", + "/p:EnableSdkContainerSupport=true") + .WithWorkingDirectory(newProjectDir.FullName) + .Execute() + .Should().Pass(); + + // Check that labels are set + CommandResult inspectResult = ContainerCli.InspectCommand( + _testOutput, + "--format={{json .Config.Labels}}", + imageX64) + .Execute(); + inspectResult.Should().Pass(); + var labels = JsonSerializer.Deserialize>(inspectResult.StdOut ?? string.Empty); + labels.Should().NotBeNull().And.HaveCountGreaterThan(0); + labels!.Values.Should().AllSatisfy(value => value.Should().NotBeNullOrEmpty()); + + // Cleanup + newProjectDir.Delete(true); + } + [DockerSupportsArchInlineData("linux/arm/v7", "linux-arm", "/app")] [DockerSupportsArchInlineData("linux/arm64/v8", "linux-arm64", "/app")] [DockerSupportsArchInlineData("linux/386", "linux-x86", "/app", Skip = "There's no apphost for linux-x86 so we can't execute self-contained, and there's no .NET runtime base image for linux-x86 so we can't execute framework-dependent.")] @@ -721,7 +1195,7 @@ public async Task CanPackageForAllSupportedContainerRIDs(string dockerPlatform, var isWin = rid.StartsWith("win"); ImageBuilder? imageBuilder = await registry.GetImageManifestAsync( DockerRegistryManager.RuntimeBaseImage, - isWin ? DockerRegistryManager.Net8PreviewWindowsSpecificImageTag : DockerRegistryManager.Net9PreviewImageTag, + isWin ? DockerRegistryManager.Net8PreviewWindowsSpecificImageTag : DockerRegistryManager.Net9ImageTag, rid, ToolsetUtils.RidGraphManifestPicker, cancellationToken: default).ConfigureAwait(false); @@ -738,7 +1212,7 @@ public async Task CanPackageForAllSupportedContainerRIDs(string dockerPlatform, BuiltImage builtImage = imageBuilder.Build(); // Load the image into the local registry - var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9PreviewImageTag); + var sourceReference = new SourceImageReference(registry, DockerRegistryManager.RuntimeBaseImage, DockerRegistryManager.Net9ImageTag); var destinationReference = new DestinationImageReference(registry, NewImageName(), new[] { rid }); await new DockerCli(_loggerFactory).LoadAsync(builtImage, sourceReference, destinationReference, default).ConfigureAwait(false); diff --git a/test/Microsoft.NET.Build.Containers.IntegrationTests/TargetsTests.cs b/test/Microsoft.NET.Build.Containers.IntegrationTests/TargetsTests.cs index abb4d2b04559..88518f779397 100644 --- a/test/Microsoft.NET.Build.Containers.IntegrationTests/TargetsTests.cs +++ b/test/Microsoft.NET.Build.Containers.IntegrationTests/TargetsTests.cs @@ -387,6 +387,39 @@ public void MuslRidsGetAlpineContainers(string tfm, string rid, string expectedI computedBaseImageTag.Should().BeEquivalentTo(expectedImage); } + [InlineData("linux-musl-x64;linux-musl-arm64", "mcr.microsoft.com/dotnet/runtime:8.0-alpine")] + [InlineData("linux-x64;linux-arm64", "mcr.microsoft.com/dotnet/runtime:8.0")] + [Theory] + public void AllMuslRidsGetAlpineContainers(string rids, string expectedImage) + { + var (project, logger, d) = ProjectInitializer.InitProject(new() + { + ["NetCoreSdkVersion"] = "8.0.100", + ["TargetFrameworkVersion"] = "v8.0", + [KnownStrings.Properties.ContainerRuntimeIdentifier] = rids, + }, projectName: $"{nameof(AllMuslRidsGetAlpineContainers)}"); + using var _ = d; + var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None); + instance.Build(new[] { ComputeContainerBaseImage }, null, null, out var outputs).Should().BeTrue(String.Join(Environment.NewLine, logger.Errors)); + var computedBaseImageTag = instance.GetProperty(ContainerBaseImage)?.EvaluatedValue; + computedBaseImageTag.Should().BeEquivalentTo(expectedImage); + } + + [Fact] + public void NotAllMuslRidsLogsError() + { + var (project, logger, d) = ProjectInitializer.InitProject(new() + { + ["NetCoreSdkVersion"] = "8.0.100", + ["TargetFrameworkVersion"] = "v8.0", + [KnownStrings.Properties.ContainerRuntimeIdentifier] = "linux-musl-x64;linux-arm64", + }, projectName: $"{nameof(NotAllMuslRidsLogsError)}"); + using var _ = d; + var instance = project.CreateProjectInstance(global::Microsoft.Build.Execution.ProjectInstanceSettings.None); + instance.Build(new[] { ComputeContainerBaseImage }, [logger], null, out var outputs).Should().BeFalse(String.Join(Environment.NewLine, logger.Errors)); + logger.Errors.Should().ContainSingle(error => error.Message == Resources.Strings.InvalidTargetRuntimeIdentifiers); + } + [InlineData("linux-musl-x64", "mcr.microsoft.com/dotnet/nightly/runtime-deps:8.0-alpine-aot")] [InlineData("linux-x64", "mcr.microsoft.com/dotnet/nightly/runtime-deps:8.0-jammy-chiseled-aot")] [Theory] diff --git a/test/Microsoft.NET.Build.Containers.UnitTests/ImageIndexGeneratorTests.cs b/test/Microsoft.NET.Build.Containers.UnitTests/ImageIndexGeneratorTests.cs new file mode 100644 index 000000000000..ef6e5bb84b2a --- /dev/null +++ b/test/Microsoft.NET.Build.Containers.UnitTests/ImageIndexGeneratorTests.cs @@ -0,0 +1,166 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.NET.Build.Containers.Resources; + +namespace Microsoft.NET.Build.Containers.UnitTests; + +public class ImageIndexGeneratorTests +{ + [Fact] + public void ImagesCannotBeEmpty() + { + ImageInfo[] images = Array.Empty(); + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal(Strings.ImagesEmpty, ex.Message); + } + + [Fact] + public void UnsupportedMediaTypeThrows() + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + ManifestMediaType = "unsupported" + } + }; + + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal(string.Format(Strings.UnsupportedMediaType, "unsupported"), ex.Message); + } + + [Theory] + [InlineData(SchemaTypes.DockerManifestV2)] + [InlineData(SchemaTypes.OciManifestV1)] + public void ConfigIsNotJsonObjectThrows(string supportedMediaType) + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + Config = "[]", + Manifest = "", + ManifestMediaType = supportedMediaType + } + }; + + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal($"Config should be a JSON object. (Parameter 'Config')", ex.Message); + } + + [Theory] + [InlineData(SchemaTypes.DockerManifestV2)] + [InlineData(SchemaTypes.OciManifestV1)] + public void ConfigDoesNotContainArchitectureThrows(string supportedMediaType) + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + Config = "{}", + Manifest = "", + ManifestMediaType = supportedMediaType + } + }; + + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal($"Config should contain 'architecture'. (Parameter 'Config')", ex.Message); + } + + [Theory] + [InlineData(SchemaTypes.DockerManifestV2)] + [InlineData(SchemaTypes.OciManifestV1)] + public void ConfigDoesNotContainOsThrows(string supportedMediaType) + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + Config = "{\"architecture\":\"arch1\"}", + Manifest = "", + ManifestMediaType = supportedMediaType + } + }; + + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal($"Config should contain 'os'. (Parameter 'Config')", ex.Message); + } + + [Theory] + [InlineData(SchemaTypes.DockerManifestV2)] + [InlineData(SchemaTypes.OciManifestV1)] + public void ImagesWithMixedMediaTypes(string supportedMediaType) + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + Config = "{\"architecture\":\"arch1\",\"os\":\"os1\"}", + Manifest = "", + ManifestMediaType = supportedMediaType + }, + new ImageInfo + { + Config = "", + Manifest = "", + ManifestMediaType = "anotherMediaType" + } + }; + + var ex = Assert.Throws(() => ImageIndexGenerator.GenerateImageIndex(images)); + Assert.Equal(Strings.MixedMediaTypes, ex.Message); + } + + [Fact] + public void GenerateDockerManifestList() + { + ImageInfo[] images = + [ + new ImageInfo + { + Config = "{\"architecture\":\"arch1\",\"os\":\"os1\"}", + ManifestDigest = "sha256:digest1", + Manifest = "123", + ManifestMediaType = SchemaTypes.DockerManifestV2 + }, + new ImageInfo + { + Config = "{\"architecture\":\"arch2\",\"os\":\"os2\"}", + ManifestDigest = "sha256:digest2", + Manifest = "123", + ManifestMediaType = SchemaTypes.DockerManifestV2 + } + ]; + + var (imageIndex, mediaType) = ImageIndexGenerator.GenerateImageIndex(images); + Assert.Equal("{\"schemaVersion\":2,\"mediaType\":\"application/vnd.docker.distribution.manifest.list.v2\\u002Bjson\",\"manifests\":[{\"mediaType\":\"application/vnd.docker.distribution.manifest.v2\\u002Bjson\",\"size\":3,\"digest\":\"sha256:digest1\",\"platform\":{\"architecture\":\"arch1\",\"os\":\"os1\",\"variant\":null,\"features\":null,\"os.version\":null}},{\"mediaType\":\"application/vnd.docker.distribution.manifest.v2\\u002Bjson\",\"size\":3,\"digest\":\"sha256:digest2\",\"platform\":{\"architecture\":\"arch2\",\"os\":\"os2\",\"variant\":null,\"features\":null,\"os.version\":null}}]}", imageIndex); + Assert.Equal(SchemaTypes.DockerManifestListV2, mediaType); + } + + [Fact] + public void GenerateOciImageIndex() + { + ImageInfo[] images = new ImageInfo[] + { + new ImageInfo + { + Config = "{\"architecture\":\"arch1\",\"os\":\"os1\"}", + ManifestDigest = "sha256:digest1", + Manifest = "123", + ManifestMediaType = SchemaTypes.OciManifestV1 + }, + new ImageInfo + { + Config = "{\"architecture\":\"arch2\",\"os\":\"os2\"}", + ManifestDigest = "sha256:digest2", + Manifest = "123", + ManifestMediaType = SchemaTypes.OciManifestV1 + } + }; + + var (imageIndex, mediaType) = ImageIndexGenerator.GenerateImageIndex(images); + Assert.Equal("{\"schemaVersion\":2,\"mediaType\":\"application/vnd.oci.image.index.v1\\u002Bjson\",\"manifests\":[{\"mediaType\":\"application/vnd.oci.image.manifest.v1\\u002Bjson\",\"size\":3,\"digest\":\"sha256:digest1\",\"platform\":{\"architecture\":\"arch1\",\"os\":\"os1\",\"variant\":null,\"features\":null,\"os.version\":null}},{\"mediaType\":\"application/vnd.oci.image.manifest.v1\\u002Bjson\",\"size\":3,\"digest\":\"sha256:digest2\",\"platform\":{\"architecture\":\"arch2\",\"os\":\"os2\",\"variant\":null,\"features\":null,\"os.version\":null}}]}", imageIndex); + Assert.Equal(SchemaTypes.OciImageIndexV1, mediaType); + } +} diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs index 003bf7113278..be05a5d88d31 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildACppCliProject.cs @@ -54,16 +54,32 @@ public void It_builds_and_runs_with_package_reference() var testAsset = _testAssetsManager .CopyTestAsset("NetCoreCsharpAppReferenceCppCliLib") .WithSource() - .WithProjectChanges((projectPath, project) => ConfigureProject(projectPath, project, targetFramework, new string[] { "_EnablePackageReferencesInVCProjects", "IncludeWindowsSDKRefFrameworkReferences" })); + .WithProjectChanges((projectPath, project) => + { + ConfigureProject(projectPath, project, targetFramework, new string[] { "_EnablePackageReferencesInVCProjects", "IncludeWindowsSDKRefFrameworkReferences" }); + + var ns = project.Root.Name.Namespace; + // Use project-specific global packages folder so we can check what was downloaded + project.Root.Element(ns + "PropertyGroup") + .Add(new XElement(ns + "RestorePackagesPath", @"$(MSBuildProjectDirectory)\packages")); + + }); new BuildCommand(testAsset, "NETCoreCppCliTest") - .Execute("-p:Platform=x64") + .WithWorkingDirectory(testAsset.TestRoot) + .Execute("-p:Platform=x64", "/bl") .Should() .Pass(); var cppnProjProperties = GetPropertyValues(testAsset.TestRoot, "NETCoreCppCliTest", targetFramework: targetFramework); Assert.True(cppnProjProperties["_EnablePackageReferencesInVCProjects"] == "true"); Assert.True(cppnProjProperties["IncludeWindowsSDKRefFrameworkReferences"] == ""); + + var packagesFolder = Path.Combine(testAsset.TestRoot, "NETCoreCppCliTest", "packages"); + if (Directory.Exists(packagesFolder)) + { + new DirectoryInfo(packagesFolder).Should().NotHaveSubDirectories("microsoft.windows.sdk.net.ref"); + } } [FullMSBuildOnlyFact] diff --git a/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs b/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs index d712649cad1d..593fbe67e931 100644 --- a/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs +++ b/test/Microsoft.WebTools.AspireService.Tests/AspireServerServiceTests.cs @@ -25,6 +25,12 @@ public class AspireServerServiceTests(ITestOutputHelper output) env = new List { new EnvVar { Name = "var1", Value = "value1" } } }; + private static readonly TestRunSessionRequest Project2SessionRequest = new TestRunSessionRequest(Project1Path, debugging: false, launchProfile: null, disableLaunchProfile: false) + { + args = null, + env = new List { new EnvVar { Name = "var1", Value = "value1" } } + }; + [Fact] public async Task SessionStarted_Test() { @@ -111,6 +117,30 @@ public async Task LaunchProject_Success() mocks.Verify(); } + [Fact] + public async Task LaunchProject_WithNullArgs_PassesThroughNullArgs() + { + var mocks = new Mocks(); + + mocks.GetOrCreate() + .ImplementStartProjectAsync(DcpId, "2", requireNullArguments: true); + + var server = await GetAspireServer(mocks); + var tokens = server.GetServerVariables(); + + using HttpClient client = GetHttpClient(tokens); + + HttpResponseMessage response; + response = await client.PutAsJsonAsync(VersionedSessionUrl, Project2SessionRequest); + + Assert.Equal(HttpStatusCode.Created, response.StatusCode); + Assert.Equal($"{client.BaseAddress}run_session/2", response.Headers.Location.AbsoluteUri); + + await server.DisposeAsync(); + + mocks.Verify(); + } + [Fact] public async Task LaunchProject_Success_ThenStopProcessRequest() { diff --git a/test/Microsoft.WebTools.AspireService.Tests/Mocks/IAspireServerEventsMock.cs b/test/Microsoft.WebTools.AspireService.Tests/Mocks/IAspireServerEventsMock.cs index 9b0439914320..8cb5a0971356 100644 --- a/test/Microsoft.WebTools.AspireService.Tests/Mocks/IAspireServerEventsMock.cs +++ b/test/Microsoft.WebTools.AspireService.Tests/Mocks/IAspireServerEventsMock.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. using Moq; +using Moq.Language.Flow; namespace Aspire.Tools.Service.UnitTests; @@ -11,19 +12,28 @@ public IAspireServerEventsMock(Mocks mocks, MockBehavior? mockBehavior = null) { } - public IAspireServerEventsMock ImplementStartProjectAsync(string dcpId, string sessionId, Exception? ex = null) + public IAspireServerEventsMock ImplementStartProjectAsync(string dcpId, string sessionId, Exception? ex = null, bool requireNullArguments = false) { - MockObject.Setup(x => x.StartProjectAsync(dcpId, It.IsAny(), It.IsAny())) - .Returns(() => - { - if (ex is not null) - { - throw ex; - } + ISetup> setup; + if (requireNullArguments) + { + setup = MockObject.Setup(x => x.StartProjectAsync(dcpId, It.Is(plr => plr.Arguments == null), It.IsAny())); + } + else + { + setup = MockObject.Setup(x => x.StartProjectAsync(dcpId, It.IsAny(), It.IsAny())); + } + + setup.Returns(() => + { + if (ex is not null) + { + throw ex; + } + + return new ValueTask(sessionId); + }).Verifiable(); - return new ValueTask(sessionId); - }) - .Verifiable(); return this; } diff --git a/test/UnitTests.proj b/test/UnitTests.proj index d1ac0ae42d94..b2c866a918ca 100644 --- a/test/UnitTests.proj +++ b/test/UnitTests.proj @@ -8,7 +8,7 @@ true - 01:00:00 + 02:00:00 @@ -125,6 +125,7 @@ call %HELIX_CORRELATION_PAYLOAD%\t\RunTestsOnHelix.cmd $(TestFullMSBuild);$(HelixPreCommands) . $HELIX_CORRELATION_PAYLOAD/t/RunTestsOnHelix.sh;$(HelixPreCommands) PowerShell -ExecutionPolicy ByPass "dotnet nuget locals all -l | ForEach-Object { $_.Split(' ')[1]} | Where-Object{$_ -like '*cache'} | Get-ChildItem -Recurse -File -Filter '*.dat' | Measure";$(HelixPostCommands) + PowerShell -ExecutionPolicy ByPass "Get-ChildItem -Recurse -File -Filter '*hangdump.dmp' | Copy-Item -Destination $env:HELIX_WORKITEM_UPLOAD_ROOT";$(HelixPostCommands) $(RepoRoot)artifacts\bin\redist\$(Configuration)\dotnet $(Version) $(RepoRoot)artifacts\bin\Microsoft.DotNet.MSBuildSdkResolver diff --git a/test/dotnet-new.Tests/DotnetNewDetailsTest.Approval.cs b/test/dotnet-new.Tests/DotnetNewDetailsTest.Approval.cs index 3bd14607b92b..9d4d2564820c 100644 --- a/test/dotnet-new.Tests/DotnetNewDetailsTest.Approval.cs +++ b/test/dotnet-new.Tests/DotnetNewDetailsTest.Approval.cs @@ -31,14 +31,27 @@ public Task CanDisplayDetails_RemotePackage_NuGetFeedWithVersion() [Fact] public Task CanDisplayDetails_RemotePackage_NuGetFeedNoVersion() { - CommandResult commandResult = new DotnetNewCommand(_log, "details", _nuGetPackageId) - .WithCustomHive(CreateTemporaryFolder(folderName: "Home")) - .WithWorkingDirectory(CreateTemporaryFolder()) + var folder = CreateTemporaryFolder(); + + var createCommandResult = () => new DotnetNewCommand(_log, "details", _nuGetPackageId) + .WithCustomHive(CreateTemporaryFolder(folderName: "Home")) + .WithWorkingDirectory(folder) .Execute(); - commandResult - .Should() - .Pass(); + createCommandResult().Should().Fail(); + + File.WriteAllText(Path.Combine(folder, "NuGet.Config"), @" + + + + + + +"); + + var commandResult = createCommandResult(); + + commandResult.Should().Pass(); return Verify(commandResult.StdOut); }