diff --git a/.github/agents/dependency-update.md b/.github/agents/dependency-update.md index 4a8f70cae30..49231d3c5fa 100644 --- a/.github/agents/dependency-update.md +++ b/.github/agents/dependency-update.md @@ -57,7 +57,7 @@ consumes a test project, so every band takes the newest patch of its own band. L **Version ranges stay.** `[8.0.0,9.0.0)` is a compatibility contract, not a pin. -**`Bit.*` self-references track the in-development version**, currently `10.6.2`. Never read +**`Bit.*` self-references track the in-development version**, currently `11.0.0-pre-01`. Never read these off nuget.org — the published `latest` is behind the working tree by design, and unrelated higher-numbered lines exist there. diff --git a/.github/workflows/admin-sample.cd.yml b/.github/workflows/admin-sample.cd.yml index fe530432492..b4a3e91af0f 100644 --- a/.github/workflows/admin-sample.cd.yml +++ b/.github/workflows/admin-sample.cd.yml @@ -252,7 +252,7 @@ jobs: run: dotnet build AdminPanel/src/Client/AdminPanel.Client.Core/AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true --no-restore -c Release - name: Publish - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -o client -p:WasmEnableSIMD=true -p:Version="${{ vars.APP_VERSION}}" -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -o client -p:UseMonoRuntime=false -p:WasmEnableSIMD=true -p:Version="${{ vars.APP_VERSION}}" -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # what the stack traces this client logs are read back through: see the note in the server web job - name: Upload minifier map artifact @@ -309,6 +309,8 @@ jobs: Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} WindowsUpdate.FilesUrl: https://windows-adminpanel.bitplatform.dev + Kiosk.Enabled: true + Kiosk.PreventSleep: true - name: Generate CSS/JS files run: dotnet build AdminPanel\src\Client\AdminPanel.Client.Core\AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release @@ -401,13 +403,14 @@ jobs: dotnet build AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release - name: Publish aab - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -c Release -p:EnableLLVM=true -p:AndroidEnableProfiledAot=false -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="AdminPanel.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-android + # NETSDK1242 refuses Mono on .NET 11 android; the private opt-out turns it off, which is what makes EnableLLVM and AndroidEnableProfiledAot mean something again. + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -c Release -p:UseMonoRuntime=true -p:_DisableCheckForUnsupportedMonoMobileRuntime=true -p:EnableLLVM=true -p:AndroidEnableProfiledAot=false -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="AdminPanel.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-android - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: android-bundle - path: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net10.0-android/*-Signed.apk + path: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net11.0-android/*-Signed.apk # versionCode derives from APP_VERSION; bump it or Play rejects the bundle. - name: Upload to Google Play (internal track) @@ -415,7 +418,7 @@ jobs: with: serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} packageName: ${{ env.APP_BUNDLE_ID }} - releaseFiles: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net10.0-android/*-Signed.aab + releaseFiles: AdminPanel/src/Client/AdminPanel.Client.Maui/bin/Release/net11.0-android/*-Signed.aab releaseName: ${{ vars.APP_VERSION }} track: internal status: completed @@ -490,11 +493,11 @@ jobs: dotnet build AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release - name: Build ipa - run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="AdminPanel" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-ios + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Maui/AdminPanel.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="AdminPanel" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="AdminPanel" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-ios - name: Locate ipa id: ipa - run: echo "path=$(ls AdminPanel/src/Client/AdminPanel.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT + run: echo "path=$(ls AdminPanel/src/Client/AdminPanel.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT # App Store submission stays manual. - name: Upload to TestFlight diff --git a/.github/workflows/all.ci.yml b/.github/workflows/all.ci.yml index 43574fc7fb9..1bcc44672af 100644 --- a/.github/workflows/all.ci.yml +++ b/.github/workflows/all.ci.yml @@ -11,10 +11,13 @@ on: description: Boilerplate tests with PostgreSQL type: boolean default: true + # Off by default on .NET 11: MySql.EntityFrameworkCore has no EF 11 build, and the EF 10 one throws + # "Method not found: RelationalTypeMapping.Clone" the moment the DbContext is created. Turn it back + # on with the provider, not before - see the note next to the reference in Directory.Packages.props. boilerplate_mysql: description: Boilerplate tests with MySQL type: boolean - default: true + default: false boilerplate_mssql: description: Boilerplate tests with SQL Server type: boolean @@ -78,7 +81,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -109,7 +112,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -152,7 +155,7 @@ jobs: working-directory: TestPostgreSQL/src/Tests run: | dotnet build - pwsh bin/Debug/net10.0/playwright.ps1 install --with-deps + pwsh bin/Debug/net11.0/playwright.ps1 install --with-deps - name: Run tests (Blazor Server) id: test-postgresql-blazorserver @@ -218,7 +221,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -261,7 +264,7 @@ jobs: working-directory: TestMySql/src/Tests run: | dotnet build - pwsh bin/Debug/net10.0/playwright.ps1 install --with-deps + pwsh bin/Debug/net11.0/playwright.ps1 install --with-deps - name: Run tests (Blazor Server) id: test-mysql-blazorserver @@ -327,7 +330,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -374,7 +377,7 @@ jobs: working-directory: TestSqlServer/src/Tests run: | dotnet build - pwsh bin/Debug/net10.0/playwright.ps1 install --with-deps + pwsh bin/Debug/net11.0/playwright.ps1 install --with-deps - name: Run tests (Blazor Server) id: test-mssql-blazorserver @@ -431,7 +434,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -500,7 +503,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -590,7 +593,7 @@ jobs: dotnet pack src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj --output ./packages --configuration Release - name: Generate CSS/JS files BlazorUI - run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: Build and pack BlazorUI run: | @@ -598,7 +601,7 @@ jobs: dotnet pack src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj --output ./packages --configuration Release - name: Generate CSS/JS files BlazorUI.Extras - run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: Build and pack BlazorUI.Extras run: | @@ -606,7 +609,7 @@ jobs: dotnet pack src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj --output ./packages --configuration Release - name: Generate CSS/JS files BlazorUI.Legacy - run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: Build and pack BlazorUI.Legacy run: | @@ -614,7 +617,7 @@ jobs: dotnet pack src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj --output ./packages --configuration Release - name: Generate CSS/JS files BlazorUI.Assets - run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: Build and pack BlazorUI.Assets run: | @@ -622,7 +625,7 @@ jobs: dotnet pack src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj --output ./packages --configuration Release - name: Generate CSS/JS files BlazorUI.Icons - run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: Build and pack BlazorUI.Icons run: | @@ -709,7 +712,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -740,7 +743,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -771,7 +774,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -802,7 +805,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -833,7 +836,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -845,7 +848,7 @@ jobs: run: dotnet build src/Minifier/Bit.Minifier.slnx -c Release - name: Test Minifier - run: cd src/Minifier && dotnet test --project Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj -c Release --no-build + run: cd src/Minifier/Tests/Bit.Minifier.Tests && dotnet test -c Release --no-build - name: Build ResxTranslator solution in Release mode run: dotnet build src/ResxTranslator/Bit.ResxTranslator.slnx -c Release @@ -866,7 +869,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10 + - name: Setup .NET 11 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Besql.yml b/.github/workflows/bit.ci.Besql.yml index 1a04d1c933b..6852e8c2055 100644 --- a/.github/workflows/bit.ci.Besql.yml +++ b/.github/workflows/bit.ci.Besql.yml @@ -25,11 +25,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.BlazorES2019.yml b/.github/workflows/bit.ci.BlazorES2019.yml index e013496055c..c9c4f830064 100644 --- a/.github/workflows/bit.ci.BlazorES2019.yml +++ b/.github/workflows/bit.ci.BlazorES2019.yml @@ -25,11 +25,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.BlazorUI.yml b/.github/workflows/bit.ci.BlazorUI.yml index 49dd1da4ee3..d690a6c5307 100644 --- a/.github/workflows/bit.ci.BlazorUI.yml +++ b/.github/workflows/bit.ci.BlazorUI.yml @@ -26,11 +26,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -50,7 +55,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/BlazorUI/Bit.BlazorUI.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/BlazorUI/Bit.BlazorUI.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 # BuildAllTfms=true opts back into net9.0 and net8.0, which the Debug configuration skips so that local # inner-loop builds only compile the TFM the demo and the tests actually run on. diff --git a/.github/workflows/bit.ci.Bmotion.yml b/.github/workflows/bit.ci.Bmotion.yml index 072ff9151a0..cc914e65c77 100644 --- a/.github/workflows/bit.ci.Bmotion.yml +++ b/.github/workflows/bit.ci.Bmotion.yml @@ -25,11 +25,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -49,7 +54,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Bmotion/Bit.Bmotion.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Bmotion/Bit.Bmotion.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Bmotion/Bit.Bmotion.slnx @@ -57,10 +62,10 @@ jobs: - name: dotnet test (C# engine + component tests) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). - run: cd src/Bmotion && dotnet test Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj -f net10.0 --no-build + run: cd src/Bmotion/Tests/Bit.Bmotion.Tests && dotnet test -f net11.0 --no-build - name: dotnet test (MCP server) - run: cd src/Bmotion && dotnet test Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj -f net10.0 --no-build + run: cd src/Bmotion/Tests/Bit.Bmotion.Tests.Mcp && dotnet test -f net11.0 --no-build - name: JS tests (bit-bmotion.js drag/scroll math) run: | diff --git a/.github/workflows/bit.ci.Brouter.yml b/.github/workflows/bit.ci.Brouter.yml index db6dcc2491b..4d3bc812c4b 100644 --- a/.github/workflows/bit.ci.Brouter.yml +++ b/.github/workflows/bit.ci.Brouter.yml @@ -32,11 +32,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -56,25 +61,25 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Brouter/Bit.Brouter.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Brouter/Bit.Brouter.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Brouter/Bit.Brouter.slnx - name: dotnet test - run: cd src/Brouter && dotnet test Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj --no-build + run: cd src/Brouter/Tests/Bit.Brouter.Tests && dotnet test --no-build - name: dotnet test (MCP server) # Run from inside src so src/global.json's "test" runner setting applies # (from the repo root the SDK falls back to the unsupported VSTest path). - run: cd src/Brouter && dotnet test Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj --no-build + run: cd src/Brouter/Tests/Bit.Brouter.Tests.Mcp && dotnet test --no-build - name: dotnet test (source generator) - run: cd src/Brouter && dotnet test Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj --no-build + run: cd src/Brouter/Tests/Bit.Brouter.Tests.Generators && dotnet test --no-build - - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0) + - name: dotnet test (hosting - every render mode over HTTP, net8.0/net9.0/net10.0/net11.0) # Browser, hybrid and trimmed/AOT publish coverage are the stages below. - run: cd src/Brouter && dotnet test Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj --no-build + run: cd src/Brouter/Tests/Bit.Brouter.Tests.Hosting && dotnet test --no-build # Stage 2 - every web render mode (static SSR, Server, WebAssembly, Auto, with and without prerendering) in # Chromium, on each runtime the library ships for. @@ -85,7 +90,7 @@ jobs: strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -93,11 +98,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -119,7 +129,7 @@ jobs: run: dotnet build src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -128,8 +138,8 @@ jobs: BROUTER_E2E_SKIP_BUILD: 1 # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. run: > - cd src/Brouter && - dotnet test --project Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release --no-build + cd src/Brouter/Tests/Bit.Brouter.Tests.E2E && + dotnet test -c Release --no-build --filter "FullyQualifiedName!~HybridModeTests" --report-trx --report-trx-filename brouter-e2e-web-${{ matrix.framework }}.trx @@ -153,7 +163,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -189,8 +199,8 @@ jobs: BROUTER_E2E_CONFIGURATION: Release BROUTER_E2E_SKIP_BUILD: 1 run: > - cd src/Brouter && - dotnet test --project Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release --no-build + cd src/Brouter/Tests/Bit.Brouter.Tests.E2E && + dotnet test -c Release --no-build --filter "FullyQualifiedName~HybridModeTests" --report-trx --report-trx-filename brouter-e2e-hybrid.trx @@ -225,7 +235,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -245,14 +255,14 @@ jobs: run: dotnet build src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Brouter/Tests/Bit.Brouter.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: BROUTER_E2E_PUBLISHED_HOST: ${{ github.workspace }}/artifacts/harness-${{ matrix.name }} run: > - cd src/Brouter && - dotnet test --project Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj -c Release --no-build + cd src/Brouter/Tests/Bit.Brouter.Tests.E2E && + dotnet test -c Release --no-build --filter "FullyQualifiedName!~HybridModeTests" --report-trx --report-trx-filename brouter-publish-${{ matrix.name }}.trx diff --git a/.github/workflows/bit.ci.Bswup.yml b/.github/workflows/bit.ci.Bswup.yml index f5e3f2b2459..fb302e149c0 100644 --- a/.github/workflows/bit.ci.Bswup.yml +++ b/.github/workflows/bit.ci.Bswup.yml @@ -32,11 +32,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -62,17 +67,17 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Bswup/Bit.Bswup.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Bswup/Bit.Bswup.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Bswup/Bit.Bswup.slnx - name: dotnet test (MCP server) - run: cd src/Bswup && dotnet test Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj -f net10.0 --no-build + run: cd src/Bswup/Tests/Bit.Bswup.Tests.Mcp && dotnet test -f net11.0 --no-build - - name: dotnet test (hosting - served assets, host documents and BswupProgress over HTTP, net8.0/net9.0/net10.0) + - name: dotnet test (hosting - served assets, host documents and BswupProgress over HTTP, net8.0/net9.0/net10.0/net11.0) # Real-browser coverage (install, offline, updates, recovery) and the published-output gate are the stages below. - run: cd src/Bswup && dotnet test Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj --no-build + run: cd src/Bswup/Tests/Bit.Bswup.Tests.Hosting && dotnet test --no-build # Runs against Bit.Bswup/wwwroot/*.js, which the build above produces, so this also covers # the build step itself (e.g. the minifier re-introducing downleveled syntax). @@ -92,7 +97,7 @@ jobs: strategy: fail-fast: false matrix: - framework: [ net10.0, net9.0, net8.0 ] + framework: [ net11.0, net10.0, net9.0, net8.0 ] steps: - name: Checkout source code @@ -100,11 +105,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -126,7 +136,7 @@ jobs: run: dotnet build src/Bswup/Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -135,8 +145,8 @@ jobs: BSWUP_E2E_SKIP_BUILD: 1 # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. run: > - cd src/Bswup && - dotnet test --project Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release --no-build + cd src/Bswup/Tests/Bit.Bswup.Tests.E2E && + dotnet test -c Release --no-build --report-trx --report-trx-filename bswup-e2e-web-${{ matrix.framework }}.trx - name: Upload test results @@ -162,7 +172,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -171,25 +181,25 @@ jobs: with: node-version: 24 - # TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still + # TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate (and, without their SDKs installed, fail on) every framework they target. - name: Publish the harness host run: > dotnet publish src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj - -c Release -f net10.0 -p:TargetFrameworks=net10.0 -o ${{ github.workspace }}/artifacts/bswup-harness + -c Release -f net11.0 -p:TargetFrameworks=net11.0 -o ${{ github.workspace }}/artifacts/bswup-harness - name: Build the E2E suite run: dotnet build src/Bswup/Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Bswup/Tests/Bit.Bswup.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: BSWUP_E2E_PUBLISHED_HOST: ${{ github.workspace }}/artifacts/bswup-harness run: > - cd src/Bswup && - dotnet test --project Tests/Bit.Bswup.Tests.E2E/Bit.Bswup.Tests.E2E.csproj -c Release --no-build + cd src/Bswup/Tests/Bit.Bswup.Tests.E2E && + dotnet test -c Release --no-build --report-trx --report-trx-filename bswup-publish.trx - name: Upload test results diff --git a/.github/workflows/bit.ci.Butil.yml b/.github/workflows/bit.ci.Butil.yml index 9cc6f0093cf..73845cd299b 100644 --- a/.github/workflows/bit.ci.Butil.yml +++ b/.github/workflows/bit.ci.Butil.yml @@ -33,11 +33,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -57,7 +62,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Butil/Bit.Butil.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Butil/Bit.Butil.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Butil/Bit.Butil.slnx @@ -77,8 +82,8 @@ jobs: env: BUTIL_MCP_ARTIFACTS_PATH: ${{ runner.temp }}/bit-butil-mcp-tests run: > - cd src/Butil && - dotnet test tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj + cd src/Butil/tests/Bit.Butil.Tests.Mcp && + dotnet test --no-build --report-trx --report-trx-filename butil-mcp.trx @@ -90,13 +95,13 @@ jobs: path: '**/butil-mcp.trx' if-no-files-found: ignore - # Every render mode of the Blazor Web App harness host over HTTP, on net8.0/net9.0/net10.0: the prerendered + # Every render mode of the Blazor Web App harness host over HTTP, on net8.0/net9.0/net10.0/net11.0: the prerendered # pages, the served scripts, and every member of every service called during a static render. Browser, hybrid # and trimmed/AOT publish coverage are the stages below. - name: Hosting tests run: > - cd src/Butil && - dotnet test tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj + cd src/Butil/tests/Bit.Butil.Tests.Hosting && + dotnet test --no-build --report-trx --report-trx-filename butil-hosting.trx @@ -118,13 +123,15 @@ jobs: fail-fast: false matrix: include: - - { host: standalone, framework: net10.0 } + - { host: standalone, framework: net11.0 } + - { host: server, framework: net11.0 } + - { host: server-noprerender, framework: net11.0 } + - { host: wasm, framework: net11.0 } + - { host: wasm-noprerender, framework: net11.0 } + - { host: auto, framework: net11.0 } + - { host: auto-noprerender, framework: net11.0 } - { host: server, framework: net10.0 } - - { host: server-noprerender, framework: net10.0 } - { host: wasm, framework: net10.0 } - - { host: wasm-noprerender, framework: net10.0 } - - { host: auto, framework: net10.0 } - - { host: auto-noprerender, framework: net10.0 } - { host: server, framework: net9.0 } - { host: wasm, framework: net9.0 } - { host: server, framework: net8.0 } @@ -136,11 +143,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -164,7 +176,7 @@ jobs: run: dotnet build src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests env: @@ -174,8 +186,8 @@ jobs: BUTIL_E2E_SKIP_BUILD: 1 # Run from inside src so src/global.json's Microsoft.Testing.Platform runner setting applies. run: > - cd src/Butil && - dotnet test --project tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release --no-build + cd src/Butil/tests/Bit.Butil.Tests.E2E && + dotnet test -c Release --no-build --report-trx --report-trx-filename butil-e2e-${{ matrix.host }}-${{ matrix.framework }}.trx - name: Upload test results @@ -198,7 +210,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -235,8 +247,8 @@ jobs: BUTIL_E2E_CONFIGURATION: Release BUTIL_E2E_SKIP_BUILD: 1 run: > - cd src/Butil && - dotnet test --project tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release --no-build + cd src/Butil/tests/Bit.Butil.Tests.E2E && + dotnet test -c Release --no-build --report-trx --report-trx-filename butil-e2e-hybrid.trx - name: Upload test results @@ -271,7 +283,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -291,15 +303,15 @@ jobs: run: dotnet build src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release - name: Install Playwright Chromium - run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net10.0/playwright.ps1 install --with-deps chromium + run: pwsh src/Butil/tests/Bit.Butil.Tests.E2E/bin/Release/net11.0/playwright.ps1 install --with-deps chromium - name: Run E2E tests against the published host env: BUTIL_E2E_HOST: wasm BUTIL_E2E_PUBLISHED_HOST: ${{ github.workspace }}/artifacts/butil-harness-${{ matrix.name }} run: > - cd src/Butil && - dotnet test --project tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj -c Release --no-build + cd src/Butil/tests/Bit.Butil.Tests.E2E && + dotnet test -c Release --no-build --report-trx --report-trx-filename butil-publish-${{ matrix.name }}.trx - name: Upload test results diff --git a/.github/workflows/bit.ci.CodeAnalyzers.yml b/.github/workflows/bit.ci.CodeAnalyzers.yml index 904a8028968..625f7b21048 100644 --- a/.github/workflows/bit.ci.CodeAnalyzers.yml +++ b/.github/workflows/bit.ci.CodeAnalyzers.yml @@ -25,7 +25,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Minifier.yml b/.github/workflows/bit.ci.Minifier.yml index b53b64d54d5..59830576629 100644 --- a/.github/workflows/bit.ci.Minifier.yml +++ b/.github/workflows/bit.ci.Minifier.yml @@ -25,7 +25,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -34,4 +34,4 @@ jobs: run: dotnet build src/Minifier/Bit.Minifier.slnx - name: dotnet test - run: cd src/Minifier && dotnet test --project Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj --no-build + run: cd src/Minifier/Tests/Bit.Minifier.Tests && dotnet test --no-build diff --git a/.github/workflows/bit.ci.ResxTranslator.yml b/.github/workflows/bit.ci.ResxTranslator.yml index 88ed3b673b5..ee15c759ccf 100644 --- a/.github/workflows/bit.ci.ResxTranslator.yml +++ b/.github/workflows/bit.ci.ResxTranslator.yml @@ -25,6 +25,16 @@ jobs: with: persist-credentials: false + - name: Setup .NET 11.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + global-json-file: src/global.json + + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: diff --git a/.github/workflows/bit.ci.SourceGenerators.yml b/.github/workflows/bit.ci.SourceGenerators.yml index 0f972379e53..151fa7c370d 100644 --- a/.github/workflows/bit.ci.SourceGenerators.yml +++ b/.github/workflows/bit.ci.SourceGenerators.yml @@ -25,7 +25,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json diff --git a/.github/workflows/bit.ci.Templates.yml b/.github/workflows/bit.ci.Templates.yml index d602809bd01..de01f6af612 100644 --- a/.github/workflows/bit.ci.Templates.yml +++ b/.github/workflows/bit.ci.Templates.yml @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -40,7 +40,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Templates/Boilerplate/Bit.Boilerplate/Boilerplate.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Templates/Boilerplate/Bit.Boilerplate/Boilerplate.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: Verify formatting run: dotnet format whitespace src/Templates/Boilerplate/Bit.Boilerplate/Boilerplate.slnx --verify-no-changes diff --git a/.github/workflows/bit.ci.Websites.yml b/.github/workflows/bit.ci.Websites.yml index c0f8bc27ee0..745311b0902 100644 --- a/.github/workflows/bit.ci.Websites.yml +++ b/.github/workflows/bit.ci.Websites.yml @@ -26,7 +26,7 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json @@ -40,15 +40,15 @@ jobs: - name: InstallNodejsDependencies for Careers continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Websites/Careers/Bit.Websites.Careers.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Websites/Careers/Bit.Websites.Careers.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: InstallNodejsDependencies for Platform continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Websites/Platform/Bit.Websites.Platform.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Websites/Platform/Bit.Websites.Platform.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: InstallNodejsDependencies for Sales continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Websites/Sales/Bit.Websites.Sales.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Websites/Sales/Bit.Websites.Sales.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: Build Careers run: dotnet build src/Websites/Careers/Bit.Websites.Careers.slnx diff --git a/.github/workflows/bit.ci.release.yml b/.github/workflows/bit.ci.release.yml index 56dc36b1271..35ccb2e17c6 100644 --- a/.github/workflows/bit.ci.release.yml +++ b/.github/workflows/bit.ci.release.yml @@ -24,11 +24,16 @@ jobs: with: persist-credentials: false - - name: Setup .NET 10.0 + - name: Setup .NET 11.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: global-json-file: src/global.json + - name: Setup .NET 10.0 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + - name: Setup .NET 9.0 uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: @@ -48,7 +53,7 @@ jobs: - name: InstallNodejsDependencies continue-on-error: true # Error MSB4057, not all csproj files have InstallNodejsDependencies target. - run: dotnet build src/Bit.CI.Release.slnx -t:InstallNodejsDependencies -m:1 -f net10.0 + run: dotnet build src/Bit.CI.Release.slnx -t:InstallNodejsDependencies -m:1 -f net11.0 - name: dotnet build run: dotnet build src/Bit.CI.Release.slnx -c Release diff --git a/.github/workflows/blazorui.demo.cd.yml b/.github/workflows/blazorui.demo.cd.yml index a6212734568..e309e077304 100644 --- a/.github/workflows/blazorui.demo.cd.yml +++ b/.github/workflows/blazorui.demo.cd.yml @@ -224,13 +224,13 @@ jobs: run: dotnet build src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Bit.BlazorUI.Demo.Client.Core.csproj -p:Version="${{ vars.APP_VERSION}}" -c Release - name: Publish aab - run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="BitBlazorUIDemo.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net10.0-android + run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="BitBlazorUIDemo.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net11.0-android - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: android-bundle - path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net10.0-android/*-Signed.apk + path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net11.0-android/*-Signed.apk # versionCode derives from APP_VERSION; bump it or Play rejects the bundle. - name: Upload to Google Play (internal track) @@ -238,7 +238,7 @@ jobs: with: serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} packageName: ${{ env.APP_BUNDLE_ID }} - releaseFiles: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net10.0-android/*-Signed.aab + releaseFiles: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net11.0-android/*-Signed.aab releaseName: ${{ vars.APP_VERSION }} track: internal status: completed @@ -297,11 +297,11 @@ jobs: run: dotnet build src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Bit.BlazorUI.Demo.Client.Core.csproj -p:Version="${{ vars.APP_VERSION}}" -c Release - name: Build ipa - run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="Bit Blazor UI Demo" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net10.0-ios + run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="Bit Blazor UI Demo" -p:Version="${{ vars.APP_VERSION }}" -p:CompressionEnabled=false -f net11.0-ios - name: Locate ipa id: ipa - run: echo "path=$(ls src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT + run: echo "path=$(ls src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT # App Store submission stays manual. - name: Upload to TestFlight diff --git a/.github/workflows/nuget.org.yml b/.github/workflows/nuget.org.yml index 3a5be637d60..023c500f6cb 100644 --- a/.github/workflows/nuget.org.yml +++ b/.github/workflows/nuget.org.yml @@ -91,35 +91,35 @@ jobs: dotnet pack src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI - run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI run: dotnet pack src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Extras - run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Extras run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Extras run: dotnet pack src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Legacy - run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Legacy run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Legacy run: dotnet pack src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Assets - run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Assets run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Assets run: dotnet pack src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Icons - run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Icons run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Icons diff --git a/.github/workflows/prerelease.nuget.org.yml b/.github/workflows/prerelease.nuget.org.yml index 2a46aa04528..2b0e268d6dc 100644 --- a/.github/workflows/prerelease.nuget.org.yml +++ b/.github/workflows/prerelease.nuget.org.yml @@ -79,35 +79,35 @@ jobs: dotnet pack src/BlazorES2019/Bit.BlazorES2019/Bit.BlazorES2019.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI - run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI run: dotnet build src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI run: dotnet pack src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Extras - run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Extras run: dotnet build src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Extras run: dotnet pack src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Legacy - run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Legacy run: dotnet build src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Legacy run: dotnet pack src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Assets - run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Assets run: dotnet build src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Assets run: dotnet pack src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj --output . --configuration Release - name: Generate CSS/JS files BlazorUI.Icons - run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net10.0 -c Release + run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -t:BeforeBuildTasks --no-restore -f:net11.0 -c Release - name: dotnet build BlazorUI.Icons run: dotnet build src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj -c Release -p:GeneratePackageOnBuild=false -p:WarningLevel=0 -p:RunCodeAnalysis=false - name: dotnet pack BlazorUI.Icons diff --git a/.github/workflows/todo-sample.cd.yml b/.github/workflows/todo-sample.cd.yml index 4c44a1785c8..8641bbb8f39 100644 --- a/.github/workflows/todo-sample.cd.yml +++ b/.github/workflows/todo-sample.cd.yml @@ -414,7 +414,7 @@ jobs: run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks -p:WasmEnableSIMD=true -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release - name: Publish - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o client -p:Version="${{ vars.APP_VERSION}}" -p:WasmEnableSIMD=true -p:InvariantGlobalization=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" + run: dotnet publish TodoSample/src/Client/TodoSample.Client.Web/TodoSample.Client.Web.csproj -c Release -o client -p:Version="${{ vars.APP_VERSION}}" -p:UseMonoRuntime=false -p:WasmEnableSIMD=true -p:InvariantGlobalization=true -p:BitMinifyAggressive=true -p:BitMinifyMapOutputPath="${{ github.workspace }}/bit-minifier.map" # what the stack traces this client logs are read back through: see the note in the server web job - name: Upload minifier map artifact @@ -584,13 +584,13 @@ jobs: dotnet build TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release - name: Publish aab - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="TodoSample.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-android + run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:AndroidPackageFormats=aab%3Bapk -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="TodoSample.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-android - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: android-bundle - path: TodoSample/src/Client/TodoSample.Client.Maui/bin/Release/net10.0-android/*-Signed.apk + path: TodoSample/src/Client/TodoSample.Client.Maui/bin/Release/net11.0-android/*-Signed.apk # versionCode derives from APP_VERSION; bump it or Play rejects the bundle. - name: Upload to Google Play (internal track) @@ -598,7 +598,7 @@ jobs: with: serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }} packageName: ${{ env.APP_BUNDLE_ID }} - releaseFiles: TodoSample/src/Client/TodoSample.Client.Maui/bin/Release/net10.0-android/*-Signed.aab + releaseFiles: TodoSample/src/Client/TodoSample.Client.Maui/bin/Release/net11.0-android/*-Signed.aab releaseName: ${{ vars.APP_VERSION }} track: internal status: completed @@ -694,11 +694,11 @@ jobs: dotnet build TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APP_VERSION}}" --no-restore -c Release - name: Build ipa - run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="TodoTemplate" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="Todo" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net10.0-ios + run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="TodoTemplate" -p:Version="${{ vars.APP_VERSION }}" -p:ApplicationTitle="Todo" -p:ApplicationId="${{ env.APP_BUNDLE_ID }}" -f net11.0-ios - name: Locate ipa id: ipa - run: echo "path=$(ls TodoSample/src/Client/TodoSample.Client.Maui/bin/release/net10.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT + run: echo "path=$(ls TodoSample/src/Client/TodoSample.Client.Maui/bin/release/net11.0-ios/ios-arm64/publish/*.ipa | head -n 1)" >> $GITHUB_OUTPUT # App Store submission stays manual. - name: Upload to TestFlight diff --git a/.vscode/mcp.json b/.vscode/mcp.json index 38b444475b2..adf42671d6a 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -2,7 +2,7 @@ "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "github": { "type": "http", diff --git a/nuget.config b/nuget.config new file mode 100644 index 00000000000..ea281ca924e --- /dev/null +++ b/nuget.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/Besql/Bit.Besql/Bit.Besql.csproj b/src/Besql/Bit.Besql/Bit.Besql.csproj index 630bc3e186f..04062ab5d0c 100644 --- a/src/Besql/Bit.Besql/Bit.Besql.csproj +++ b/src/Besql/Bit.Besql/Bit.Besql.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable $(NoWarn);IL2091;EF1001 enable @@ -24,8 +24,11 @@ + + + diff --git a/src/Besql/Bit.Besql/wwwroot/bit-besql.js b/src/Besql/Bit.Besql/wwwroot/bit-besql.js index 62c1309b6cf..2a931671ff9 100644 --- a/src/Besql/Bit.Besql/wwwroot/bit-besql.js +++ b/src/Besql/Bit.Besql/wwwroot/bit-besql.js @@ -1,5 +1,5 @@ var BitBesql = window.BitBesql || {}; -BitBesql.version = window['bit-besql version'] = '10.6.2'; +BitBesql.version = window['bit-besql version'] = '11.0.0-pre-01'; BitBesql.persist = async function besqlPersist(fileName) { diff --git a/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj b/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj index 32bfea3a145..e213f82cbca 100644 --- a/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj +++ b/src/Besql/Demo/Bit.Besql.Demo.Client/Bit.Besql.Demo.Client.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj b/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj index 20d46080457..ba5b21ccb8e 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj +++ b/src/Besql/Demo/Bit.Besql.Demo/Bit.Besql.Demo.csproj @@ -1,14 +1,14 @@  - net10.0 + net11.0 enable enable - + @@ -17,11 +17,11 @@ and open Nuget Package Manager Console, and select `Bit.Besql.Demo.Client` project as default project Then run either Add-Migration MigrationName -OutputDir Data\Migrations or Optimize-DbContext -OutputDir Data\CompiledModel commands. --> - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Besql/Demo/Bit.Besql.Demo/Program.cs b/src/Besql/Demo/Bit.Besql.Demo/Program.cs index e1bfb2039f5..fcf1980bd0f 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Program.cs +++ b/src/Besql/Demo/Bit.Besql.Demo/Program.cs @@ -13,11 +13,7 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json b/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json index 7f09e1b5807..c64befa48f3 100644 --- a/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json +++ b/src/Besql/Demo/Bit.Besql.Demo/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5050;http://localhost:5051", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Bit.Build.props b/src/Bit.Build.props index 18589222511..d541ae939fa 100644 --- a/src/Bit.Build.props +++ b/src/Bit.Build.props @@ -27,7 +27,7 @@ https://github.com/bitfoundation/bitplatform - 10.6.2 + 11.0.0-pre-01 $(ReleaseVersion) https://github.com/bitfoundation/bitplatform/releases/tag/v-$(ReleaseVersion) $([System.String]::Copy($(ReleaseVersion)).Replace('-pre-', '.')) @@ -38,7 +38,7 @@ en preview enable - $(NoWarn);NU1605;CS1591;NU1701;CA1303;CA1308;CA2007;CA1014;CA2227;BL0007;CA1056;BL0005;CS1998 + $(NoWarn);NU1605;CS1591;NU1701;CA1303;CA1308;CA2007;CA1014;CA2227;BL0007;CA1056;BL0005;CS1998;BL0016 $(WarningsAsErrors);CS0114;RZ10012 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml diff --git a/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets b/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets index 47a52c3c7b3..8cffa4481c0 100644 --- a/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets +++ b/src/BlazorES2019/Bit.BlazorES2019/buildTransitive/Bit.BlazorES2019.targets @@ -1,13 +1,13 @@ - - + + PreserveNewest PreserveNewest wwwroot\_framework\%(Filename)%(Extension) - - + + PreserveNewest PreserveNewest wwwroot\_framework\%(Filename)%(Extension) diff --git a/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj b/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj index a85e90a92e8..8972ca310ab 100644 --- a/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Assets/Bit.BlazorUI.Assets.csproj @@ -3,12 +3,12 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable - + BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) @@ -22,6 +22,7 @@ + @@ -36,7 +37,7 @@ - + diff --git a/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj b/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj index 089cf7bda0d..675550019a0 100644 --- a/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Extras/Bit.BlazorUI.Extras.csproj @@ -3,12 +3,12 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable - + BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) @@ -22,6 +22,7 @@ + @@ -63,7 +64,7 @@ - + diff --git a/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj b/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj index 40fee4451a9..b87db70a9c2 100644 --- a/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Icons/Bit.BlazorUI.Icons.csproj @@ -3,12 +3,12 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 Bit.BlazorUI 0 - + BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) @@ -22,7 +22,7 @@ - + diff --git a/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj b/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj index 9666b7e1868..d5edc78a1f6 100644 --- a/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj +++ b/src/BlazorUI/Bit.BlazorUI.Legacy/Bit.BlazorUI.Legacy.csproj @@ -3,12 +3,12 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + net11.0 true enable - + BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) @@ -22,6 +22,7 @@ + @@ -60,7 +61,7 @@ - + diff --git a/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj b/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj index c3785ad8f0e..39f57905cd0 100644 --- a/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj +++ b/src/BlazorUI/Bit.BlazorUI/Bit.BlazorUI.csproj @@ -3,14 +3,14 @@ - net10.0;net9.0;net8.0 - - net10.0 + net11.0;net10.0;net9.0;net8.0 + + net11.0 true enable - + BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) @@ -31,6 +31,7 @@ + @@ -67,7 +68,7 @@ - + diff --git a/src/BlazorUI/Bit.BlazorUI/Info.cs b/src/BlazorUI/Bit.BlazorUI/Info.cs index 00acd5fc6b4..09ce9690145 100644 --- a/src/BlazorUI/Bit.BlazorUI/Info.cs +++ b/src/BlazorUI/Bit.BlazorUI/Info.cs @@ -8,5 +8,5 @@ public static class Info /// /// The current version string of bit BlazorUI. /// - public static string Version { get; } = "10.6.2"; + public static string Version { get; } = "11.0.0-pre-01"; } diff --git a/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts b/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts index 7749c2fcb16..417b52714dd 100644 --- a/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts +++ b/src/BlazorUI/Bit.BlazorUI/Scripts/general.ts @@ -1,4 +1,4 @@ -(BitBlazorUI as any).version = (window as any)['bit-blazorui version'] = '10.6.2'; +(BitBlazorUI as any).version = (window as any)['bit-blazorui version'] = '11.0.0-pre-01'; interface DotNetObject { invokeMethod(methodIdentifier: string, ...args: any[]): T; diff --git a/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj b/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj index b684433662f..f353c2ac430 100644 --- a/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj +++ b/src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 fcf350f4-eef5-430b-a5cb-144713a68932 @@ -20,19 +20,19 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj index 4b0027f7cf1..25fcc1c3021 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj @@ -1,11 +1,11 @@ - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -19,8 +19,6 @@ com.bitplatform.BlazorUI.Demo AC87AA5B-4B37-4E52-8468-2D5DF24AF258 - - True $(NoWarn);ClassWithoutModifierAnalyzer @@ -49,16 +47,9 @@ r8 True - True - true - true android-arm64 - - True - -all - @@ -98,13 +89,12 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -117,8 +107,8 @@ - - + + - net10.0 + net11.0 @@ -14,12 +14,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj index b007ef0e1a4..77d74f1f378 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/Bit.BlazorUI.Demo.Client.Web.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 true false @@ -23,15 +23,15 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js index f626af65e01..9c5d3f35806 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Web/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; @@ -9,14 +9,16 @@ self.assetsExclude = [ /Bit\.BlazorUI\.Demo.Client\.Web\.styles\.css$/, // the flag image sets of Bit.BlazorUI.Assets: thousands of images, fetched as the flags are drawn - /_content\/Bit\.BlazorUI\.Assets\/flags/ + /_content\/Bit\.BlazorUI\.Assets\/flags/, + + /^_framework\/blazor\.webassembly\.js$/ ]; self.externalAssets = [ { "url": "Bit.BlazorUI.Demo.Server.styles.css" }, { - url: "_framework/bit.blazor.web.es2019.js" + url: "_framework/blazor.web.js" } ]; diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj index d8e6f92cf0a..ec416ef1ee6 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Bit.BlazorUI.Demo.Client.Windows.csproj @@ -2,7 +2,7 @@ WinExe - net10.0-windows + net11.0-windows enable enable true @@ -29,18 +29,17 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs index 01cf3696b09..dafd24400be 100644 --- a/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs +++ b/src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Windows/Program.cs @@ -74,7 +74,8 @@ public static void Main(string[] args) Text = "bit BlazorUI", WindowState = FormWindowState.Maximized, BackColor = ColorTranslator.FromHtml("#0D2960"), - Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath) + Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath), + FormRevealMode = FormRevealMode.Deferred }; var blazorWebView = new BlazorWebView diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj index 5f37f36c8ac..c63eb813241 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests.Mcp/Bit.BlazorUI.Tests.Mcp.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 14.0 enable enable diff --git a/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj b/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj index ec60f8ee6c7..c70bc374f5d 100644 --- a/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj +++ b/src/BlazorUI/Tests/Bit.BlazorUI.Tests/Bit.BlazorUI.Tests.csproj @@ -3,10 +3,10 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + only, CI passes -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 false 14.0 enable @@ -47,6 +47,7 @@ + diff --git a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj index e2a9150b9b6..5aa9d8a4e93 100644 --- a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj +++ b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance.TestHost/Bit.BlazorUI.Tests.Performance.TestHost.csproj @@ -1,18 +1,18 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. Without this the net10.0/net9.0/net8.0 + TFMs of this host would reference a Debug Bit.BlazorUI that only builds net11.0. --> + net11.0 enable enable preview - + diff --git a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj index a71cd7ab19d..e76888360c8 100644 --- a/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj +++ b/src/BlazorUI/Tests/Performance/Bit.BlazorUI.Tests.Performance/Bit.BlazorUI.Tests.Performance.csproj @@ -3,10 +3,10 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 - net10.0 + -p:BuildAllTfms=true to cover net10.0, net9.0 and net8.0 as well. --> + net11.0 false 14.0 enable diff --git a/src/Bmotion/Bit.Bmotion.Demo/Client/Bit.Bmotion.Demo.Client.csproj b/src/Bmotion/Bit.Bmotion.Demo/Client/Bit.Bmotion.Demo.Client.csproj index c06a2377fcd..9627930a7f2 100644 --- a/src/Bmotion/Bit.Bmotion.Demo/Client/Bit.Bmotion.Demo.Client.csproj +++ b/src/Bmotion/Bit.Bmotion.Demo/Client/Bit.Bmotion.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -13,7 +14,7 @@ - + diff --git a/src/Bmotion/Bit.Bmotion.Demo/Server/Bit.Bmotion.Demo.Server.csproj b/src/Bmotion/Bit.Bmotion.Demo/Server/Bit.Bmotion.Demo.Server.csproj index 2b2ee6fcc0d..773ea48634e 100644 --- a/src/Bmotion/Bit.Bmotion.Demo/Server/Bit.Bmotion.Demo.Server.csproj +++ b/src/Bmotion/Bit.Bmotion.Demo/Server/Bit.Bmotion.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -9,7 +9,7 @@ - + diff --git a/src/Bmotion/Bit.Bmotion.Demo/Server/Program.cs b/src/Bmotion/Bit.Bmotion.Demo/Server/Program.cs index 281c0697cfc..29ffb1d43b4 100644 --- a/src/Bmotion/Bit.Bmotion.Demo/Server/Program.cs +++ b/src/Bmotion/Bit.Bmotion.Demo/Server/Program.cs @@ -32,11 +32,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Bmotion/Bit.Bmotion.Demo/Server/Properties/launchSettings.json b/src/Bmotion/Bit.Bmotion.Demo/Server/Properties/launchSettings.json index ba4f4303414..7c75402dcb5 100644 --- a/src/Bmotion/Bit.Bmotion.Demo/Server/Properties/launchSettings.json +++ b/src/Bmotion/Bit.Bmotion.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5071;http://localhost:5070", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj b/src/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj index 53f5e4c5398..31ff1f061fa 100644 --- a/src/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj +++ b/src/Bmotion/Bit.Bmotion/Bit.Bmotion.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 Bit.Bmotion enable true @@ -27,6 +27,7 @@ + diff --git a/src/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj b/src/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj index 4b6fd3acc8c..2aac86b53ec 100644 --- a/src/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj +++ b/src/Bmotion/Tests/Bit.Bmotion.Tests.Mcp/Bit.Bmotion.Tests.Mcp.csproj @@ -1,9 +1,9 @@ + only exists on net11.0, while the library's own tests multi-target back to net8.0. --> - net10.0 + net11.0 Exe @@ -20,7 +20,7 @@ - + diff --git a/src/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj b/src/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj index 32444af0511..2bc73c5bea3 100644 --- a/src/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj +++ b/src/Bmotion/Tests/Bit.Bmotion.Tests/Bit.Bmotion.Tests.csproj @@ -1,7 +1,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj b/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj index 752f9774c20..c828e6584fa 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj +++ b/src/Brouter/Bit.Brouter.Demo/Client/Bit.Brouter.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -16,7 +17,7 @@ - + diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor index 24ec309f350..bbcf369e64d 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor +++ b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GeneratorPage.razor @@ -36,8 +36,8 @@ dotnet add package Bit.Brouter.Generators <!-- ...or declare them in your .csproj. Bit.Brouter.Generators is an analyzer-only package (it ships no runtime assembly), so PrivateAssets="all" keeps it out of your own package's dependencies: --> -<PackageReference Include="Bit.Brouter" Version="10.6.2" /> -<PackageReference Include="Bit.Brouter.Generators" Version="10.6.2" PrivateAssets="all" /> +<PackageReference Include="Bit.Brouter" Version="11.0.0-pre-01" /> +<PackageReference Include="Bit.Brouter.Generators" Version="11.0.0-pre-01" PrivateAssets="all" />

Nothing else is wired up by hand: the package drops the generator into the compiler, and the very next build emits BrouterRoutes from the routes already declared in diff --git a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor index f15f1e8e0d1..c7560cdfd4d 100644 --- a/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor +++ b/src/Brouter/Bit.Brouter.Demo/Client/Pages/GettingStartedPage.razor @@ -24,8 +24,8 @@ dotnet add package Bit.Brouter.Generators <!-- ...or declare them in your .csproj. PrivateAssets="all" on the generator keeps the analyzer out of your own package's dependencies: --> -<PackageReference Include="Bit.Brouter" Version="10.6.2" /> -<PackageReference Include="Bit.Brouter.Generators" Version="10.6.2" PrivateAssets="all" /> +<PackageReference Include="Bit.Brouter" Version="11.0.0-pre-01" /> +<PackageReference Include="Bit.Brouter.Generators" Version="11.0.0-pre-01" PrivateAssets="all" />

diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj b/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj index 9468569847a..97aae2652c1 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj +++ b/src/Brouter/Bit.Brouter.Demo/Server/Bit.Brouter.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Program.cs b/src/Brouter/Bit.Brouter.Demo/Server/Program.cs index 4626fa3d830..98e1e3f0708 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Program.cs +++ b/src/Brouter/Bit.Brouter.Demo/Server/Program.cs @@ -72,11 +72,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json b/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json index d63e94094d3..aed0dd13e20 100644 --- a/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json +++ b/src/Brouter/Bit.Brouter.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7185;http://localhost:5185", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Bit.Brouter/Bit.Brouter.csproj b/src/Brouter/Bit.Brouter/Bit.Brouter.csproj index 7481d776e8b..4aa175cbde1 100644 --- a/src/Brouter/Bit.Brouter/Bit.Brouter.csproj +++ b/src/Brouter/Bit.Brouter/Bit.Brouter.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true @@ -19,9 +19,11 @@ + + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj index 9a083d3ebde..177d75f4d2e 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto.Client/Bit.Brouter.Samples.Auto.Client.csproj @@ -1,7 +1,8 @@ - net10.0 + net11.0 + false enable enable true @@ -10,7 +11,7 @@ - + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj index 08ef34d6c64..87d8faf2cc4 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Bit.Brouter.Samples.Auto.csproj @@ -1,14 +1,14 @@ - net10.0 + net11.0 enable enable true - + diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs index 860cfd9940e..c4d497686d7 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Program.cs @@ -10,11 +10,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json index 2c2b4cf268a..36cec70ffe0 100644 --- a/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json +++ b/src/Brouter/Samples/Auto/Bit.Brouter.Samples.Auto/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7183;http://localhost:5183", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj b/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj index 016007bc608..e32bd929df8 100644 --- a/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj +++ b/src/Brouter/Samples/Core/Bit.Brouter.Samples.Core.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable diff --git a/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj b/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj index 9087b840f04..15caf164210 100644 --- a/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj +++ b/src/Brouter/Samples/Server/Bit.Brouter.Samples.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj index 9a083d3ebde..177d75f4d2e 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm.Client/Bit.Brouter.Samples.Wasm.Client.csproj @@ -1,7 +1,8 @@ - net10.0 + net11.0 + false enable enable true @@ -10,7 +11,7 @@ - + diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj index 23e337c087d..3f6eeb69423 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Bit.Brouter.Samples.Wasm.csproj @@ -1,14 +1,14 @@ - net10.0 + net11.0 enable enable true - + diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs index 91fb3d96f3d..952338d2d0a 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Program.cs @@ -10,11 +10,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json index d75510e51d7..f34753cfdd3 100644 --- a/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json +++ b/src/Brouter/Samples/Wasm/Bit.Brouter.Samples.Wasm/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:7182;http://localhost:5182", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj b/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj index 4361de7af40..14c4a0f2e32 100644 --- a/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Benchmarks/Bit.Brouter.Benchmarks.csproj @@ -2,10 +2,10 @@ Exe - - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj index 33fcf93ce85..677d7292732 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Bit.Brouter.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs index 6f433bbfe6c..b2a2200d9dc 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/HybridModeTests.cs @@ -18,7 +18,7 @@ public class HybridModeTests : InteractiveHarnessTests { protected override string BaseUrl => HybridHarnessHost.AppOrigin; - protected override string Framework => "net10.0"; + protected override string Framework => "net11.0"; protected override bool Prerenders => false; diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs index fff88694af0..124e8b0be33 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -8,9 +8,9 @@ public static class E2EEnvironment { /// /// BROUTER_E2E_FRAMEWORK: the target framework the web harness host runs on - /// (net10.0, net9.0 or net8.0). Defaults to net10.0. The hybrid host is always net10.0-windows. + /// (net11.0, net10.0, net9.0 or net8.0). Defaults to net11.0. The hybrid host is always net11.0-windows. /// - public static string Framework { get; } = Read("BROUTER_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BROUTER_E2E_FRAMEWORK") ?? "net11.0"; /// /// BROUTER_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs index 44da9a9508e..6c20de62726 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/Infrastructure/RepoLayout.cs @@ -17,7 +17,7 @@ public static string WebHostAssembly(string framework, string configuration) => Path.Combine(Path.GetDirectoryName(WebHostProject())!, "bin", configuration, framework, $"{WebHostName}.dll"); public static string HybridHostExecutable(string configuration) => - Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net10.0-windows", $"{HybridHostName}.exe"); + Path.Combine(Path.GetDirectoryName(HybridHostProject())!, "bin", configuration, "net11.0-windows", $"{HybridHostName}.exe"); private static string FindUpward(string relativePath) { diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh index fe20b7bd6fe..72535130777 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh +++ b/src/Brouter/Tests/Bit.Brouter.Tests.E2E/publish-gate.sh @@ -21,10 +21,10 @@ here="$(cd "$(dirname "$0")" && pwd)" project="$here/../Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj" log="$(mktemp)" -# TargetFrameworks=net10.0 on top of -f: -f alone does not reach project references, which then still +# TargetFrameworks=net11.0 on top of -f: -f alone does not reach project references, which then still # evaluate every framework they target - and with RunAOTCompilation each of those demands its own # wasm-tools workload. -dotnet publish "$project" -c Release -f net10.0 -p:TargetFrameworks=net10.0 -o "$output" \ +dotnet publish "$project" -c Release -f net11.0 -p:TargetFrameworks=net11.0 -o "$output" \ -p:SuppressTrimAnalysisWarnings=false -p:TrimmerSingleWarn=false "$@" 2>&1 | tee "$log" # The origin member follows the warning code, so "IL2069: Bit.Brouter.X" is raised inside the library diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj index 5c9e64b57b9..61279786667 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Generators/Bit.Brouter.Tests.Generators.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj index a729bc5af00..0ea99b3876a 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Hybrid/Bit.Brouter.Tests.Harness.Hybrid.csproj @@ -8,7 +8,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -18,7 +18,7 @@ - + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj index 08e76cfc40f..a5b10024afe 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web.Client/Bit.Brouter.Tests.Harness.Web.Client.csproj @@ -1,7 +1,7 @@  - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -14,6 +14,7 @@ + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj index 5ca1c3a2ab3..9607dd761c4 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Bit.Brouter.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ Bit.Brouter ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -19,6 +19,7 @@ + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json index 684ed5905e3..b4e3b844dea 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness.Web/Properties/launchSettings.json @@ -18,7 +18,6 @@ "commandName": "Project", "commandLineArgs": "--BrouterHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5290", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj index 86fa52004fe..7c9ec6d7efc 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Harness/Bit.Brouter.Tests.Harness.csproj @@ -6,7 +6,7 @@ suites run the same assertions against every host and attribute a difference to the host. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs index 335413f586f..145f2d54d20 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/AssemblySetup.cs @@ -13,7 +13,7 @@ public static class AssemblySetup public static async Task CleanupAsync() { await HarnessHostFactory.DisposeSharedAsync(); -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER await SampleHostFactories.DisposeAsync(); #endif } diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj index c488d05bfa5..fca9a816c52 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/Bit.Brouter.Tests.Hosting.csproj @@ -7,7 +7,7 @@ runs on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,14 +23,15 @@ + - - + + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs index d93a645d8b5..3d5794a53f1 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Hosting/SamplesHostingTests.cs @@ -1,4 +1,4 @@ -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER using System.Net; using Microsoft.AspNetCore.Mvc.Testing; diff --git a/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj b/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj index 34b5dcf57ae..b1a77e12469 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests.Mcp/Bit.Brouter.Tests.Mcp.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 enable enable false @@ -18,7 +18,7 @@ - + diff --git a/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj b/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj index 3ad692966a8..50e72d5781a 100644 --- a/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj +++ b/src/Brouter/Tests/Bit.Brouter.Tests/Bit.Brouter.Tests.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false diff --git a/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj b/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj index 71383da8511..b8efdcdc37a 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj +++ b/src/Bswup/Bit.Bswup.Demo/Client/Bit.Bswup.Demo.Client.csproj @@ -1,10 +1,11 @@ - net10.0 + net11.0 enable enable true + false true @@ -20,7 +21,7 @@ - + diff --git a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js index c35e40aefef..d4af4a40434 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js +++ b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // Development service worker of the Bswup docs site. Unlike the standard Blazor template - // whose dev worker is a no-op so caching never hides source changes - this site runs the full @@ -20,7 +20,8 @@ self.mode = 'InitialPrerender'; // line to get the faster, prerender-friendly passive behavior the preset intends. self.isPassive = false; -self.assetsExclude = [/\.scp\.css$/]; +// blazor.webassembly.js is in the manifest but a Blazor Web App never loads it, so precaching it 404s. +self.assetsExclude = [/\.scp\.css$/, /^_framework\/blazor\.webassembly\.js$/]; self.caseInsensitiveUrl = true; // The MCP server (Server/Controllers/McpController.cs) and the plain HTTP mirror of its tools diff --git a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js index 02527b05257..eb1a34b1cb6 100644 --- a/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js +++ b/src/Bswup/Bit.Bswup.Demo/Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // Published service worker of the Bswup docs site. Keep in sync with service-worker.js (the // development copy) - the two differ only in the commented-out resiliency knobs below. @@ -18,7 +18,8 @@ self.mode = 'InitialPrerender'; // line to get the faster, prerender-friendly passive behavior the preset intends. self.isPassive = false; -self.assetsExclude = [/\.scp\.css$/]; +// blazor.webassembly.js is in the manifest but a Blazor Web App never loads it, so precaching it 404s. +self.assetsExclude = [/\.scp\.css$/, /^_framework\/blazor\.webassembly\.js$/]; self.caseInsensitiveUrl = true; // The MCP server (Server/Controllers/McpController.cs) and the plain HTTP mirror of its tools diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj b/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj index 857b0c8bb18..e5eb6f9ddde 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj +++ b/src/Bswup/Bit.Bswup.Demo/Server/Bit.Bswup.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -10,7 +10,7 @@ - + diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Program.cs b/src/Bswup/Bit.Bswup.Demo/Server/Program.cs index ccd0d9095f3..4d6c8d46bf4 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Program.cs +++ b/src/Bswup/Bit.Bswup.Demo/Server/Program.cs @@ -160,11 +160,7 @@ called bare answers with the whole catalog. var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json b/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json index edb877f3e85..daf13ea51ae 100644 --- a/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json +++ b/src/Bswup/Bit.Bswup.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5024;https://localhost:5025", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Bswup/Bit.Bswup/Bit.Bswup.csproj b/src/Bswup/Bit.Bswup/Bit.Bswup.csproj index 0e76d2f6e8c..d69be0dbbd8 100644 --- a/src/Bswup/Bit.Bswup/Bit.Bswup.csproj +++ b/src/Bswup/Bit.Bswup/Bit.Bswup.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -24,6 +24,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj index 503f379cefd..68c7aa859f6 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web.Client/Bit.Bswup.Tests.Harness.Web.Client.csproj @@ -5,7 +5,7 @@ project of an app built from the Blazor Web App template. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,6 +23,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj index acc837606d4..d0b02773133 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Bit.Bswup.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ the suites can run the harness on every runtime Bit.Bswup ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -18,6 +18,16 @@ + + + + + + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json index ca37faaa95b..41301a6a225 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "commandLineArgs": "--BswupHarness:Mode=wasm", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, @@ -12,7 +11,6 @@ "commandName": "Project", "commandLineArgs": "--BswupHarness:Mode=wasm-noprerender", "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs index 7b5bf389b99..719a3487eae 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness.Web/Sessions/HarnessMiddleware.cs @@ -52,7 +52,12 @@ public async Task InvokeAsync(HttpContext context) // A hosted client's referenced libraries are served from the host's root _content/, while the // standalone app - mounted under /standalone/ - resolves them (and lists them in its manifest) // relative to its base. Map them the way a reverse proxy mounting the app on a sub-path would. - if (path.StartsWith("/standalone/_content/", StringComparison.OrdinalIgnoreCase)) + // blazor.webassembly.js joins them on .NET 11: a WebAssembly client keeps it for its own publish + // and no longer hands it to a project referencing it, so the host serves the copy its own + // StaticWebAssetGroup keeps (see the csproj). Without this the boot script request reaches the + // fallback document and the app dies on "SyntaxError: Unexpected token '<'". + if (path.StartsWith("/standalone/_content/", StringComparison.OrdinalIgnoreCase) + || path.StartsWith("/standalone/_framework/blazor.webassembly.js", StringComparison.OrdinalIgnoreCase)) { context.Request.Path = path["/standalone".Length..]; } diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj index 8364552c0b7..f6d9dc3e009 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Harness/Bit.Bswup.Tests.Harness.csproj @@ -8,7 +8,7 @@ manifests, which is what makes them usable as precached assets the suites can fault. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -24,6 +24,7 @@ + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs index ef7bd1395bc..8f03aada29d 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/AssemblySetup.cs @@ -13,7 +13,7 @@ public static class AssemblySetup public static async Task CleanupAsync() { await HarnessHostFactory.DisposeSharedAsync(); -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER await SampleHostFactories.DisposeAsync(); #endif } diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj index 65f0950f228..5007fc917e2 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/Bit.Bswup.Tests.Hosting.csproj @@ -7,7 +7,7 @@ on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -23,14 +23,15 @@ + - - + + diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs index 875f4419ef3..769f00eb097 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Hosting/FullSampleHostingTests.cs @@ -1,4 +1,4 @@ -#if NET10_0_OR_GREATER +#if NET11_0_OR_GREATER using System.Net; using Bit.Bswup.Tests.Hosting.Infrastructure; using Microsoft.AspNetCore.Mvc.Testing; @@ -54,7 +54,8 @@ public async Task Every_asset_the_samples_worker_precaches_is_served_with_the_by var manifest = await PrecacheManifest.LoadAsync(client, "/"); // The sample's own assetsExclude (see its service-worker.js). - var problems = await manifest.VerifyServedAsync(client, "/", @"^Bit\.Bswup\.FullSample\.Client\.styles\.css$", @"weather\.json$"); + var problems = await manifest.VerifyServedAsync(client, "/", + @"^Bit\.Bswup\.FullSample\.Client\.styles\.css$", @"weather\.json$", @"^_framework/blazor\.webassembly\.js$"); Assert.AreEqual(0, problems.Count, string.Join(Environment.NewLine, problems)); } diff --git a/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj b/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj index f52d7246639..d070f8681b0 100644 --- a/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj +++ b/src/Bswup/Tests/Bit.Bswup.Tests.Mcp/Bit.Bswup.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 Exe @@ -18,7 +18,7 @@ - + diff --git a/src/Butil/Bit.Butil.Demo/Client/Bit.Butil.Demo.Client.csproj b/src/Butil/Bit.Butil.Demo/Client/Bit.Butil.Demo.Client.csproj index 2e877adc74a..7176f216fa8 100644 --- a/src/Butil/Bit.Butil.Demo/Client/Bit.Butil.Demo.Client.csproj +++ b/src/Butil/Bit.Butil.Demo/Client/Bit.Butil.Demo.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false enable enable true @@ -13,7 +14,7 @@ - + diff --git a/src/Butil/Bit.Butil.Demo/Client/Pages/JavaScriptTrimmingPage.razor b/src/Butil/Bit.Butil.Demo/Client/Pages/JavaScriptTrimmingPage.razor index b54523f3a6c..e46bc7716a3 100644 --- a/src/Butil/Bit.Butil.Demo/Client/Pages/JavaScriptTrimmingPage.razor +++ b/src/Butil/Bit.Butil.Demo/Client/Pages/JavaScriptTrimmingPage.razor @@ -207,7 +207,7 @@ new("MyApp.Maui.csproj", """ - $(NuGetPackageRoot)bit.butil\10.6.2\lib\net10.0\Bit.Butil.dll + $(NuGetPackageRoot)bit.butil\11.0.0-pre-01\lib\net10.0\Bit.Butil.dll """) Language="xml" /> diff --git a/src/Butil/Bit.Butil.Demo/Server/Bit.Butil.Demo.Server.csproj b/src/Butil/Bit.Butil.Demo/Server/Bit.Butil.Demo.Server.csproj index 29af0db0fb8..6d8b6b3bf85 100644 --- a/src/Butil/Bit.Butil.Demo/Server/Bit.Butil.Demo.Server.csproj +++ b/src/Butil/Bit.Butil.Demo/Server/Bit.Butil.Demo.Server.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable true @@ -9,7 +9,7 @@ - + diff --git a/src/Butil/Bit.Butil.Demo/Server/Program.cs b/src/Butil/Bit.Butil.Demo/Server/Program.cs index 3ee45da414e..78fd382f7d9 100644 --- a/src/Butil/Bit.Butil.Demo/Server/Program.cs +++ b/src/Butil/Bit.Butil.Demo/Server/Program.cs @@ -112,11 +112,7 @@ var app = builder.Build(); -if (app.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else +if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); diff --git a/src/Butil/Bit.Butil.Demo/Server/Properties/launchSettings.json b/src/Butil/Bit.Butil.Demo/Server/Properties/launchSettings.json index f73192c3cd8..7742f084f40 100644 --- a/src/Butil/Bit.Butil.Demo/Server/Properties/launchSettings.json +++ b/src/Butil/Bit.Butil.Demo/Server/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "https://localhost:5253;http://localhost:5252", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Butil/Bit.Butil/Bit.Butil.csproj b/src/Butil/Bit.Butil/Bit.Butil.csproj index e467789576d..cc864dba658 100644 --- a/src/Butil/Bit.Butil/Bit.Butil.csproj +++ b/src/Butil/Bit.Butil/Bit.Butil.csproj @@ -3,7 +3,7 @@ - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 true $(NoWarn);NU5100 @@ -22,6 +22,7 @@ + diff --git a/src/Butil/Bit.Butil/Scripts/butil.ts b/src/Butil/Bit.Butil/Scripts/butil.ts index 8c8db98c506..e833ca7ff7f 100644 --- a/src/Butil/Bit.Butil/Scripts/butil.ts +++ b/src/Butil/Bit.Butil/Scripts/butil.ts @@ -1,2 +1,2 @@ var BitButil = (window as any).BitButil = (window as any).BitButil || {}; -BitButil.version = window['bit-butil version'] = '10.6.2'; \ No newline at end of file +BitButil.version = window['bit-butil version'] = '11.0.0-pre-01'; \ No newline at end of file diff --git a/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj b/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj index 3a4d3372209..05ebe4684d1 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Core/Bit.Butil.Samples.Core.csproj @@ -2,8 +2,8 @@ - net10.0;net9.0;net8.0 + these pages on every runtime Bit.Butil ships for. The sample apps themselves pick net11.0. --> + net11.0;net10.0;net9.0;net8.0 diff --git a/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj b/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj index 256c7c17337..2ed8b43987e 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Maui/Bit.Butil.Samples.Maui.csproj @@ -1,11 +1,11 @@  - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -22,9 +22,6 @@ 1.0.0 1 - - True - $(NoWarn);ClassWithoutModifierAnalyzer @@ -50,9 +47,9 @@ - - - + + + diff --git a/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj b/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj index 1c1a5164493..9477d6ff729 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj +++ b/src/Butil/Samples/Bit.Butil.Samples.Web/Bit.Butil.Samples.Web.csproj @@ -1,14 +1,15 @@  - net10.0 + net11.0 + false enable enable - - + + diff --git a/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json b/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json index 5dae728713a..804970b4729 100644 --- a/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json +++ b/src/Butil/Samples/Bit.Butil.Samples.Web/Properties/launchSettings.json @@ -5,7 +5,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5040;https://localhost:5041", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj b/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj index eb0907c6116..5aa963b4420 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Benchmarks/Bit.Butil.Tests.Benchmarks.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 enable enable preview diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj b/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj index dd8480c0e0c..0273d4e5d94 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Bit.Butil.Tests.E2E.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs index 3314d9f2777..224b83320cc 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/E2EEnvironment.cs @@ -14,10 +14,10 @@ public static class E2EEnvironment public static string Host { get; } = HarnessHostKinds.Validate(Read("BUTIL_E2E_HOST") ?? HarnessHostKinds.Standalone); /// - /// BUTIL_E2E_FRAMEWORK: the target framework the web harness host runs on (net10.0, net9.0 or - /// net8.0). Defaults to net10.0. The standalone sample and the hybrid host are net10.0 only. + /// BUTIL_E2E_FRAMEWORK: the target framework the web harness host runs on (net11.0, net10.0, net9.0 or + /// net8.0). Defaults to net11.0. The standalone sample and the hybrid host are net11.0 only. /// - public static string Framework { get; } = Read("BUTIL_E2E_FRAMEWORK") ?? "net10.0"; + public static string Framework { get; } = Read("BUTIL_E2E_FRAMEWORK") ?? "net11.0"; /// /// BUTIL_E2E_CONFIGURATION: the build configuration of the harness hosts. Defaults to the diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs index 4092f040605..9792c50a875 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/Infrastructure/RepoLayout.cs @@ -53,5 +53,5 @@ public static string HybridHarnessProject() => FindUpward(Path.Combine("tests", HybridHarnessName, $"{HybridHarnessName}.csproj")); public static string HybridHarnessExecutable(string configuration) - => Path.Combine(Path.GetDirectoryName(HybridHarnessProject())!, "bin", configuration, "net10.0-windows", $"{HybridHarnessName}.exe"); + => Path.Combine(Path.GetDirectoryName(HybridHarnessProject())!, "bin", configuration, "net11.0-windows", $"{HybridHarnessName}.exe"); } diff --git a/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh b/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh index b171b1d056e..594f35e0aa6 100644 --- a/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh +++ b/src/Butil/tests/Bit.Butil.Tests.E2E/publish-gate.sh @@ -19,10 +19,10 @@ here="$(cd "$(dirname "$0")" && pwd)" project="$here/../Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj" log="$(mktemp)" -# ButilHarnessFramework=net10.0 on top of -f: -f alone does not reach project references, so the WebAssembly +# ButilHarnessFramework=net11.0 on top of -f: -f alone does not reach project references, so the WebAssembly # client would still evaluate every framework it targets - and with RunAOTCompilation each of those demands its # own wasm-tools workload. Not -p:TargetFrameworks, which would also reach the netstandard2.0 Bit.Butil.Build. -dotnet publish "$project" -c Release -f net10.0 -p:ButilHarnessFramework=net10.0 -o "$output" \ +dotnet publish "$project" -c Release -f net11.0 -p:ButilHarnessFramework=net11.0 -o "$output" \ -p:SuppressTrimAnalysisWarnings=false -p:TrimmerSingleWarn=false "$@" 2>&1 | tee "$log" # The origin member follows the warning code, so "IL2026: Bit.Butil.Clipboard.X" is raised inside the library diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj index 0f46dd00982..e7e222a331d 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Hybrid/Bit.Butil.Tests.Harness.Hybrid.csproj @@ -8,7 +8,7 @@ WinExe - net10.0-windows + net11.0-windows true true @@ -21,7 +21,7 @@ - + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj index 2b6f2101aa5..5ed99201ad7 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web.Client/Bit.Butil.Tests.Harness.Web.Client.csproj @@ -4,7 +4,7 @@ browser. It carries no pages of its own - they come from Samples.Core - only the client's startup. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 $(ButilHarnessFramework) enable @@ -19,6 +19,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj index 783e4f23732..11e42a48e07 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Bit.Butil.Tests.Harness.Web.csproj @@ -8,7 +8,7 @@ is: the suites can run the harness on every runtime Bit.Butil ships for. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 @@ -25,6 +25,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json index fe3b67e9348..276cc2a9f55 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json +++ b/src/Butil/tests/Bit.Butil.Tests.Harness.Web/Properties/launchSettings.json @@ -21,7 +21,6 @@ "commandLineArgs": "--ButilHarness:Mode=wasm", "launchBrowser": true, "launchUrl": "e2e", - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5390", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, diff --git a/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj b/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj index 117e8b06c28..46d28673554 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Hosting/Bit.Butil.Tests.Hosting.csproj @@ -7,7 +7,7 @@ browser, so this runs on every target framework in the regular CI job. --> - net10.0;net9.0;net8.0 + net11.0;net10.0;net9.0;net8.0 enable enable false @@ -27,6 +27,7 @@ + diff --git a/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj b/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj index 25a18802f68..caac1141b9e 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Manual/Bit.Butil.Tests.Manual.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 enable enable preview diff --git a/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj b/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj index 884b75443dc..e1e40eed97e 100644 --- a/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.Mcp/Bit.Butil.Tests.Mcp.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj b/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj index cd0fbd67a75..b150dcbdf1c 100644 --- a/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj +++ b/src/Butil/tests/Bit.Butil.Tests.PublishFixture/Bit.Butil.Tests.PublishFixture.csproj @@ -18,7 +18,7 @@ --> - net10.0 + net11.0 enable enable false diff --git a/src/Minifier/Bit.Minifier.Cli/Bit.Minifier.Cli.csproj b/src/Minifier/Bit.Minifier.Cli/Bit.Minifier.Cli.csproj index a546c147945..877c985c06a 100644 --- a/src/Minifier/Bit.Minifier.Cli/Bit.Minifier.Cli.csproj +++ b/src/Minifier/Bit.Minifier.Cli/Bit.Minifier.Cli.csproj @@ -11,7 +11,7 @@ and nothing else: minifying needs Mono.Cecil and reading a map needs no dependency at all. --> Exe - net10.0 + net11.0 Major enable true diff --git a/src/Minifier/Bit.Minifier/Bit.Minifier.csproj b/src/Minifier/Bit.Minifier/Bit.Minifier.csproj index 69608bb8e39..670d3fb9673 100644 --- a/src/Minifier/Bit.Minifier/Bit.Minifier.csproj +++ b/src/Minifier/Bit.Minifier/Bit.Minifier.csproj @@ -9,7 +9,7 @@ An executable rather than an MSBuild task: Mono.Cecil then never shares a process with the copy ILLink.Tasks may have loaded, and one binary serves both MSBuild flavours. net8.0 + RollForward=Major runs on whatever runtime the SDK doing the publish carries, whichever version of it an app is on - the - tools a person runs themselves (Bit.Minifier.Cli) target net10.0 instead. --> + tools a person runs themselves (Bit.Minifier.Cli) target net11.0 instead. --> Exe net8.0 diff --git a/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj b/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj index 95cbdace82a..219a4c8eff1 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests.Friend/Bit.Minifier.Tests.Friend.csproj @@ -2,7 +2,7 @@ - net10.0 + net11.0 enable enable false diff --git a/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj b/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj index 73b9a6449c6..c1af99f9aa0 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests.Library/Bit.Minifier.Tests.Library.csproj @@ -2,7 +2,7 @@ - net10.0 + net11.0 enable enable false diff --git a/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj b/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj index 6005bf94dd0..b903a211f50 100644 --- a/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj +++ b/src/Minifier/Tests/Bit.Minifier.Tests/Bit.Minifier.Tests.csproj @@ -1,7 +1,7 @@  - net10.0 + net11.0 enable enable false diff --git a/src/ResxTranslator/Bit.ResxTranslator/Bit.ResxTranslator.csproj b/src/ResxTranslator/Bit.ResxTranslator/Bit.ResxTranslator.csproj index 00ca40acf47..47d2b3d0206 100644 --- a/src/ResxTranslator/Bit.ResxTranslator/Bit.ResxTranslator.csproj +++ b/src/ResxTranslator/Bit.ResxTranslator/Bit.ResxTranslator.csproj @@ -4,7 +4,7 @@ Exe - net10.0 + net11.0 enable enable true @@ -16,10 +16,10 @@ - - - - + + + + diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj index 2ade981f1e6..9c09f5aeb42 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty.Client/BlazorEmpty.Client.csproj @@ -1,9 +1,9 @@ - + - net10.0 + net11.0 enable enable true @@ -11,18 +11,18 @@ - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj index 34adc19d49e..3831da9cbbd 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/BlazorEmpty.csproj @@ -1,9 +1,9 @@ - + - net10.0 + net11.0 enable enable True @@ -12,20 +12,20 @@ - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs index f120ea4aa4f..2cae9147e95 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.Main.cs @@ -38,15 +38,7 @@ public static void Main(string[] args) var app = builder.Build(); // Configure the HTTP request pipeline. -#if (UseWebAssembly) - if (builder.Environment.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else -#else if (builder.Environment.IsDevelopment() is false) -#endif { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs index f85bc66f67b..90767ebee65 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Program.cs @@ -32,15 +32,7 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -#if (UseWebAssembly) -if (builder.Environment.IsDevelopment()) -{ - app.UseWebAssemblyDebugging(); -} -else -#else if (builder.Environment.IsDevelopment() is false) -#endif { app.UseExceptionHandler("/Error", createScopeForErrors: true); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json index 0df007392e7..22ca8deead5 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/BlazorEmpty/Properties/launchSettings.json @@ -18,7 +18,6 @@ "dotnetRunMessages": true, "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "applicationUrl": "http://localhost:5500", "environmentVariables": { @@ -31,7 +30,6 @@ "dotnetRunMessages": true, "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "applicationUrl": "https://localhost:5501;http://localhost:5500", "environmentVariables": { @@ -43,7 +41,6 @@ "commandName": "IISExpress", "launchBrowser": true, //#if (UseWebAssembly) - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", //#endif "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json index 6ce09c7c748..9b40ef830e9 100644 --- a/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json +++ b/src/Templates/BlazorEmpty/Bit.BlazorEmpty/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.100", - "rollForward": "latestFeature" + "version": "11.0.100-rc.1.26425.128", + "rollForward": "disable" } } \ No newline at end of file diff --git a/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj b/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj index 66b8b8df608..f88a3966953 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate.ProjectTemplate.csproj @@ -3,7 +3,7 @@ - net10.0 + net11.0 false content false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml b/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml index cb29e33ff37..09780629218 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.codex/config.toml @@ -1,5 +1,5 @@ [mcp_servers.bitplatform] -url = "https://bitplatform.dev/mcp?v=10.6.2" +url = "https://bitplatform.dev/mcp?v=11.0.0" [mcp_servers.dev-mcp] url = "https://use-your-api-server-url-here.com/dev-mcp" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json index 0902e26029b..f1a7987820b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.cursor/mcp.json @@ -1,7 +1,7 @@ { "mcpServers": { "bitplatform": { - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "url": "https://use-your-api-server-url-here.com/dev-mcp" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md index 38c7c976ac8..28936d081fc 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.docs/19- Project Miscellaneous Files.md @@ -221,7 +221,7 @@ These namespaces are **automatically imported** in every C# file, eliminating th Instead of this in each `.csproj`: ```xml - + ``` You write this in `.csproj`: @@ -231,7 +231,7 @@ You write this in `.csproj`: And the version is defined centrally in `Directory.Packages.props`: ```xml - + ``` **Benefits**: @@ -242,8 +242,8 @@ And the version is defined centrally in `Directory.Packages.props`: **Example packages included**: ```xml - - + + @@ -434,7 +434,7 @@ dnx Bit.ResxTranslator "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" } } } @@ -602,7 +602,7 @@ When you open the project in VS Code, you'll be prompted to install these extens **Example**: ````markdown -This project gets generated by bit-bp template v-10.6.2 using the following command +This project gets generated by bit-bp template v-11.0.0-pre-01 using the following command ```bash dotnet new bit-bp --name Boilerplate diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json b/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json index 46c2080e014..5750d18f84f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.gemini/settings.json @@ -1,7 +1,7 @@ { "mcpServers": { "bitplatform": { - "httpUrl": "https://bitplatform.dev/mcp?v=10.6.2" + "httpUrl": "https://bitplatform.dev/mcp?v=11.0.0" }, "aspire": { "command": "aspire", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json index c109c52ee49..416781b21b8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.junie/mcp/mcp.json @@ -2,7 +2,7 @@ "mcpServers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json index 3c9256d9c54..de674b29738 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.mcp.json @@ -2,7 +2,7 @@ "mcpServers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json b/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json index f13ae33fb42..5e01d86bd7c 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.vscode/mcp.json @@ -2,7 +2,7 @@ "servers": { "bitplatform": { "type": "http", - "url": "https://bitplatform.dev/mcp?v=10.6.2" + "url": "https://bitplatform.dev/mcp?v=11.0.0" }, "dev-mcp": { "type": "http", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/README.md b/src/Templates/Boilerplate/Bit.Boilerplate/README.md index fcc3e9b6c1e..358582dc8b8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/README.md +++ b/src/Templates/Boilerplate/Bit.Boilerplate/README.md @@ -2,7 +2,7 @@ Thank you for creating a new project with bit platform! We appreciate your trust in our platform and are excited to see what you'll build. -This project is generated by bit-bp template v-10.6.2 using the following command: +This project is generated by bit-bp template v-11.0.0-pre-01 using the following command: ```bash dotnet new bit-bp diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/global.json b/src/Templates/Boilerplate/Bit.Boilerplate/global.json index 48af5972b20..17e6b39aff1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/global.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/global.json @@ -1,7 +1,7 @@ { "sdk": { - "version": "10.0.100", - "rollForward": "latestFeature" + "version": "11.0.100-rc.1.26425.128", + "rollForward": "disable" }, "test": { "runner": "Microsoft.Testing.Platform" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/nuget.config b/src/Templates/Boilerplate/Bit.Boilerplate/nuget.config new file mode 100644 index 00000000000..a9e325db066 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/nuget.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj index 170f3e1c55e..50beedfe2ff 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Boilerplate.Client.Core.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 BeforeBuildTasks; $(ResolveStaticWebAssetsInputsDependsOn) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor index 68c40e08fe5..c240d2455f1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor @@ -13,6 +13,20 @@
+ @if (IsKiosk) + { + + + @Localizer[nameof(AppStrings.KioskMessage)] + + + + @Localizer[nameof(AppStrings.KioskExitApp)] + + + + } + @Localizer[nameof(AppStrings.HomePanelTitle)]
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs index 09a3e573628..a1b15060bc1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor.cs @@ -47,6 +47,14 @@ private string BuildSiteJsonLd() }.ToJsonString(); } + /// + /// The demo Windows app ships with kiosk mode on, so the page offers the way out that the lockdown takes away. + /// + private bool IsKiosk => AppPlatform.IsWindows && bool.TryParse(Configuration["Kiosk:Enabled"], out var enabled) && enabled; + + /// Nothing else closes a kiosk window: the close button is gone and WM_CLOSE is refused. + private void ExitApp() => Environment.Exit(0); + //#if(module != "Sales") private GitHubStats? gitHubStats; diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs index 0de354761b7..ce704c59298 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Infrastructure/Extensions/IClientCoreServiceCollectionExtensions.cs @@ -177,6 +177,11 @@ public IServiceCollection AddClientCoreProjectServices(IConfiguration configurat } }) .WithAutomaticReconnect(sp.GetRequiredService()) + .WithAuthenticationRefresh(options => + { + options.EnableAutoRefresh = true; + options.RefreshBeforeExpiration = TimeSpan.FromMinutes(1); + }) .WithUrl(new Uri(absoluteServerAddressProvider.GetAddress(), "app-hub?origin=" + Uri.EscapeDataString(xOrigin)), options => { //#if (redis == true) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj index 07982d7c249..0d1c13720a4 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/Boilerplate.Client.Maui.csproj @@ -1,11 +1,11 @@ - net10.0-android;net10.0-ios;net10.0-maccatalyst - $(TargetFrameworks);net10.0-windows10.0.19041.0 - net10.0-android + net11.0-android;net11.0-ios;net11.0-maccatalyst + $(TargetFrameworks);net11.0-windows10.0.19041.0 + net11.0-android - + Exe true true @@ -18,8 +18,6 @@ com.bitplatform.template - - True true $(NoWarn);ClassWithoutModifierAnalyzer @@ -64,19 +62,13 @@ r8 True - - false - True Platforms/iOS/Entitlements.Development.plist - True - - -all Platforms/iOS/Entitlements.Production.plist @@ -89,22 +81,14 @@ Platforms/MacCatalyst/Entitlements.Production.plist true - - -all - - - - - - @@ -161,7 +145,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/wwwroot/index.html b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/wwwroot/index.html index befe2525db4..efc6b83d9f7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/wwwroot/index.html +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/wwwroot/index.html @@ -164,8 +164,7 @@
- - + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj index 04f7e51f1e6..54a5145f378 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Boilerplate.Client.Web.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 false false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json index 27ed8183566..33721d5a5fb 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/Properties/launchSettings.json @@ -4,7 +4,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:4030", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/index.html b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/index.html index 161f026f672..3d188d63c55 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/index.html +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/index.html @@ -217,7 +217,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js index 68e1232bd61..33febe9100d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Web/wwwroot/service-worker.published.js @@ -2,7 +2,7 @@ // [mirror] push notification and notificationclick handlers - keep in sync with: // - src/Client/Boilerplate.Client.Web/wwwroot/service-worker.js -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup //#if (notification == true) @@ -72,7 +72,7 @@ self.assetsExclude = [ /_headers$/, // The standalone app's css bundle; Server.Web serves that css inside its own bundle below instead. - ...(isServerHosted ? [/Boilerplate\.Client\.Web\.styles\.css$/] : []) + ...(isServerHosted ? [/Boilerplate\.Client\.Web\.styles\.css$/, /^_framework\/blazor\.webassembly\.js$/] : []) ]; self.externalAssets = [ { @@ -80,7 +80,7 @@ self.externalAssets = [ }, ...(isServerHosted ? [ { - url: "_framework/bit.blazor.web.es2019.js" + url: "_framework/blazor.web.js" }, { "url": "Boilerplate.Server.Web.styles.css" diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj index 275e54c5028..b617d93dbb4 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Boilerplate.Client.Windows.csproj @@ -2,7 +2,7 @@ WinExe - net10.0-windows + net11.0-windows enable enable true @@ -36,7 +36,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs index 36f40d8b4e3..32bc279db64 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/ClientWindowsSettings.cs @@ -1,5 +1,6 @@ //+:cnd:noEmit using Boilerplate.Client.Core; +using Boilerplate.Client.Windows.Infrastructure.Services; namespace Boilerplate.Client.Windows; @@ -7,6 +8,8 @@ public class ClientWindowsSettings : ClientCoreSettings { public WindowsUpdateOptions? WindowsUpdate { get; set; } + public KioskOptions? Kiosk { get; set; } + public override IEnumerable Validate(ValidationContext validationContext) { var validationResults = base.Validate(validationContext).ToList(); @@ -16,6 +19,11 @@ public override IEnumerable Validate(ValidationContext validat Validator.TryValidateObject(WindowsUpdate, new ValidationContext(WindowsUpdate), validationResults, true); } + if (Kiosk is not null) + { + Validator.TryValidateObject(Kiosk, new ValidationContext(Kiosk), validationResults, true); + } + return validationResults; } } @@ -26,3 +34,21 @@ public partial class WindowsUpdateOptions public string? FilesUrl { get; set; } } + +/// +/// Options of the .NET 11 and of . +/// +public partial class KioskOptions +{ + /// + /// Starts the app full screen, above the taskbar, and locks it there: neither F11 nor Escape leaves it, the + /// window cannot be closed, the key combinations that reach the desktop are swallowed and the browser's own + /// menus, dev tools, zoom and shortcuts are off. When off, F11 still toggles full screen and Escape leaves it. + /// + public bool Enabled { get; set; } + + /// + /// Keeps the display and the machine awake for as long as the app runs. + /// + public bool PreventSleep { get; set; } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs new file mode 100644 index 00000000000..e979d62322b --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Infrastructure/Services/WindowsKioskGuard.cs @@ -0,0 +1,72 @@ +//+:cnd:noEmit +using System.Runtime.InteropServices; + +namespace Boilerplate.Client.Windows.Infrastructure.Services; + +/// +/// The lockdown a kiosk needs on top of , which only takes the window full screen: +/// the key combinations that reach the desktop are swallowed, and the window refuses to close - the app's own exit +/// is the only way out. Ctrl+Alt+Del is out of reach of every user mode process - block it with the Windows policy +/// of the kiosk machine. +/// +public static partial class WindowsKioskGuard +{ + private const int WH_KEYBOARD_LL = 13; + private const int WM_KEYDOWN = 0x0100; + private const int WM_SYSKEYDOWN = 0x0104; + + private delegate nint HookProc(int code, nint wParam, nint lParam); + + private static Form kioskForm = default!; + + // The field roots the delegate; a local would let the GC collect what the hook calls back into. + private static HookProc hookProc = default!; + + /// + /// Locks down for as long as the process runs; Windows drops the hook when it exits. + /// + public static void Apply(Form form) + { + kioskForm = form; + hookProc = OnKey; + SetWindowsHookExW(WH_KEYBOARD_LL, hookProc, 0, 0); + + // Windows itself still gets to shut down; only the person in front of the machine is refused. + form.FormClosing += (_, e) => e.Cancel = e.CloseReason is CloseReason.UserClosing; + } + + private static nint OnKey(int code, nint wParam, nint lParam) + { + // Only while the kiosk window is in front: a global block would take the desktop away from whatever else runs. + if (code >= 0 && wParam is WM_KEYDOWN or WM_SYSKEYDOWN + && GetForegroundWindow() == kioskForm.Handle && IsBlocked((Keys)Marshal.ReadInt32(lParam))) + return 1; + + return CallNextHookEx(0, code, wParam, lParam); + } + + private static bool IsBlocked(Keys key) => key switch + { + Keys.LWin or Keys.RWin => true, // the start menu and every Win+? combination + Keys.Apps => true, // the context menu key + Keys.Tab or Keys.Escape or Keys.F4 or Keys.Space when IsDown(Keys.Menu) => true, // Alt+Tab, Alt+Esc, Alt+F4, Alt+Space + Keys.Escape when IsDown(Keys.ControlKey) => true, // Ctrl+Esc, Ctrl+Shift+Esc + _ => false + }; + + // GetAsyncKeyState, not Control.ModifierKeys: in a low level hook the key has not reached the queue the latter reads. + private static bool IsDown(Keys key) => (GetAsyncKeyState((int)key) & 0x8000) is not 0; + + [DllImport("user32.dll", SetLastError = true)] + private static extern nint SetWindowsHookExW(int idHook, HookProc lpfn, nint hMod, uint dwThreadId); + + // hhk is documented as ignored. + [DllImport("user32.dll")] + private static extern nint CallNextHookEx(nint hhk, int nCode, nint wParam, nint lParam); + + [DllImport("user32.dll")] + private static extern nint GetForegroundWindow(); + + [DllImport("user32.dll")] + private static extern short GetAsyncKeyState(int vKey); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs index 487aac6b21b..060b8957dc0 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/Program.cs @@ -73,7 +73,20 @@ public static void Main(string[] args) WindowState = FormWindowState.Maximized, BackColor = backgroundColor, FormCaptionBackColor = backgroundColor, - Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath) + Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath), + FormRevealMode = FormRevealMode.Deferred + }; + + var kioskOptions = Services.GetRequiredService().Kiosk; + var isKiosk = kioskOptions?.Enabled is true; + kioskModeManagerReferenceToKeepAlive = new KioskModeManager + { + ContainerControl = form, + TopMostInFullScreen = true, + AlwaysOn = kioskOptions?.PreventSleep is true, + ToggleFullScreenKeys = isKiosk ? Keys.None : Keys.F11, + EscapeExitsFullScreen = isKiosk is false, + FullScreen = isKiosk }; var pubSubService = Services.GetRequiredService(); pubSubHandlerReferenceToKeepAlive = pubSubService.Subscribe(ClientAppMessages.PAGE_DATA_CHANGED, async args => @@ -123,11 +136,31 @@ or CoreWebView2PermissionKind.ClipboardRead args.Handled = true; args.State = CoreWebView2PermissionState.Allow; }; + + if (isKiosk) + { + var webViewSettings = blazorWebView.WebView.CoreWebView2.Settings; + webViewSettings.AreDevToolsEnabled = false; + webViewSettings.AreDefaultContextMenusEnabled = false; + webViewSettings.AreBrowserAcceleratorKeysEnabled = false; + webViewSettings.IsZoomControlEnabled = false; + webViewSettings.IsSwipeNavigationEnabled = false; + webViewSettings.IsStatusBarEnabled = false; + blazorWebView.WebView.AllowExternalDrop = false; + // A second window would be one the lockdown does not own, and its chrome is the way back to the desktop. + blazorWebView.WebView.CoreWebView2.NewWindowRequested += (_, args) => args.Handled = true; + } + _ = StartBlazor(blazorWebView); }; form.Controls.Add(blazorWebView); + if (isKiosk) + { + WindowsKioskGuard.Apply(form); + } + Application.Run(form); } @@ -182,4 +215,9 @@ private static void LogException(object? error, string reportedBy) /// Strong root for the PAGE_DATA_CHANGED subscription, which PubSubService itself only holds weakly. /// private static Action? pubSubHandlerReferenceToKeepAlive; + + /// + /// Strong root for the kiosk manager, which only the form it hooks would otherwise keep alive. + /// + private static KioskModeManager? kioskModeManagerReferenceToKeepAlive; } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json index 77d546e5b45..d221667ad53 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Windows/appsettings.json @@ -16,5 +16,9 @@ "FilesUrl": null, "AutoReload": false }, + "Kiosk": { + "Enabled": false, + "PreventSleep": false + }, "$schema": "https://json.schemastore.org/appsettings.json" } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props index c8cb0255bca..ab113f76ed3 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props @@ -1,42 +1,41 @@ - + - - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - - + + + - - - - - - - + + + + + + + @@ -51,11 +50,11 @@ - - - - - + + + + + @@ -90,9 +89,9 @@ - + - + @@ -103,8 +102,14 @@ - - + + + + @@ -115,8 +120,8 @@ - - + + @@ -125,27 +130,26 @@ - + - + - - - - + + + + - - - + + + - - - - - + + + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj index b30500c213b..317e57787dd 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Boilerplate.Tests.E2E.csproj @@ -4,7 +4,7 @@ Repository-only: template.json excludes src/Internal/** from the packed template. --> - net10.0 + net11.0 enable 154C08DF-B089-4D8F-91F3-A95D2A4A27D2 $(MSBuildProjectDirectory)\.runsettings diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs new file mode 100644 index 00000000000..6695ea2c266 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Features/Kiosk/WindowsKioskTests.cs @@ -0,0 +1,153 @@ +using Boilerplate.Tests.E2E.Infrastructure.Services; + +namespace Boilerplate.Tests.E2E.Features.Kiosk; + +/// +/// Kiosk mode, which only the AdminPanel Windows app is built with (Kiosk.Enabled in +/// .github/workflows/admin-sample.cd.yml) - so Todo and Sales are here as the contrast that proves each assertion is +/// about the kiosk rather than about every Client.Windows app. +/// +/// Not parallelized: every Client.Windows app answers on the same hard-coded CDP port 9222 (see +/// ). +/// +/// +[TestClass, TestCategory(TestCategories.Windows), DoNotParallelize, Retry(2)] +public partial class WindowsKioskTests : AppTestBase +{ + protected override IAppOpener AppOpener => new WindowsAppOpener(); + + /// + /// The lockdown takes away every way out of the app, so the home page offers one back - but only where it is + /// needed, since an exit button on a window a user can simply close is noise. + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + [DataRow(App.Sales, false, DisplayName = "Sales")] + public async Task HomePage_Should_OfferTheWayOutOnlyInTheKioskApp(App app, bool isKiosk) + { + var page = await LaunchApp(app); + + await GoHome(page); + + var exit = ExitButton(page); + + if (isKiosk) + { + await Expect(exit).ToBeVisibleAsync(); + } + else + { + await Expect(exit).ToHaveCountAsync(0); + } + } + + /// + /// What KioskModeManager does to the window: no title bar and no resize border to reach a Close through, above the + /// taskbar, and over the whole monitor rather than the 1024x768 the form is built with. + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + public async Task Window_Should_BeBorderlessAndTopMostOnlyInTheKioskApp(App app, bool isKiosk) + { + await LaunchApp(app); + + var window = WindowsWindow.Of(DeployedApps.WindowsAppIdOf(app)!); + + Assert.AreEqual(isKiosk is false, WindowsWindow.HasCaption(window), $"{app}'s window {(isKiosk ? "still has" : "lost")} its title bar."); + Assert.AreEqual(isKiosk, WindowsWindow.IsTopMost(window), $"{app}'s window is {(isKiosk ? "not " : "")}topmost."); + + if (isKiosk) + { + Assert.AreEqual(WindowsWindow.ScreenBounds(window), WindowsWindow.RestoredBounds(window), $"{app}'s window does not cover its monitor."); + } + } + + /// + /// The close a person performs - Alt+F4, or the X that is no longer there. Refused in the kiosk app and nowhere + /// else; a Windows shutdown and a Task Manager close arrive as other reasons and are let through, which is why + /// this sends SC_CLOSE rather than WM_CLOSE (see ). + /// + [TestMethod] + [DataRow(App.AdminPanel, true, DisplayName = "AdminPanel (kiosk)")] + [DataRow(App.Todo, false, DisplayName = "Todo")] + public async Task Window_Should_RefuseTheUsersCloseOnlyInTheKioskApp(App app, bool isKiosk) + { + await LaunchApp(app); + + var window = WindowsWindow.Of(DeployedApps.WindowsAppIdOf(app)!); + + WindowsWindow.RequestUserClose(window); + + var exited = window.WaitForExit(TimeSpan.FromSeconds(30)); + + Assert.AreEqual(isKiosk, exited is false, isKiosk + ? $"{app} closed although kiosk mode refuses the user's own close." + : $"{app} did not close within 30 seconds of the close every window accepts."); + } + + /// + /// The home page's button is the only way out of a kiosk, so it has to actually end the process - not navigate, + /// not sign out. + /// + [TestMethod] + public async Task ExitButton_Should_EndTheKioskApp() + { + var page = await LaunchApp(App.AdminPanel); + + await GoHome(page); + + var window = WindowsWindow.Of(DeployedApps.AdminPanelWindowsAppId); + + try + { + await ExitButton(page).ClickAsync(); + } + catch (PlaywrightException) + { + // Environment.Exit takes the WebView down with the process, which can land before the click is answered. + } + + Assert.IsTrue(window.WaitForExit(TimeSpan.FromSeconds(30)), "The exit button did not end the app."); + Assert.AreEqual(0, window.ExitCode, "The kiosk app did not exit cleanly."); + } + + /// + /// 's launch with a stop that tolerates an app these tests have already ended. + /// + private async Task LaunchApp(App app) + { + var windowsAppId = DeployedApps.WindowsAppIdOf(app); + + if (windowsAppId is null) + Assert.Inconclusive($"{app} has no Windows build."); + + var (page, stop) = await Playwright.LaunchWindowsApp(windowsAppId!); + + RegisterForCleanup(async () => + { + try + { + await stop(); + } + catch (PlaywrightException) + { + IPlaywrightExtensions.StopWindowsApps(); + } + }); + + return page; + } + + /// The home page, rendered by the running app - the banner is not in the prerendered html of any app. + private async Task GoHome(IPage page) + { + await WaitUntilInteractive(page); + await GoToWhenInteractive(page, PageUrls.Home); + + await Expect(page.Locator("section .root-stack").First).ToBeVisibleAsync(); + } + + private static ILocator ExitButton(IPage page) => page.GetByRole(AriaRole.Button, new() { Name = AppStrings.KioskExitApp }); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs new file mode 100644 index 00000000000..02da17a0a1f --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Internal/Boilerplate.Tests.E2E/Infrastructure/Services/WindowsWindow.cs @@ -0,0 +1,141 @@ +using System.Drawing; +using System.Runtime.InteropServices; + +namespace Boilerplate.Tests.E2E.Infrastructure.Services; + +/// +/// The window an installed Client.Windows app draws its WebView in. Most of what the kiosk lockdown does is out there +/// rather than in the page - a borderless, topmost window over the whole screen that refuses the user's own close - so +/// Windows is the only one that can be asked about it. +/// +public static class WindowsWindow +{ + private const int GWL_STYLE = -16; + private const int GWL_EXSTYLE = -20; + private const int WS_CAPTION = 0x00C00000; + private const int WS_THICKFRAME = 0x00040000; + private const int WS_EX_TOPMOST = 0x00000008; + private const uint WM_SYSCOMMAND = 0x0112; + private const nint SC_CLOSE = 0xF060; + private const uint MONITOR_DEFAULTTONEAREST = 2; + + /// + /// The running process of , once it has a window. + /// kills every Client.Windows app before starting one, so + /// there is never a second candidate. + /// + public static Process Of(string windowsAppId) + { + var deadline = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(1); + + while (true) + { + var app = Process.GetProcessesByName(windowsAppId).FirstOrDefault(); + + if (app is not null) + { + app.Refresh(); + + if (app.MainWindowHandle is not 0) + { + _ = app.SafeHandle; // Opened while it is alive, or ExitCode is refused on a process we did not start. + return app; + } + } + + if (DateTimeOffset.UtcNow >= deadline) + throw new TimeoutException($"'{windowsAppId}' had no window within a minute of the test attaching to its WebView."); + + Thread.Sleep(TimeSpan.FromMilliseconds(250)); + } + } + + /// The title bar and the resize border - the one place a kiosk user could reach a Close button. + public static bool HasCaption(Process app) => (GetWindowLongW(app.MainWindowHandle, GWL_STYLE) & (WS_CAPTION | WS_THICKFRAME)) is not 0; + + /// Above the taskbar and everything else, which is what TopMostInFullScreen asks for. + public static bool IsTopMost(Process app) => (GetWindowLongW(app.MainWindowHandle, GWL_EXSTYLE) & WS_EX_TOPMOST) is not 0; + + /// + /// The bounds the window has when it is not minimized. Read through the placement rather than + /// GetWindowRect because a run that is not headed starts the apps minimized (see + /// ). + /// + public static Rectangle RestoredBounds(Process app) + { + var placement = new WINDOWPLACEMENT { length = Marshal.SizeOf() }; + + if (GetWindowPlacement(app.MainWindowHandle, ref placement) is false) + throw new InvalidOperationException($"Windows did not report the placement of '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + + return ToRectangle(placement.rcNormalPosition); + } + + /// The monitor the window is on, which is what KioskModeManager sizes a full screen window to. + public static Rectangle ScreenBounds(Process app) + { + var info = new MONITORINFO { cbSize = Marshal.SizeOf() }; + + if (GetMonitorInfoW(MonitorFromWindow(app.MainWindowHandle, MONITOR_DEFAULTTONEAREST), ref info) is false) + throw new InvalidOperationException($"Windows did not report the monitor of '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + + return ToRectangle(info.rcMonitor); + } + + /// + /// The close a person performs - Alt+F4, or the title bar's X. WinForms turns SC_CLOSE into + /// CloseReason.UserClosing, the one reason WindowsKioskGuard refuses; a plain WM_CLOSE arrives as + /// TaskManagerClosing and is let through deliberately, as is a Windows shutdown. + /// + public static void RequestUserClose(Process app) + { + if (PostMessageW(app.MainWindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0) is false) + throw new InvalidOperationException($"Windows did not deliver the close request to '{app.ProcessName}' ({Marshal.GetLastWin32Error()})."); + } + + private static Rectangle ToRectangle(RECT rect) => Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom); + + [StructLayout(LayoutKind.Sequential)] + private struct RECT + { + public int left, top, right, bottom; + } + + [StructLayout(LayoutKind.Sequential)] + private struct WINDOWPLACEMENT + { + public int length; + public int flags; + public int showCmd; + public Point ptMinPosition; + public Point ptMaxPosition; + public RECT rcNormalPosition; + } + + [StructLayout(LayoutKind.Sequential)] + private struct MONITORINFO + { + public int cbSize; + public RECT rcMonitor; + public RECT rcWork; + public int dwFlags; + } + + [DllImport("user32.dll")] + private static extern int GetWindowLongW(nint hWnd, int nIndex); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GetWindowPlacement(nint hWnd, ref WINDOWPLACEMENT lpwndpl); + + [DllImport("user32.dll")] + private static extern nint MonitorFromWindow(nint hWnd, uint dwFlags); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool GetMonitorInfoW(nint hMonitor, ref MONITORINFO lpmi); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool PostMessageW(nint hWnd, uint msg, nint wParam, nint lParam); +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj index 14e2fdb2714..38dc3a6838d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 AC87AA5B-4B37-4E52-8468-2D5DF24AF256 PrepareResources;$(CompileDependsOn) Default diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs new file mode 100644 index 00000000000..b1204664334 --- /dev/null +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Infrastructure/SignalR/AppHubOptions.cs @@ -0,0 +1,27 @@ +//+:cnd:noEmit +using Microsoft.AspNetCore.Http.Connections; + +namespace Boilerplate.Server.Api.Infrastructure.SignalR; + +public static class AppHubOptions +{ + public static void Configure(HttpConnectionDispatcherOptions options) + { + options.AllowStatefulReconnects = true; + + options.EnableAuthenticationRefresh = true; + options.CloseOnAuthenticationExpiration = true; + + options.OnAuthenticationRefresh = context => + { + var previous = context.PreviousUser; + var refreshed = context.NewUser; + + if (previous.IsAuthenticated() is false || refreshed.IsAuthenticated() is false) + return Task.FromResult(false); + + return Task.FromResult(previous.GetUserId() == refreshed.GetUserId() && + previous.GetSessionId() == refreshed.GetSessionId()); + }; + } +} diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs index 79023c46f91..3cbab1c992e 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Middlewares.cs @@ -83,7 +83,7 @@ private static void ConfigureMiddlewares(this WebApplication app) }).WithTags("Test").CacheOutput("AppResponseCachePolicy").ExcludeFromDescription(); //#if (signalR == true) - app.MapHub("/app-hub", options => options.AllowStatefulReconnects = true); + app.MapHub("/app-hub", Infrastructure.SignalR.AppHubOptions.Configure); // Chatbot tools. Isolated from /dev-mcp. Served under the api version the controllers carry as well. foreach (var path in new[] { OAuthResources.McpPath, $"{OAuthResources.McpPath}/v1" }) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj index 8191547c43d..42bd531ee40 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Boilerplate.Server.AppHost.csproj @@ -2,7 +2,7 @@ Exe - net10.0 + net11.0 true public AC87AA5B-4B37-4E52-8468-2D5DF24AF256 diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj index 6435bfce28e..f2522b474d1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Shared/Boilerplate.Server.Shared.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj index b47793ff1eb..1546ea31d02 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 AC87AA5B-4B37-4E52-8468-2D5DF24AF256 false @@ -17,7 +17,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Components/App.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Components/App.razor index eb2ada952f7..267b3bb61fd 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Components/App.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Components/App.razor @@ -130,9 +130,8 @@ actually carries pre-rendered html - otherwise the caller gets a page with no content AND no way to fetch any. *@ @if ((HttpContext.Request.IsLightHouseRequest() || HttpContext.Request.IsCrawlerClient()) is false || noPrerenderedContent) { - - - + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs index 57c0c8086c0..b5939fd8ac0 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Program.Middlewares.cs @@ -45,11 +45,7 @@ public void ConfigureMiddlewares() app.UseExceptionHandler(); //#endif - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); @@ -190,7 +186,7 @@ public void ConfigureMiddlewares() // and use the Server.Web project solely as a Blazor Server or pre-rendering service provider. throw new InvalidOperationException("Azure SignalR is not supported with Blazor Server and Auto"); } - app.MapHub("/app-hub", options => options.AllowStatefulReconnects = true); + app.MapHub("/app-hub", Api.Infrastructure.SignalR.AppHubOptions.Configure); // Chatbot tools. Isolated from /dev-mcp. Served under the api version the controllers carry as well. foreach (var path in new[] { OAuthResources.McpPath, $"{OAuthResources.McpPath}/v1" }) @@ -235,6 +231,9 @@ public void ConfigureMiddlewares() app.UseSiteMap(); // Handle the rest of requests with blazor + // blazor.web.js is endpoint-served from .NET 9 on, and this has to precede AddInteractiveWebAssemblyRenderMode. + app.MapStaticAssets(); + var blazorApp = app.MapRazorComponents() .CacheOutput("AppResponseCachePolicy") .AddInteractiveServerRenderMode() diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json index 5b5d92cf8f9..6b61d3698b6 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json @@ -31,7 +31,6 @@ "WebAppRender:BlazorMode": "BlazorWebAssembly" }, "dotnetRunMessages": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5030;http://*:5030" }, "WSL": { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj index 837cb69a407..5840f195383 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Boilerplate.Shared.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 PrepareResources;$(CompileDependsOn) @@ -9,7 +9,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx index 58a5b8b1fd9..1487f70b34f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.ar.resx @@ -2210,4 +2210,13 @@ أرسلنا رمزًا إلى {0} و{1}. + + وضع الكشك + + + هذا التطبيق مثبَّت على الشاشة: مفتاح Windows و Alt+Tab و إدارة المهام وإغلاق النافذة كلها محظورة. استخدم الزر للخروج. + + + الخروج من التطبيق + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx index 4768a4be4d8..9e117a58561 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.de.resx @@ -2210,4 +2210,13 @@ Nach Erreichen von {0} haben zusätzliche Anmeldungen reduzierte Funktionen. Wir haben einen Code an {0} und {1} gesendet. + + Kioskmodus + + + Diese App ist auf dem Bildschirm gesperrt: Windows-Taste, Alt+Tab, Task-Manager und das Schließen des Fensters sind alle blockiert. Verwenden Sie die Schaltfläche, um sie zu verlassen. + + + App beenden + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx index 702932b444b..a3aee49b2f9 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.es.resx @@ -2210,4 +2210,13 @@ Después de alcanzar {0}, los inicios de sesión adicionales tendrán funciones Hemos enviado un código a {0} y {1}. + + Modo quiosco + + + Esta aplicación está bloqueada en la pantalla: la tecla Windows, Alt+Tab, el Administrador de tareas y el cierre de la ventana están bloqueados. Usa el botón para salir. + + + Salir de la aplicación + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx index 7c50f39de08..f364dc71941 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fa.resx @@ -2210,4 +2210,13 @@ کد را به {0} و {1} فرستادیم. + + حالت کیوسک + + + این برنامه روی صفحه قفل شده است: کلید ویندوز، Alt+Tab، Task Manager و بستن پنجره همگی مسدود شده‌اند. برای خروج از دکمه استفاده کنید. + + + خروج از برنامه + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx index 1ad8ac739c6..ffa7902baea 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.fr.resx @@ -2210,4 +2210,13 @@ Après avoir atteint {0}, les connexions supplémentaires auront des fonctions r Nous avons envoyé un code à {0} et {1}. + + Mode kiosque + + + Cette application est verrouillée à l'écran : la touche Windows, Alt+Tab, le Gestionnaire des tâches et la fermeture de la fenêtre sont tous bloqués. Utilisez le bouton pour quitter. + + + Quitter l'application + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx index 95e0ee4265a..9e801018cad 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.hi.resx @@ -2210,4 +2210,13 @@ हमने {0} और {1} पर कोड भेजा है। + + कियोस्क मोड + + + यह ऐप स्क्रीन पर लॉक है: Windows की, Alt+Tab, Task Manager और विंडो बंद करना सभी अवरुद्ध हैं। बाहर निकलने के लिए बटन का उपयोग करें। + + + ऐप से बाहर निकलें + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx index 5374d99a3b1..cd83631383d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.nl.resx @@ -2210,4 +2210,13 @@ Na het bereiken van {0} zullen extra aanmeldingen verminderde functies hebben. We hebben een code naar {0} en {1} gestuurd. + + Kioskmodus + + + Deze app is vergrendeld op het scherm: de Windows-toets, Alt+Tab, Taakbeheer en het sluiten van het venster zijn allemaal geblokkeerd. Gebruik de knop om af te sluiten. + + + App afsluiten + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx index a5d304613bc..cce1634d020 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.resx @@ -2210,4 +2210,13 @@ After reaching {0}, extra sign-ins will have reduced functions. We sent a code to {0} and {1}. + + Kiosk mode + + + This app is locked to the screen: the Windows key, Alt+Tab, Task Manager and closing the window are all blocked. Use the button to leave. + + + Exit the app + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx index b8b13d89ee4..accc46f47ae 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.sv.resx @@ -2210,4 +2210,13 @@ Efter att ha nått {0} kommer extra inloggningar att ha reducerade funktioner. Vi skickade en kod till {0} och {1}. + + Kioskläge + + + Den här appen är låst till skärmen: Windows-tangenten, Alt+Tab, Aktivitetshanteraren och att stänga fönstret är alla blockerade. Använd knappen för att avsluta. + + + Avsluta appen + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx index 5b3ff8160a8..b586d6d1e9f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Shared/Resources/AppStrings.zh.resx @@ -2210,4 +2210,13 @@ 我们已将验证码发送至 {0} 和 {1}。 + + 自助终端模式 + + + 此应用已锁定在屏幕上:Windows 键、Alt+Tab、任务管理器和关闭窗口均已被阻止。请使用按钮退出。 + + + 退出应用 + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj index 7c8ddf186da..9319e87e508 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Boilerplate.Tests.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 enable $(MSBuildProjectDirectory)\.runsettings --settings ./.runsettings --report-trx --report-trx-filename TestResults.trx --results-directory ./TestResults @@ -10,7 +10,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs index 035a69283bc..168e1f3c013 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/Identity/IStorageServiceContractTests.cs @@ -13,7 +13,7 @@ namespace Boilerplate.Tests.Features.Identity; /// /// ⚠ Only the test double is exercised here, and that is a real gap, not an oversight. /// MauiStorageService and WindowsStorageService live in projects this one does not reference and cannot: -/// Client.Maui needs the MAUI workloads and Client.Windows is net10.0-windows, so referencing either would +/// Client.Maui needs the MAUI workloads and Client.Windows is net11.0-windows, so referencing either would /// retarget the test project and break the Linux CI job. WebStorageService is reachable as a type but its /// stores are localStorage and sessionStorage behind JS interop, so it needs a browser. What this class /// buys is a single, executable statement of the contract that a reader can diff the three by hand against; what it diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/ServerWeb/HostPageRenderTests.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/ServerWeb/HostPageRenderTests.cs index ed5de4c342f..0fc5f58eb4f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/ServerWeb/HostPageRenderTests.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Tests/Features/ServerWeb/HostPageRenderTests.cs @@ -48,7 +48,7 @@ public partial class HostPageRenderTests private const string DuckDuckBotUserAgent = "Mozilla/5.0 (compatible; DuckDuckBot-Https/1.1; https://duckduckgo.com/duckduckbot)"; - private const string BlazorBootScript = "_framework/bit.blazor.web.es2019.js"; + private const string BlazorBootScript = "_framework/blazor.web.js"; public TestContext TestContext { get; set; } = default!; diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj index 2a0a7ac095f..331a38f0970 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Client/Bit.Websites.Careers.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false true Default true @@ -15,13 +16,12 @@ false false false - false true - + @@ -30,20 +30,20 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js b/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js index e787665d637..b33cb22c55a 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; @@ -8,7 +8,9 @@ self.assetsExclude = [ /bit\.blazorui\.fluent-light\.css$/, // the flag image sets of Bit.BlazorUI.Assets: thousands of images, fetched as the flags are drawn - /_content\/Bit\.BlazorUI\.Assets\/flags/ + /_content\/Bit\.BlazorUI\.Assets\/flags/, + + /^_framework\/blazor\.webassembly\.js$/ ]; self.externalAssets = [ { @@ -18,7 +20,7 @@ self.externalAssets = [ "url": "Bit.Websites.Careers.Client.bundle.scp.css" }, { - url: "_framework/bit.blazor.web.es2019.js" + url: "_framework/blazor.web.js" } ]; diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj index 67801dcdc04..746252a4a71 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true true @@ -12,18 +12,17 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Components/App.razor b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Components/App.razor index 3c4cacd66c4..7d1fe4db7ed 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Components/App.razor +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Components/App.razor @@ -28,8 +28,8 @@ @if (HttpContext.Request.IsLightHouseRequest() is false) { - - + + diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json index 7c9462e500b..378a2cff059 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5080;https://localhost:5081", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs index 6aa21719518..d92bf8198a2 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Startup/Middlewares.cs @@ -15,11 +15,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); @@ -77,6 +73,9 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati UseSiteMap(app); + // blazor.web.js is endpoint-served from .NET 9 on, so UseStaticFiles never answers for it. + app.MapStaticAssets(); + app.MapRazorComponents() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj index 03c8ee3534a..51c01669532 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Shared/Bit.Websites.Careers.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Careers/src/Directory.Build.props b/src/Websites/Careers/src/Directory.Build.props index c9461abc337..b47538453d9 100644 --- a/src/Websites/Careers/src/Directory.Build.props +++ b/src/Websites/Careers/src/Directory.Build.props @@ -1,4 +1,4 @@ - + 14.0 diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj index 505230c764b..16ff51d149d 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj @@ -1,10 +1,11 @@  - net10.0 + net11.0 + false true Default - true @@ -18,10 +19,6 @@ false false false - - false true @@ -30,28 +27,28 @@ - + - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js b/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js index f5d213281a3..0a503ddae9d 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; @@ -8,7 +8,9 @@ self.assetsExclude = [ /bit\.blazorui\.fluent-light\.css$/, // the flag image sets of Bit.BlazorUI.Assets: thousands of images, fetched as the flags are drawn - /_content\/Bit\.BlazorUI\.Assets\/flags/ + /_content\/Bit\.BlazorUI\.Assets\/flags/, + + /^_framework\/blazor\.webassembly\.js$/ ]; self.externalAssets = [ { @@ -18,7 +20,7 @@ self.externalAssets = [ "url": "Bit.Websites.Platform.Client.bundle.scp.css" }, { - url: "_framework/bit.blazor.web.es2019.js" + url: "_framework/blazor.web.js" } ]; diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj index 1e65e50a4fe..cf4419b3f44 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 @@ -15,20 +15,19 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor index d89b93ac1f3..7a86ef38fe8 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor @@ -95,8 +95,8 @@ @if (HttpContext.Request.IsLightHouseRequest() is false) { - - + + diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json index 71267e16ba4..d4248eaee6e 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5055;https://localhost:5066", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs index cccd9dafbc8..b4e54e86017 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs @@ -19,11 +19,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); @@ -97,6 +93,9 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati UseSiteMap(app); + // blazor.web.js is endpoint-served from .NET 9 on, so UseStaticFiles never answers for it. + app.MapStaticAssets(); + app.MapRazorComponents() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj index 03c8ee3534a..51c01669532 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Shared/Bit.Websites.Platform.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Platform/src/Directory.Build.props b/src/Websites/Platform/src/Directory.Build.props index f35fad08b9b..29d3405809a 100644 --- a/src/Websites/Platform/src/Directory.Build.props +++ b/src/Websites/Platform/src/Directory.Build.props @@ -1,4 +1,4 @@ - + preview diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj index 20db15df20a..7315fbb69c6 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Client/Bit.Websites.Sales.Client.csproj @@ -1,7 +1,8 @@  - net10.0 + net11.0 + false true Default true @@ -15,13 +16,12 @@ false false false - false true - + @@ -30,20 +30,20 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js b/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js index 08954579532..94b82b5d9f1 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Client/wwwroot/service-worker.published.js @@ -1,4 +1,4 @@ -// bit version: 10.6.2 +// bit version: 11.0.0-pre-01 // https://github.com/bitfoundation/bitplatform/tree/develop/src/Bswup self.assetsInclude = []; @@ -8,7 +8,9 @@ self.assetsExclude = [ /bit\.blazorui\.fluent-light\.css$/, // the flag image sets of Bit.BlazorUI.Assets: thousands of images, fetched as the flags are drawn - /_content\/Bit\.BlazorUI\.Assets\/flags/ + /_content\/Bit\.BlazorUI\.Assets\/flags/, + + /^_framework\/blazor\.webassembly\.js$/ ]; self.externalAssets = [ { @@ -18,7 +20,7 @@ self.externalAssets = [ "url": "Bit.Websites.Sales.Client.bundle.scp.css" }, { - url: "_framework/bit.blazor.web.es2019.js" + url: "_framework/blazor.web.js" } ]; diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj index cd3831c22a8..f6192ee572e 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj @@ -1,7 +1,7 @@ - net10.0 + net11.0 true true @@ -12,18 +12,17 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Components/App.razor b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Components/App.razor index 6a7c51e91e6..7095a1b8b7d 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Components/App.razor +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Components/App.razor @@ -49,8 +49,8 @@ @if (HttpContext.Request.IsLightHouseRequest() is false) { - - + + diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json index 01bd023c72b..fdbda58f7b6 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Properties/launchSettings.json @@ -14,7 +14,6 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", "applicationUrl": "http://localhost:5070;https://localhost:5071", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs index 8225ef3a800..1ab5de33a83 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Startup/Middlewares.cs @@ -15,11 +15,7 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati { app.UseForwardedHeaders(); - if (env.IsDevelopment()) - { - app.UseWebAssemblyDebugging(); - } - else + if (env.IsDevelopment() is false) { app.UseHttpsRedirection(); app.UseResponseCompression(); @@ -77,6 +73,9 @@ public static void Use(WebApplication app, IWebHostEnvironment env, IConfigurati UseSiteMap(app); + // blazor.web.js is endpoint-served from .NET 9 on, so UseStaticFiles never answers for it. + app.MapStaticAssets(); + app.MapRazorComponents() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj index 03c8ee3534a..51c01669532 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Shared/Bit.Websites.Sales.Shared.csproj @@ -1,22 +1,22 @@  - net10.0 + net11.0 en-US - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + compile; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Websites/Sales/src/Directory.Build.props b/src/Websites/Sales/src/Directory.Build.props index a4dd6d44416..7ece91e539e 100644 --- a/src/Websites/Sales/src/Directory.Build.props +++ b/src/Websites/Sales/src/Directory.Build.props @@ -1,4 +1,4 @@ - + 14.0 diff --git a/src/global.json b/src/global.json index 6a7e4747e99..0aa152c4bec 100644 --- a/src/global.json +++ b/src/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.401", + "version": "11.0.100-rc.1.26425.128", "rollForward": "disable" }, "test": {