diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 834c76d3dbdf..13d2d547569b 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -6,25 +6,36 @@ "version": "4.0.0", "commands": [ "dotnet-cake" - ] + ], + "rollForward": false }, "powershell": { "version": "7.4.0", "commands": [ "pwsh" - ] + ], + "rollForward": false }, "api-tools": { "version": "1.3.5", "commands": [ "api-tools" - ] + ], + "rollForward": false }, "microsoft.dotnet.xharness.cli": { - "version": "9.0.0-prerelease.24203.1", + "version": "9.0.0-prerelease.25214.1", "commands": [ "xharness" - ] + ], + "rollForward": false + }, + "androidsdk.tool": { + "version": "0.19.0", + "commands": [ + "android" + ], + "rollForward": false } } } diff --git a/.editorconfig b/.editorconfig index 19d51c0037d7..dbe6fc83173f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -67,6 +67,10 @@ csharp_style_var_for_built_in_types = true:none csharp_style_var_when_type_is_apparent = true:none csharp_style_var_elsewhere = false:none +# Namespace preference (prefer file-scoped namespaces) +csharp_style_namespace_declarations = file_scoped +dotnet_diagnostic.IDE0161.severity = suggestion + # use language keywords instead of BCL types dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion dotnet_style_predefined_type_for_member_access = true:suggestion diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 04fe3e69daa7..5d4738160917 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,10 +1,12 @@ * @dotnet/dotnet-maui-reviewers -# Tizen (this probably doesn't work since these do not have write access -**/Tizen @rookiejava @myroot @shyunmin @sung-su @JoonghyunCho -*.tizen.cs @rookiejava @myroot @shyunmin @sung-su @JoonghyunCho -*.Tizen.cs @rookiejava @myroot @shyunmin @sung-su @JoonghyunCho - # Blazor Desktop /src/BlazorWebView/ @dotnet/dotnet-maui-blazor-eng /src/Templates/src/templates/maui-blazor/ @dotnet/dotnet-maui-blazor-eng +/src/Templates/src/templates/maui-blazor-solution/ @dotnet/dotnet-maui-blazor-eng + +# Localization +/eng/automation/LocProject.json @tj-devel709 +**/localize/*.json @tj-devel709 +**/*.resx @tj-devel709 +**.*.resx.lcl @tj-devel709 diff --git a/.github/DEVELOPMENT.md b/.github/DEVELOPMENT.md index ab5454520655..899b91b47126 100644 --- a/.github/DEVELOPMENT.md +++ b/.github/DEVELOPMENT.md @@ -3,72 +3,40 @@ This page contains steps to build and run the .NET MAUI repository from source. If you are looking to build apps with .NET MAUI please head over to the links in the [README](https://github.com/dotnet/maui/blob/main/README.md) to get started. ## Initial setup + ### Windows - - Install VS 17.8 or newer + - Install VS 17.12 or newer - Follow [these steps](https://learn.microsoft.com/dotnet/maui/get-started/installation?tabs=vswin) to include MAUI - - Select the 20348 SDK option inside Individual Components or [install 20348 manually](https://go.microsoft.com/fwlink/?linkid=2164145). If you know you have 20348 installed but are still getting an error around this SDK missing, trying uninstalling and reinstalling the SDK. - If building iOS with pair to Mac: Install current stable Xcode on your Mac. Install from the [App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12) or [Apple Developer portal](https://developer.apple.com/download/more/?name=Xcode) - If you're missing any of the Android SDKs, Visual Studio should prompt you to install them. If it doesn't prompt you then use the [Android SDK Manager](https://learn.microsoft.com/xamarin/android/get-started/installation/android-sdk) to install the necessary SDKs. + - Install [Open JDK 17](https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-17) ### Mac - - Install VS Code and dependencies - - Follow [these steps](https://learn.microsoft.com/en-us/dotnet/maui/get-started/installation?view=net-maui-8.0&tabs=visual-studio-code), installing VS Code, MAUI extension, .NET8, Xcode, OpenJDK, and Android SDK - - Install Mono from [Mono Project](https://www.mono-project.com) - - For Xcode, you can install from the [App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12) or [Apple Developer portal](https://developer.apple.com/download/more/?name=Xcode) - - As of 26 March 2024, Xcode 15.3 is not yet supported. Check [this issue](https://github.com/dotnet/maui/issues/21057) for updates - - Edit your `.zprofile` file to ensure that the following environment variables are set/modified (you may need to adjust the version of OpenJDK): - ```shell - export JAVA_HOME=/Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home - export ANDROID_HOME=~/Library/Android/sdk - export ANDROID_SDK_ROOT=~/Library/Android/sdk - export PATH="$PATH:~/.dotnet/tools" - export PATH="$PATH:$ANDROID_HOME/platform-tools" - export PATH="$PATH:$ANDROID_HOME/tools" - export PATH="$PATH:$ANDROID_HOME/tools/bin" - export PATH="$PATH:$ANDROID_HOME/tools/emulator" - ``` - - In VSCode do `command--shift-P` then type `code path` and select the option `Shell Command: Install 'code' in PATH` + - Install [VSCode](https://code.visualstudio.com/download) + - Follow the steps for installing the .NET MAUI Dev Kit for VS Code: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-maui ## Building the Build Tasks Before opening the solution in Visual Studio / VS Code you **MUST** build the build tasks. -### Windows -- Do this to build the build tasks and launch Visual Studio, automatically opening the default solution: - - ```dotnetcli - dotnet tool restore - dotnet cake --target=VS --workloads=global - ``` - -- OR do this to just build the build tasks. You can then launch Visual Studio manually and open the solution of your choosing: +Note: the main branch is always [pinned to the latest stable release](https://github.com/dotnet/maui/blob/main/global.json) of the .NET SDK. This is regardless of said release being a long-term support (LTS) release or not. This means that you will need to have that version of the .NET SDK installed and configured on your machine in order to be able to execute the commands below and build the .NET MAUI codebase. - ```dotnetcli - dotnet tool restore - dotnet build ./Microsoft.Maui.BuildTasks.slnf - ``` +1. Open a command prompt/terminal/shell window +1. Navigate to the location of your cloned `dotnet/maui` repo, for example: + ```shell + cd \repos\maui + ``` +1. Run these commands: + ```dotnetcli + dotnet tool restore + dotnet build ./Microsoft.Maui.BuildTasks.slnf + ``` -### Mac -- Do this to build the tasks and open the Visual Studio Code codespace: - - ```dotnetcli - dotnet tool restore - dotnet cake --target=VSCode --workloads=global - ``` +## Windows +Open the `Microsoft.Maui-windows.slnf` file in Visual Studio from the root of the repo. -*NOTE*: `--workloads=global` means use the normal (globally installed) .NET workloads. +## Mac - -## Available Solutions -- Microsoft.Maui.sln - - Kitchen sink solution. This includes all of the `Compatibility` projects and all of the platforms that we compile for. It is very unlikely you will need to use this solution for development. -- Microsoft.Maui-dev.sln - - `Microsoft.Maui.sln` but without the `Compatibility` projects. Because we can't detect solution filters inside `MSBuild` we had to create a separate `sln` without the `Compatibility` projects. -- Microsoft.Maui-windows.slnf - - `Microsoft.Maui-dev.sln` with all of the targets you can't build on `Windows` removed (GTK/Catalyst). Default solution on Windows. -- Microsoft.Maui-mac.slnf - - `Microsoft.Maui-dev.sln` with all of the `Windows` targets filtered out. Legacy solution for VS Mac. -- Microsoft.Maui-vscode.sln - - Solution for VS Code (VS Code doesn't support solution filters) +Open the root folder of the repository in VS Code. *NOTE*: IntelliSense takes a decent amount of time to fully process your solution. It will eventually work through all the necessary tasks. If you are having IntelliSense issues, usually unloading/reloading the `maui.core` and `maui.controls` projects will resolve. @@ -79,9 +47,9 @@ As a general rule: Use ‘main’ for bug fixes that don’t require API changes. For new features and changes to public APIs, you must use the branch of the next .NET version. -- [net9.0](https://github.com/dotnet/maui/tree/net9.0) +- [net10.0](https://github.com/dotnet/maui/tree/net10.0) -## Repository projects +## Sample projects ### Samples ``` @@ -89,7 +57,6 @@ Use ‘main’ for bug fixes that don’t require API changes. For new features │ ├── samples │ │ ├── Maui.Controls.Sample │ │ ├── Maui.Controls.Sample.Sandbox -│ │ ├── Controls.Sample.UITests ├── Essentials │ ├── samples │ │ ├── Essentials.Sample @@ -101,261 +68,12 @@ Use ‘main’ for bug fixes that don’t require API changes. For new features - *Maui.Controls.Sample*: Full gallery sample with all of the controls and features of .NET MAUI - *Maui.Controls.Sample.Sandbox*: Empty project useful for testing reproductions or use cases -- *Contols.Sample.UITests*: Sample used for the automated UI tests -- *Essentials.Sample*: Full gallery demonstrating the library previously known as essentials. These are all the non UI related MAUI APIs. - -### Device Test Projects - -[Writing Device Tests](https://github.com/dotnet/maui/wiki/DeviceTests) - -These are tests that will run on an actual device - - ``` -├── Controls -│ ├── test -│ │ ├── Controls.DeviceTests -├── Core -│ ├── test -│ │ ├── Core.DeviceTests -├── Essentials -│ ├── test -│ │ ├── Essentials.DeviceTests -├── BlazorWebView -│ ├── test -│ │ ├── MauiBlazorWebView.DeviceTests -``` - -- *Controls.DeviceTests*: .NET MAUI Controls Visual Runner for running device based xunit tests. This is useful for tests that require XAML features -- *Core.DeviceTests*: .NET MAUI Core Visual Runner for running device based xunit tests. This is for tests that don't require any MAUI Controls based features -- *Essentials.DeviceTests*: Visual Runner running all the .NET MAUI essentials xunit tests. -- *MauiBlazorWebView.DeviceTests*: Visual Runner for BlazorWebView tests. - -### UI Test Projects - -[Writing UI Tests](https://github.com/dotnet/maui/wiki/UITests) - -These are tests used for exercising the UI through accessibility layers to simulate user interactions - -``` -├── Controls -│ ├── samples -│ │ ├── Controls.Sample.UITests -│ ├── tests -│ │ ├── Controls.AppiumTests -``` - -### Unit Test Projects - -These are tests that will not run on a device. This is useful for testing device independent logic. - - ``` -├── Controls -│ ├── test -│ │ ├── Controls.Core.UnitTests -├── Core -│ ├── test -│ │ ├── Core.UnitTests -├── Essentials -│ ├── test -│ │ ├── Essentials.UnitTests -``` - -### Reproducing an Issue/Debugging .NET MAUI Code -Open the .NET MAUI workspace in VSCode. -In VSCode, select the device that you will be testing on. Using the command palette (ctrl-shift-P/command-shift-P) type `pick device` and -you will be presented with a set of choices for your target device (Android, iOS, etc). Select one. -There is a sample project in `src/Controls/samples/Controls.Sample.Sandbox`. This is an empty project -into which you can add your code to reproduce an issue and also set breakpoints in .NET MAUI source code. -Let VSCode know this is the project you want to select by going to the command palette (ctrl-shift-P/command-shift-P) -and typing `pick startup` and select ".NET MAUI: Pick Startup Project" and select the Sandbox project. - - Before using the command palette for the first time, you may have to wait a minute -for intellisense and other tasks to complete before using the command palette. If the project hasn't -'settled' yet, you will see an error "Pick Startup Project has resulted in an error." - -*Note:* When you are committing your PR, do not include your changes to the Sandbox project. - -### Integration Tests - -The Integration test project under `src/TestUtils/src/Microsoft.Maui.IntegrationTests` contains tests which build and/or run MAUI templates or other projects. - -These tests can be ran using the test explorer in VS, or from command line with `dotnet test`. Here's how to run an individual test with parameters from command line: - -```bash -dotnet test src/TestUtils/src/Microsoft.Maui.IntegrationTests --logger "console;verbosity=diagnostic" --filter "Name=Build\(%22maui%22,%22net7.0%22,%22Debug%22,False\)" -``` - -You can find detailed information about testing in the [Wiki](https://github.com/dotnet/maui/wiki/Testing). - -### Additional Cake Commands - -#### Clean -`--clean` -- This will do a recursive delete of all your obj/bin folders. This is helpful if for some reason your repository is in a bad state and you don't want to go as scorched earth as `git clean -xdf` - -#### Target a specific platform -`--android` -`--ios` -`--windows` -`--catalyst` - -```bash -dotnet cake --target=VS --workloads=global --android --ios -``` - -*Note* you will have to `git clean -xdf` your project if you change or add platforms. - -### Blazor Desktop - -To build and run Blazor Desktop samples, check out the [Blazor Desktop](https://github.com/dotnet/maui/wiki/Blazor-Desktop) wiki topic. - -### Android - -To workaround a performance issue, all `Resource.designer.cs` -generation is disabled for class libraries in this repo. - -If you need to add a new `@(AndroidResource)` value to be used from C# -code in .NET MAUI: - -1. Comment out the `` in `Directory.Build.targets` that - sets `$(AndroidGenerateResourceDesigner)` and - `$(AndroidUseIntermediateDesignerFile)` to `false`. - -2. Build .NET MAUI as you normally would. You will get compiler errors - about duplicate fields, but `obj\Debug\net[current_sdk_version]-android\Resource.designer.cs` - should now be generated. - -3. Open `obj\Debug\net[current_sdk_version]-android\Resource.designer.cs`, and find the - field you need such as: - -```csharp -// aapt resource value: 0x7F010000 -public static int foo = 2130771968; -``` - -4. Copy this field to the `Resource.designer.cs` checked into source - control, such as: `src\Controls\src\Core\Platform\Android\Resource.designer.cs` - -5. Restore the commented code in `Directory.Build.targets`. - - -# Advanced Scenarios - -### Compile using a local `bin\dotnet` via `dotnet-local.*` - -This method will use the .NET and workload versions that are specific to the branch you are on, which is a good way to ensure compatibility. - -Use `dotnet-local.cmd` on Windows or `dotnet-local.sh` on Unix to ensure that `PATH` is set consistently. - -#### Cake - -You can run a `Cake` target to bootstrap .NET SDK in `bin\dotnet` and launch Visual Studio: - -```dotnetcli -dotnet tool restore -dotnet cake --target=VS -``` - -There is also a `VSCode` target for launching Visual Studio Code. - -```dotnetcli -dotnet tool restore -dotnet cake --target=VSCode -``` - -#### Testing branch against your project -`--sln=` -- This will pack .NET and then open a VS instance using the local pack. This is useful if you want to check to see if the changes in a branch will address your particular issues. Pack only runs the first time so you will need to explicitly add the `--pack` flag if you make changes and need to repack. - -```dotnetcli -dotnet tool restore -dotnet cake --sln="\MauiApp2\MauiApp2.sln" --target=VS -``` - -#### Pack -`--pack` -- This creates .NET MAUI packs inside the local dotnet install. This lets you use the CLI commands with the local dotnet to create/deploy with any changes that have been made on that branch (including template changes). - -```dotnetcli -dotnet tool restore -dotnet cake --target=VS --pack --sln="\MauiApp2\MauiApp2.sln" -``` - -Create new .NET MAUI app using your new packs -```dotnetcli -dotnet tool restore -dotnet cake --pack -mkdir MyMauiApp -cd MyMauiApp -..\bin\dotnet\dotnet new maui -..\bin\dotnet\dotnet build -t:Run -f net[current_sdk_version]-android -``` - -You can also run commands individually: -```dotnetcli -# install local tools required to build (cake, pwsh, etc..) -dotnet tool restore -# Provision .NET SDK in bin\dotnet -dotnet build src\DotNet\DotNet.csproj -# Builds Maui MSBuild tasks -.\bin\dotnet\dotnet build Microsoft.Maui.BuildTasks.slnf -# Builds the rest of Maui -.\bin\dotnet\dotnet build Microsoft.Maui.sln -# Launch Visual Studio -dotnet cake --target=VS -``` - -## Debugging MSBuild Tasks using VS/VSCode - -One thing that is very useful is the ability to debug your Tasks while -they are being run on a build process. This is possible thanks to the -`MSBUILDDEBUGONSTART` environment variable. When set to `2` this will -force MSBuild to wait for a debugger connection before continuing. -You will see the following prompt. - -```dotnetcli -Waiting for debugger to attach (dotnet PID 13001). Press enter to continue... -``` - -You can then use VS or VSCode to attach to this process and debug you tasks. -You can start your test app with the `dotnet-local` script (so it uses your maui build) - -### [MacOS](#tab/macos) - -```dotnetcli -MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 -``` - -### [Linux](#tab/linux) - -```dotnetcli -MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 -``` - -### [Windows](#tab/windows) - -```dotnetcli -set MSBUILDDEBUGONSTART=2 -~//dotnet-local.cmd build -m:1 -``` - ---- - -Note: the `-m:1` is important as it restricts MSBuild to 1 node. - -Once MSBuild starts it will print the following - -```dotnetcli -Waiting for debugger to attach (dotnet PID xxxx). Press enter to continue... -``` - -You need to copy the PID value so we can use this in the IDE. For Visual Studio you can use the `Attach to Process` menu option, while you have the Microsoft.Maui.sln solution open. For VSCode open the workspace then use the `Attach to Process` Run and Debug option. You will be prompted for the PID and it will then connect. +- *Essentials.Sample*: Full gallery demonstrating the library previously known as Essentials. These are all the non UI related MAUI APIs. -Once connected go back to your command prompt and press ENTER so that the MSBuild process can continue. +### Testing -You will be able to set breakpoints in Tasks (but not Targets) and step through code from this point on. +- [Testing Wiki](https://github.com/dotnet/maui/wiki/Testing) -If you want to test in-tree in VSCode the `Build Platform Sample` command will ask you if you want to debug MSBuild tasks and fill in the `MSBUILDDEBUGONSTART` for you. The PID text will appear in the `Terminal` window in VSCode. You can then use the `Attach to Process` Run and Debug option to attach to the process. ## Stats diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 4c5a6b55a182..75b0f870b469 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -7,8 +7,6 @@ body: attributes: value: | Thanks for taking the time to fill out this bug report! Please make sure to add as much detail as you can, preferably with a [reproduction](https://github.com/dotnet/maui/blob/main/.github/repro.md). This will help us diagnose the issue faster and thus resolve it quicker. - - If this is a bug in Xamarin.Forms, please [open the issue in the Xamarin.Forms repo](https://github.com/xamarin/Xamarin.Forms/issues/new?assignees=&labels=s%2Funverified%2C+t%2Fbug+%3Abug%3A&template=bug_report.md&title=[Bug]+). - type: textarea id: description attributes: @@ -44,25 +42,51 @@ body: label: Version with bug description: In what version do you see this issue? Run `dotnet workload list` to find your version. options: - - + - 10.0.0-preview.4 + - 10.0.0-preview.3 + - 10.0.0-preview.2 + - 10.0.0-preview.1 + - 9.0.70 SR7 + - 9.0.61 SR6.1 + - 9.0.60 SR6 + - 9.0.50 SR5 + - 9.0.40 SR4 + - 9.0.30 SR3 + - 9.0.22 SR2.2 + - 9.0.21 SR2.1 + - 9.0.14 SR1.4 + - 9.0.12 SR1.2 + - 9.0.10 SR1 + - 9.0.0 GA + - 9.0.0-rc.2.24503.2 + - 9.0.0-rc.1.24453.9 + - 9.0.0-preview.7.24407.4 + - 9.0.0-preview.6.24327.7 + - 9.0.0-preview.5.24307.10 + - 9.0.0-preview.4.10690 + - 9.0.0-preview.3.10457 - 9.0.0-preview.2.10293 - 9.0.0-preview.1.9973 + - 8.0.100 SR10 + - 8.0.93 SR9.3 + - 8.0.92 SR9.2 + - 8.0.91 SR9.1 + - 8.0.90 SR9 + - 8.0.83 SR8.3 + - 8.0.82 SR8.2 + - 8.0.80 SR8 + - 8.0.71 SR7.1 + - 8.0.70 SR7 + - 8.0.61 SR6.1 + - 8.0.60 SR6 + - 8.0.40 SR5 + - 8.0.21 SR4.1 - 8.0.20 SR4 - 8.0.14 SR3.1 - 8.0.10 SR3 - 8.0.7 SR2 - 8.0.6 SR1 - 8.0.3 GA - - 7.0.101 - - 7.0.100 - - 7.0.96 - - 7.0.92 - - 7.0.86 - - 7.0.81 - - 7.0.59 - - 7.0.58 - - 7.0.52 - - 7.0.49 - Nightly / CI build (Please specify exact version) - Unknown/Other validations: @@ -115,8 +139,45 @@ body: - 8.0.10 SR3 - 8.0.14 SR3.1 - 8.0.20 SR4 + - 8.0.21 SR4.1 + - 8.0.40 SR5 + - 8.0.60 SR6 + - 8.0.61 SR6.1 + - 8.0.70 SR7 + - 8.0.71 SR7.1 + - 8.0.80 SR8 + - 8.0.82 SR8.2 + - 8.0.83 SR8.3 + - 8.0.90 SR9 + - 8.0.91 SR9.1 + - 8.0.92 SR9.2 + - 8.0.93 SR9.3 + - 8.0.100 SR10 - 9.0.0-preview.1.9973 - 9.0.0-preview.2.10293 + - 9.0.0-preview.3.10457 + - 9.0.0-preview.4.10690 + - 9.0.0-preview.5.24307.10 + - 9.0.0-preview.6.24327.7 + - 9.0.0-preview.7.24407.4 + - 9.0.0-rc.1.24453.9 + - 9.0.0-rc.2.24503.2 + - 9.0.0 GA + - 9.0.10 SR1 + - 9.0.12 SR1.2 + - 9.0.14 SR1.4 + - 9.0.21 SR2.1 + - 9.0.22 SR2.2 + - 9.0.30 SR3 + - 9.0.40 SR4 + - 9.0.50 SR5 + - 9.0.60 SR6 + - 9.0.61 SR6.1 + - 9.0.70 SR7 + - 10.0.0-preview.1 + - 10.0.0-preview.2 + - 10.0.0-preview.3 + - 10.0.0-preview.4 validations: required: true - type: dropdown diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c469d6c4a616..fe467c1887c5 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,11 @@ + +> [!NOTE] +> Are you waiting for the changes in this PR to be merged? +> It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! + + ### Description of Change diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 000000000000..96d73bc27c22 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd). + + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0650f42362c9..a6db7db80e08 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -41,10 +41,14 @@ updates: - "Microsoft.Graphics.Win2D" - "Microsoft.Windows.SDK.BuildTools" - "Microsoft.WindowsAppSDK" + - "Microsoft.Web.WebView2" xunit: patterns: - "xunit" - "xunit.runner.*" + SyncfusionToolkit: + patterns: + - "Syncfusion.Maui.Toolkit" ignore: - dependency-name: "MicrosoftMauiGraphicsVersion" # maestro - dependency-name: "Microsoft.Maui.Graphics*" # maestro @@ -57,8 +61,8 @@ updates: - dependency-name: "Newtonsoft.Json" # needs to be done manually to match VS - dependency-name: "Microsoft.Build*" # these packages neet to be kept on old version that supports netstandard2.0 - dependency-name: "Selenium.*" # needs to be done manually because other packages need to be compiled with these new versions - + labels: - "nuget" - "dependencies" - - "area/upstream" + - "area-infrastructure" diff --git a/.github/policies/resourceManagement.yml b/.github/policies/resourceManagement.yml index 39ed64b00b3b..675d7c8ee028 100644 --- a/.github/policies/resourceManagement.yml +++ b/.github/policies/resourceManagement.yml @@ -236,7 +236,7 @@ configuration: isRegex: False then: - addLabel: - label: "area/infrastructure \U0001F3D7️" + label: "area-infrastructure" description: '[Infrastructure PRs] Add area-infrastructure label to dependency update Pull Requests' - if: - payloadType: Pull_Request @@ -286,112 +286,6 @@ configuration: This issue will be closed automatically in 7 days if we do not hear back from you by then - please feel free to re-open it if you come back to this issue after that time. description: Add comment when 's/needs-repro' is applied to issue - - if: - - payloadType: Issues - - or: - - labelAdded: - label: control-newcontrol - - labelAdded: - label: control-general - - labelAdded: - label: control-webview - - labelAdded: - label: control-datetimepicker - - labelAdded: - label: control-picker - - labelAdded: - label: control-switch - - labelAdded: - label: control-dualscreen - - labelAdded: - label: control-checkbox - - labelAdded: - label: control-border - - labelAdded: - label: control-label - - labelAdded: - label: control-button - - labelAdded: - label: control-dialogalert - - labelAdded: - label: control-entry - - labelAdded: - label: control-frame - - labelAdded: - label: control-stepper - - labelAdded: - label: control-refreshview - - labelAdded: - label: control-image - - labelAdded: - label: control-activityindicator - - labelAdded: - label: control-radiobutton - - labelAdded: - label: control-slider - - labelAdded: - label: control-progressbar - - labelAdded: - label: control-pages - - labelAdded: - label: control-map - then: - - addLabel: - label: "area/controls \U0001F3AE" - description: Add area/controls label when any 'control-X' label is applied to the issue - - if: - - payloadType: Pull_Request - - or: - - labelAdded: - label: control-newcontrol - - labelAdded: - label: control-general - - labelAdded: - label: control-webview - - labelAdded: - label: control-datetimepicker - - labelAdded: - label: control-picker - - labelAdded: - label: control-switch - - labelAdded: - label: control-dualscreen - - labelAdded: - label: control-checkbox - - labelAdded: - label: control-border - - labelAdded: - label: control-label - - labelAdded: - label: control-button - - labelAdded: - label: control-dialogalert - - labelAdded: - label: control-entry - - labelAdded: - label: control-frame - - labelAdded: - label: control-stepper - - labelAdded: - label: control-refreshview - - labelAdded: - label: control-image - - labelAdded: - label: control-activityindicator - - labelAdded: - label: control-radiobutton - - labelAdded: - label: control-slider - - labelAdded: - label: control-progressbar - - labelAdded: - label: control-pages - - labelAdded: - label: control-map - then: - - addLabel: - label: "area/controls \U0001F3AE" - description: Add area/controls label when any 'control-X' label is applied to the PR - if: - payloadType: Issues - isAction: @@ -463,13 +357,13 @@ configuration: then: - addReply: reply: >- - Thanks for the issue report @${issueAuthor}! This issue appears to be a problem with Visual Studio, so we ask that you use the VS feedback tool to report the issue. That way it will get to the routed to the team that owns this experience in VS. + Thanks for the issue report @${issueAuthor}! This issue appears to be a problem with Visual Studio (Code), so we ask that you use the VS feedback tool to report the issue. That way it will get to the routed to the team that owns this experience in VS (Code). - If you encounter a problem with Visual Studio, we want to know about it so that we can diagnose and fix it. By using the Report a Problem tool, you can collect detailed information about the problem, and send it to Microsoft with just a few button clicks. + If you encounter a problem with Visual Studio or the .NET MAUI VS Code Extension, we want to know about it so that we can diagnose and fix it. By using the Report a Problem tool, you can collect detailed information about the problem, and send it to Microsoft with just a few button clicks. - 1. Go to the [Visual Studio for Windows feedback tool](https://docs.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2022) or [Visual Studio for Mac feedback tool](https://learn.microsoft.com/en-us/visualstudio/mac/report-a-problem?view=vsmac-2022) to report the issue + 1. Go to the [Visual Studio for Windows feedback tool](https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio) or [.NET MAUI VS Code Extension repository](https://github.com/microsoft/vscode-dotnettools/issues) to report the issue 2. Close this bug, and consider adding a link to the VS Feedback issue so that others can follow its activity there. description: Ask user to use VS Feedback for VS issues @@ -481,9 +375,6 @@ configuration: - isActivitySender: user: roubachof issueAuthor: False - - isActivitySender: - user: davidbritch - issueAuthor: False then: - addLabel: label: i/great-reporter @@ -515,6 +406,114 @@ configuration: isActivitySender: user: dotnet-maestro-bot issueAuthor: False + - not: + isActivitySender: + user: Ahamed-Ali + issueAuthor: False + - not: + isActivitySender: + user: anandhan-rajagopal + issueAuthor: False + - not: + isActivitySender: + user: BagavathiPerumal + issueAuthor: False + - not: + isActivitySender: + user: deepika2509 + issueAuthor: False + - not: + isActivitySender: + user: devanathan-vaithiyanathan + issueAuthor: False + - not: + isActivitySender: + user: Dhivya-SF4094 + issueAuthor: False + - not: + isActivitySender: + user: HarishKumarSF4517 + issueAuthor: False + - not: + isActivitySender: + user: HarishwaranVijayakumar + issueAuthor: False + - not: + isActivitySender: + user: KarthikRajaKalaimani + issueAuthor: False + - not: + isActivitySender: + user: karthikraja-arumugam + issueAuthor: False + - not: + isActivitySender: + user: LogishaSelvarajSF4525 + issueAuthor: False + - not: + isActivitySender: + user: NafeelaNazhir + issueAuthor: False + - not: + isActivitySender: + user: NanthiniMahalingam + issueAuthor: False + - not: + isActivitySender: + user: NirmalKumarYuvaraj + issueAuthor: False + - not: + isActivitySender: + user: nivetha-nagalingam + issueAuthor: False + - not: + isActivitySender: + user: PaulAndersonS + issueAuthor: False + - not: + isActivitySender: + user: prakashKannanSf3972 + issueAuthor: False + - not: + isActivitySender: + user: praveenkumarkarunanithi + issueAuthor: False + - not: + isActivitySender: + user: Shalini-Ashokan + issueAuthor: False + - not: + isActivitySender: + user: sheiksyedm + issueAuthor: False + - not: + isActivitySender: + user: SubhikshaSf4851 + issueAuthor: False + - not: + isActivitySender: + user: SuthiYuvaraj + issueAuthor: False + - not: + isActivitySender: + user: SyedAbdulAzeemSF4852 + issueAuthor: False + - not: + isActivitySender: + user: Tamilarasan-Paranthaman + issueAuthor: False + - not: + isActivitySender: + user: TamilarasanSF4853 + issueAuthor: False + - not: + isActivitySender: + user: Vignesh-SF3580 + issueAuthor: False + - not: + isActivitySender: + user: vishnumenon2684 + issueAuthor: False - isAction: action: Opened then: @@ -555,16 +554,16 @@ configuration: label: "t/breaking \U0001F4A5" then: - addReply: - reply: "\U0001F6A8 API change(s) detected @davidbritch FYI" - description: Tag Dave Britch when a breaking change is tagged on an issue + reply: "\U0001F6A8 API change(s) detected @davidortinau @rachelkang FYI" + description: Tag David Ortinau and Rachel Kang when a breaking change is tagged on an issue - if: - payloadType: Pull_Request - labelAdded: label: "t/breaking \U0001F4A5" then: - addReply: - reply: "\U0001F6A8 API change(s) detected @davidbritch FYI" - description: Tag Dave Britch when a breaking change is tagged on an PR + reply: "\U0001F6A8 API change(s) detected @davidortinau @rachelkang FYI" + description: Tag David Ortinau and Rachel Kang when a breaking change is tagged on an PR - if: - payloadType: Issue_Comment - isIssue @@ -581,13 +580,143 @@ configuration: description: Remove 's/try-latest-version' when new reply from author comes in - if: - payloadType: Issues - - activitySenderHasPermission: - permission: Write - isAction: action: Opened + - or: + - isActivitySender: + user: PureWeen + issueAuthor: False + - isActivitySender: + user: mattleibow + issueAuthor: False + - isActivitySender: + user: rmarinho + issueAuthor: False + - isActivitySender: + user: jsuarezruiz + issueAuthor: False + - isActivitySender: + user: Redth + issueAuthor: False + - isActivitySender: + user: StephaneDelcroix + issueAuthor: False + - isActivitySender: + user: samhouts + issueAuthor: False + - isActivitySender: + user: jamesmontemagno + issueAuthor: False + - isActivitySender: + user: jonathanpeppers + issueAuthor: False + - isActivitySender: + user: rachelkang + issueAuthor: False + - isActivitySender: + user: Eilon + issueAuthor: False + - isActivitySender: + user: jfversluis + issueAuthor: False + - isActivitySender: + user: tj-devel709 + issueAuthor: False then: - addLabel: label: s/triaged - description: Add 's/triaged' label to issues opened by the core team, we assume these issues do not need triaging + description: Add 's/triaged' label to issues opened by the (core) team, we assume these issues do not need triaging + - if: + - or: + - payloadType: Issues + - payloadType: Pull_Request + - isAction: + action: Opened + - or: + - isActivitySender: + user: Ahamed-Ali + issueAuthor: False + - isActivitySender: + user: anandhan-rajagopal + issueAuthor: False + - isActivitySender: + user: BagavathiPerumal + issueAuthor: False + - isActivitySender: + user: deepika2509 + issueAuthor: False + - isActivitySender: + user: devanathan-vaithiyanathan + issueAuthor: False + - isActivitySender: + user: Dhivya-SF4094 + issueAuthor: False + - isActivitySender: + user: HarishKumarSF4517 + issueAuthor: False + - isActivitySender: + user: HarishwaranVijayakumar + issueAuthor: False + - isActivitySender: + user: KarthikRajaKalaimani + issueAuthor: False + - isActivitySender: + user: karthikraja-arumugam + issueAuthor: False + - isActivitySender: + user: LogishaSelvarajSF4525 + issueAuthor: False + - isActivitySender: + user: NafeelaNazhir + issueAuthor: False + - isActivitySender: + user: NanthiniMahalingam + issueAuthor: False + - isActivitySender: + user: NirmalKumarYuvaraj + issueAuthor: False + - isActivitySender: + user: nivetha-nagalingam + issueAuthor: False + - isActivitySender: + user: PaulAndersonS + issueAuthor: False + - isActivitySender: + user: prakashKannanSf3972 + issueAuthor: False + - isActivitySender: + user: praveenkumarkarunanithi + issueAuthor: False + - isActivitySender: + user: Shalini-Ashokan + issueAuthor: False + - isActivitySender: + user: sheiksyedm + issueAuthor: False + - isActivitySender: + user: SubhikshaSf4851 + issueAuthor: False + - isActivitySender: + user: SuthiYuvaraj + issueAuthor: False + - isActivitySender: + user: SyedAbdulAzeemSF4852 + issueAuthor: False + - isActivitySender: + user: Tamilarasan-Paranthaman + issueAuthor: False + - isActivitySender: + user: TamilarasanSF4853 + issueAuthor: False + - isActivitySender: + user: Vignesh-SF3580 + issueAuthor: False + - isActivitySender: + user: vishnumenon2684 + issueAuthor: False + then: + - addLabel: + label: partner/syncfusion + description: Add 'partner/syncfusion' label to issues opened by the Syncfusion partner team onFailure: onSuccess: diff --git a/.github/prompts/contributors.json b/.github/prompts/contributors.json new file mode 100644 index 000000000000..39c75906ee2a --- /dev/null +++ b/.github/prompts/contributors.json @@ -0,0 +1,3926 @@ +[ + { + "login": "rmarinho", + "id": 1235097, + "type": "User", + "contributions": 2079 + }, + { + "login": "PureWeen", + "id": 5375137, + "type": "User", + "contributions": 1710 + }, + { + "login": "mattleibow", + "id": 1096616, + "type": "User", + "contributions": 1679 + }, + { + "login": "jsuarezruiz", + "id": 6755973, + "type": "User", + "contributions": 1035 + }, + { + "login": "hartez", + "id": 538025, + "type": "User", + "contributions": 958 + }, + { + "login": "dotnet-maestro[bot]", + "id": 42748379, + "type": "Bot", + "contributions": 895 + }, + { + "login": "StephaneDelcroix", + "id": 313003, + "type": "User", + "contributions": 856 + }, + { + "login": "Redth", + "id": 271950, + "type": "User", + "contributions": 781 + }, + { + "login": "github-actions[bot]", + "id": 41898282, + "type": "Bot", + "contributions": 443 + }, + { + "login": "jfversluis", + "id": 939291, + "type": "User", + "contributions": 430 + }, + { + "login": "samhouts", + "id": 7827070, + "type": "User", + "contributions": 415 + }, + { + "login": "jamesmontemagno", + "id": 1676321, + "type": "User", + "contributions": 370 + }, + { + "login": "dependabot[bot]", + "id": 49699333, + "type": "Bot", + "contributions": 337 + }, + { + "login": "jonathanpeppers", + "id": 840039, + "type": "User", + "contributions": 327 + }, + { + "login": "jonlipsky", + "id": 1466386, + "type": "User", + "contributions": 169 + }, + { + "login": "kingces95", + "id": 4120386, + "type": "User", + "contributions": 145 + }, + { + "login": "Eilon", + "id": 202643, + "type": "User", + "contributions": 134 + }, + { + "login": "kubaflo", + "id": 42434498, + "type": "User", + "contributions": 117 + }, + { + "name": "Pavel Yakovlev", + "email": "v-payako@microsoft.com", + "type": "Anonymous", + "contributions": 109 + }, + { + "login": "adrianknight89", + "id": 16855542, + "type": "User", + "contributions": 107 + }, + { + "login": "rookiejava", + "id": 1029134, + "type": "User", + "contributions": 105 + }, + { + "login": "pauldipietro", + "id": 1251024, + "type": "User", + "contributions": 94 + }, + { + "login": "rachelkang", + "id": 21988533, + "type": "User", + "contributions": 92 + }, + { + "login": "anandhan-rajagopal", + "id": 97146406, + "type": "User", + "contributions": 86 + }, + { + "login": "Clancey", + "id": 256046, + "type": "User", + "contributions": 79 + }, + { + "name": "Jason Smith", + "email": "jason.smith@xamarin.com", + "type": "Anonymous", + "contributions": 76 + }, + { + "login": "simonrozsival", + "id": 374616, + "type": "User", + "contributions": 69 + }, + { + "login": "Foda", + "id": 890772, + "type": "User", + "contributions": 66 + }, + { + "login": "pjcollins", + "id": 2000163, + "type": "User", + "contributions": 64 + }, + { + "login": "AndreiMisiukevich", + "id": 10124814, + "type": "User", + "contributions": 61 + }, + { + "login": "myroot", + "id": 1029155, + "type": "User", + "contributions": 60 + }, + { + "login": "tj-devel709", + "id": 50846373, + "type": "User", + "contributions": 60 + }, + { + "login": "MartyIX", + "id": 203266, + "type": "User", + "contributions": 57 + }, + { + "login": "davidortinau", + "id": 41873, + "type": "User", + "contributions": 55 + }, + { + "login": "mandel-macaque", + "id": 2190086, + "type": "User", + "contributions": 55 + }, + { + "login": "pictos", + "id": 20712372, + "type": "User", + "contributions": 51 + }, + { + "login": "drasticactions", + "id": 898335, + "type": "User", + "contributions": 47 + }, + { + "login": "dimonovdd", + "id": 59065470, + "type": "User", + "contributions": 47 + }, + { + "login": "eerhardt", + "id": 8291187, + "type": "User", + "contributions": 42 + }, + { + "login": "albyrock87", + "id": 1423005, + "type": "User", + "contributions": 40 + }, + { + "name": "Mike Corsaro", + "email": "mikecorsaro@microsoft.com", + "type": "Anonymous", + "contributions": 39 + }, + { + "login": "swharden", + "id": 4165489, + "type": "User", + "contributions": 37 + }, + { + "login": "MichaelNorman", + "id": 1462796, + "type": "User", + "contributions": 37 + }, + { + "login": "Tamilarasan-Paranthaman", + "id": 93904422, + "type": "User", + "contributions": 34 + }, + { + "login": "TanayParikh", + "id": 14852843, + "type": "User", + "contributions": 34 + }, + { + "login": "jknaudt21", + "id": 32918747, + "type": "User", + "contributions": 33 + }, + { + "login": "moljac", + "id": 1768576, + "type": "User", + "contributions": 33 + }, + { + "login": "jstedfast", + "id": 338984, + "type": "User", + "contributions": 32 + }, + { + "login": "andreinitescu", + "id": 743918, + "type": "User", + "contributions": 32 + }, + { + "name": "Schilli, Niklas", + "email": "schilli@ams-berlin.de", + "type": "Anonymous", + "contributions": 31 + }, + { + "login": "vividos", + "id": 429902, + "type": "User", + "contributions": 31 + }, + { + "login": "jimmgarrido", + "id": 4087358, + "type": "User", + "contributions": 29 + }, + { + "login": "sbanni", + "id": 1885888, + "type": "User", + "contributions": 28 + }, + { + "login": "shyunMin", + "id": 20968023, + "type": "User", + "contributions": 28 + }, + { + "login": "ravinderjangra", + "id": 9795917, + "type": "User", + "contributions": 28 + }, + { + "name": "Jason Smith", + "email": "jas@microsoft.com", + "type": "Anonymous", + "contributions": 27 + }, + { + "login": "antonfirsov", + "id": 6835152, + "type": "User", + "contributions": 27 + }, + { + "name": "Jonathan Dick", + "email": "jond@hey.com", + "type": "Anonymous", + "contributions": 25 + }, + { + "login": "kvpt", + "id": 1446221, + "type": "User", + "contributions": 25 + }, + { + "login": "mohachouch", + "id": 25939826, + "type": "User", + "contributions": 25 + }, + { + "login": "akihikodaki", + "id": 17036990, + "type": "User", + "contributions": 24 + }, + { + "login": "dustin-wojciechowski", + "id": 89540402, + "type": "User", + "contributions": 24 + }, + { + "login": "NirmalKumarYuvaraj", + "id": 97871636, + "type": "User", + "contributions": 22 + }, + { + "login": "JoonghyunCho", + "id": 14328614, + "type": "User", + "contributions": 22 + }, + { + "login": "jcmanke", + "id": 6132629, + "type": "User", + "contributions": 20 + }, + { + "login": "yurkinh", + "id": 17849938, + "type": "User", + "contributions": 20 + }, + { + "login": "bmacombe", + "id": 15127788, + "type": "User", + "contributions": 20 + }, + { + "login": "BradChase2011", + "id": 13279060, + "type": "User", + "contributions": 20 + }, + { + "login": "devanathan-vaithiyanathan", + "id": 114395405, + "type": "User", + "contributions": 19 + }, + { + "login": "HarishKumarSF4517", + "id": 171316288, + "type": "User", + "contributions": 19 + }, + { + "name": "Luke Westendorf", + "email": "lukewest@microsoft.com", + "type": "Anonymous", + "contributions": 18 + }, + { + "login": "Vignesh-SF3580", + "id": 102575140, + "type": "User", + "contributions": 18 + }, + { + "login": "BretJohnson", + "id": 245892, + "type": "User", + "contributions": 18 + }, + { + "login": "janusw", + "id": 484108, + "type": "User", + "contributions": 17 + }, + { + "login": "lutzroeder", + "id": 438516, + "type": "User", + "contributions": 17 + }, + { + "login": "spadapet", + "id": 2523431, + "type": "User", + "contributions": 17 + }, + { + "login": "newky2k", + "id": 6675766, + "type": "User", + "contributions": 16 + }, + { + "login": "melimion", + "id": 33512073, + "type": "User", + "contributions": 16 + }, + { + "login": "cshung", + "id": 3410332, + "type": "User", + "contributions": 15 + }, + { + "login": "sung-su", + "id": 10704816, + "type": "User", + "contributions": 15 + }, + { + "login": "javiercn", + "id": 6995051, + "type": "User", + "contributions": 14 + }, + { + "login": "MackinnonBuck", + "id": 10456961, + "type": "User", + "contributions": 14 + }, + { + "name": "Niklas Schilli", + "email": "schillinik@yahoo.de", + "type": "Anonymous", + "contributions": 14 + }, + { + "login": "dotMorten", + "id": 1378165, + "type": "User", + "contributions": 14 + }, + { + "login": "symbiogenesis", + "id": 1724472, + "type": "User", + "contributions": 13 + }, + { + "name": "GitHub Actions Autoformatter", + "email": "autoformat@example.com", + "type": "Anonymous", + "contributions": 13 + }, + { + "login": "jkurdek", + "id": 59935235, + "type": "User", + "contributions": 13 + }, + { + "login": "LogishaSelvarajSF4525", + "id": 171314950, + "type": "User", + "contributions": 13 + }, + { + "login": "MarkoBL", + "id": 273464, + "type": "User", + "contributions": 13 + }, + { + "login": "SuthiYuvaraj", + "id": 92777079, + "type": "User", + "contributions": 12 + }, + { + "login": "lytico", + "id": 1479980, + "type": "User", + "contributions": 12 + }, + { + "login": "emaf", + "id": 3286258, + "type": "User", + "contributions": 12 + }, + { + "login": "nivetha-nagalingam", + "id": 170066931, + "type": "User", + "contributions": 11 + }, + { + "login": "dellis1972", + "id": 810617, + "type": "User", + "contributions": 11 + }, + { + "login": "BagavathiPerumal", + "id": 93652794, + "type": "User", + "contributions": 11 + }, + { + "login": "VladislavAntonyuk", + "id": 33021114, + "type": "User", + "contributions": 10 + }, + { + "login": "ivanpovazan", + "id": 55002338, + "type": "User", + "contributions": 10 + }, + { + "login": "alanmcgovern", + "id": 264396, + "type": "User", + "contributions": 10 + }, + { + "login": "vpenades", + "id": 5433822, + "type": "User", + "contributions": 10 + }, + { + "login": "Depechie", + "id": 351693, + "type": "User", + "contributions": 10 + }, + { + "login": "csigs", + "id": 13859395, + "type": "User", + "contributions": 10 + }, + { + "name": "Damian Karzon", + "email": "dkarzon@skedulo.com", + "type": "Anonymous", + "contributions": 10 + }, + { + "login": "kzu", + "id": 169707, + "type": "User", + "contributions": 10 + }, + { + "login": "krdmllr", + "id": 11095003, + "type": "User", + "contributions": 10 + }, + { + "login": "SteveSandersonMS", + "id": 1101362, + "type": "User", + "contributions": 10 + }, + { + "login": "mikescandy", + "id": 2494505, + "type": "User", + "contributions": 9 + }, + { + "login": "alanag13", + "id": 5409649, + "type": "User", + "contributions": 9 + }, + { + "login": "Ahamed-Ali", + "id": 102580874, + "type": "User", + "contributions": 9 + }, + { + "login": "japarson", + "id": 59936622, + "type": "User", + "contributions": 9 + }, + { + "login": "activa", + "id": 650710, + "type": "User", + "contributions": 9 + }, + { + "login": "buyaa-n", + "id": 45579687, + "type": "User", + "contributions": 8 + }, + { + "login": "dalexsoto", + "id": 204671, + "type": "User", + "contributions": 8 + }, + { + "login": "ylatuya", + "id": 111134, + "type": "User", + "contributions": 8 + }, + { + "login": "NanthiniMahalingam", + "id": 105482474, + "type": "User", + "contributions": 8 + }, + { + "name": "Mrnikbobjeff", + "email": "schillinik@yahoo.de", + "type": "Anonymous", + "contributions": 8 + }, + { + "login": "mjbond-msft", + "id": 35508883, + "type": "User", + "contributions": 8 + }, + { + "login": "techduggu", + "id": 17450941, + "type": "User", + "contributions": 7 + }, + { + "login": "etvorun", + "id": 48451158, + "type": "User", + "contributions": 7 + }, + { + "login": "felipebaltazar", + "id": 19656249, + "type": "User", + "contributions": 7 + }, + { + "login": "henricm", + "id": 3715975, + "type": "User", + "contributions": 7 + }, + { + "login": "VitalyKnyazev", + "id": 12721191, + "type": "User", + "contributions": 7 + }, + { + "login": "almirvuk", + "id": 15986629, + "type": "User", + "contributions": 7 + }, + { + "login": "brunck", + "id": 4502210, + "type": "User", + "contributions": 7 + }, + { + "login": "conceptdev", + "id": 199373, + "type": "User", + "contributions": 7 + }, + { + "login": "yourina", + "id": 20967778, + "type": "User", + "contributions": 6 + }, + { + "login": "kicsiede", + "id": 4233752, + "type": "User", + "contributions": 6 + }, + { + "login": "dotnet-bot", + "id": 9011267, + "type": "User", + "contributions": 6 + }, + { + "login": "bentmar", + "id": 10244000, + "type": "User", + "contributions": 6 + }, + { + "login": "knocte", + "id": 331303, + "type": "User", + "contributions": 6 + }, + { + "login": "dansiegel", + "id": 3860573, + "type": "User", + "contributions": 6 + }, + { + "login": "ionixjunior", + "id": 519642, + "type": "User", + "contributions": 6 + }, + { + "login": "WayaFlyfeather", + "id": 3807144, + "type": "User", + "contributions": 6 + }, + { + "login": "GalaxiaGuy", + "id": 475450, + "type": "User", + "contributions": 6 + }, + { + "login": "sps014", + "id": 45932883, + "type": "User", + "contributions": 6 + }, + { + "login": "TimBarham", + "id": 9665847, + "type": "User", + "contributions": 6 + }, + { + "login": "Viridovics", + "id": 6348792, + "type": "User", + "contributions": 6 + }, + { + "login": "mkieres", + "id": 8372764, + "type": "User", + "contributions": 5 + }, + { + "login": "eltociear", + "id": 22633385, + "type": "User", + "contributions": 5 + }, + { + "login": "bill2004158", + "id": 211855, + "type": "User", + "contributions": 5 + }, + { + "login": "bruzkovsky", + "id": 10390959, + "type": "User", + "contributions": 5 + }, + { + "login": "molesmoke", + "id": 3227864, + "type": "User", + "contributions": 5 + }, + { + "login": "lindexi", + "id": 16054566, + "type": "User", + "contributions": 5 + }, + { + "login": "VSadov", + "id": 8218165, + "type": "User", + "contributions": 5 + }, + { + "login": "vs-mobiletools-engineering-service2", + "id": 67918504, + "type": "User", + "contributions": 5 + }, + { + "login": "peterfoot", + "id": 3985053, + "type": "User", + "contributions": 5 + }, + { + "login": "dhindrik", + "id": 6691971, + "type": "User", + "contributions": 5 + }, + { + "login": "TheCodeTraveler", + "id": 13558917, + "type": "User", + "contributions": 5 + }, + { + "login": "Dhivya-SF4094", + "id": 127717131, + "type": "User", + "contributions": 5 + }, + { + "login": "edsnider", + "id": 557602, + "type": "User", + "contributions": 5 + }, + { + "login": "f1nzer", + "id": 1970236, + "type": "User", + "contributions": 5 + }, + { + "login": "MSLukeWest", + "id": 42553283, + "type": "User", + "contributions": 5 + }, + { + "login": "mgoertz-msft", + "id": 14282894, + "type": "User", + "contributions": 5 + }, + { + "login": "mrlacey", + "id": 189547, + "type": "User", + "contributions": 5 + }, + { + "name": "Matthew Richardson", + "email": "matthew@velocitysystems.co.nz", + "type": "Anonymous", + "contributions": 5 + }, + { + "login": "mhutch", + "id": 183285, + "type": "User", + "contributions": 5 + }, + { + "login": "NafeelaNazhir", + "id": 171174978, + "type": "User", + "contributions": 5 + }, + { + "login": "bhavanesh2001", + "id": 184209926, + "type": "User", + "contributions": 4 + }, + { + "login": "slang25", + "id": 1341446, + "type": "User", + "contributions": 4 + }, + { + "login": "Cheesebaron", + "id": 249719, + "type": "User", + "contributions": 4 + }, + { + "login": "WonyoungChoi", + "id": 1029205, + "type": "User", + "contributions": 4 + }, + { + "login": "KSemenenko", + "id": 4385716, + "type": "User", + "contributions": 4 + }, + { + "login": "memu8", + "id": 66331238, + "type": "User", + "contributions": 4 + }, + { + "login": "prakashKannanSf3972", + "id": 127308739, + "type": "User", + "contributions": 4 + }, + { + "login": "vishnumenon2684", + "id": 95695113, + "type": "User", + "contributions": 4 + }, + { + "login": "jonpryor", + "id": 155958, + "type": "User", + "contributions": 4 + }, + { + "login": "IlGalvo", + "id": 17992288, + "type": "User", + "contributions": 4 + }, + { + "login": "CliffAgius", + "id": 5613809, + "type": "User", + "contributions": 4 + }, + { + "login": "mfkl", + "id": 3928834, + "type": "User", + "contributions": 4 + }, + { + "login": "vhugogarcia", + "id": 1047398, + "type": "User", + "contributions": 4 + }, + { + "login": "bares43", + "id": 956930, + "type": "User", + "contributions": 4 + }, + { + "login": "flish", + "id": 3818800, + "type": "User", + "contributions": 4 + }, + { + "login": "BrayanKhosravian", + "id": 35541212, + "type": "User", + "contributions": 4 + }, + { + "login": "daltzctr", + "id": 105223895, + "type": "User", + "contributions": 4 + }, + { + "login": "ederbond", + "id": 12549812, + "type": "User", + "contributions": 4 + }, + { + "login": "adamped", + "id": 13672662, + "type": "User", + "contributions": 4 + }, + { + "login": "filipnavara", + "id": 1764393, + "type": "User", + "contributions": 4 + }, + { + "login": "praeclarum", + "id": 323548, + "type": "User", + "contributions": 4 + }, + { + "login": "J-Swift", + "id": 734158, + "type": "User", + "contributions": 4 + }, + { + "login": "jvansickle", + "id": 7631608, + "type": "User", + "contributions": 4 + }, + { + "login": "MartinZikmund", + "id": 1075116, + "type": "User", + "contributions": 4 + }, + { + "login": "BioTurboNick", + "id": 1438610, + "type": "User", + "contributions": 4 + }, + { + "login": "legistek", + "id": 13384523, + "type": "User", + "contributions": 4 + }, + { + "login": "pranavkm", + "id": 174281, + "type": "User", + "contributions": 4 + }, + { + "login": "rolfbjarne", + "id": 249268, + "type": "User", + "contributions": 4 + }, + { + "login": "scastria", + "id": 4534494, + "type": "User", + "contributions": 4 + }, + { + "name": "Paul DiPietro", + "email": "paul.dipietro@microsoft.com", + "type": "Anonymous", + "contributions": 3 + }, + { + "login": "rogihee", + "id": 4984486, + "type": "User", + "contributions": 3 + }, + { + "login": "stmoor", + "id": 77985069, + "type": "User", + "contributions": 3 + }, + { + "login": "sthewissen", + "id": 2419439, + "type": "User", + "contributions": 3 + }, + { + "login": "SubhikshaSf4851", + "id": 184361895, + "type": "User", + "contributions": 3 + }, + { + "login": "TamilarasanSF4853", + "id": 184361845, + "type": "User", + "contributions": 3 + }, + { + "login": "YZahringer", + "id": 4254116, + "type": "User", + "contributions": 3 + }, + { + "login": "Youssef1313", + "id": 31348972, + "type": "User", + "contributions": 3 + }, + { + "login": "jzeferino", + "id": 10722952, + "type": "User", + "contributions": 3 + }, + { + "login": "puppetSpace", + "id": 14003064, + "type": "User", + "contributions": 3 + }, + { + "login": "solomonfried", + "id": 36649129, + "type": "User", + "contributions": 3 + }, + { + "login": "tessarolli", + "id": 11618432, + "type": "User", + "contributions": 3 + }, + { + "login": "magoolation", + "id": 626364, + "type": "User", + "contributions": 3 + }, + { + "login": "beeradmoore", + "id": 904737, + "type": "User", + "contributions": 3 + }, + { + "login": "jgold6", + "id": 4606509, + "type": "User", + "contributions": 3 + }, + { + "login": "akoeplinger", + "id": 1376924, + "type": "User", + "contributions": 3 + }, + { + "login": "patridge", + "id": 713665, + "type": "User", + "contributions": 3 + }, + { + "login": "aaronfranke", + "id": 1646875, + "type": "User", + "contributions": 3 + }, + { + "login": "artemious7", + "id": 16724889, + "type": "User", + "contributions": 3 + }, + { + "login": "artemvalieiev", + "id": 3391032, + "type": "User", + "contributions": 3 + }, + { + "login": "Axemasta", + "id": 33064621, + "type": "User", + "contributions": 3 + }, + { + "login": "BjornVanslembrouck", + "id": 44607491, + "type": "User", + "contributions": 3 + }, + { + "login": "daniel-luberda", + "id": 13569983, + "type": "User", + "contributions": 3 + }, + { + "login": "DianaSoltani", + "id": 31975705, + "type": "User", + "contributions": 3 + }, + { + "login": "ooikengsiang", + "id": 19687809, + "type": "User", + "contributions": 3 + }, + { + "login": "mikeparker104", + "id": 12763221, + "type": "User", + "contributions": 3 + }, + { + "login": "MichaelRumpler", + "id": 8309363, + "type": "User", + "contributions": 3 + }, + { + "login": "mkhamoyan", + "id": 96171496, + "type": "User", + "contributions": 3 + }, + { + "login": "Lehonti", + "id": 17771375, + "type": "User", + "contributions": 3 + }, + { + "login": "jeffhandley", + "id": 1031940, + "type": "User", + "contributions": 3 + }, + { + "login": "SotoiGhost", + "id": 5924210, + "type": "User", + "contributions": 3 + }, + { + "login": "GiampaoloGabba", + "id": 8319337, + "type": "User", + "contributions": 3 + }, + { + "login": "felipemomm", + "id": 6777353, + "type": "User", + "contributions": 3 + }, + { + "login": "espenrl", + "id": 4621581, + "type": "User", + "contributions": 3 + }, + { + "login": "jpobst", + "id": 179295, + "type": "User", + "contributions": 2 + }, + { + "login": "RodgerLeblanc", + "id": 6235690, + "type": "User", + "contributions": 2 + }, + { + "login": "SpiegelSoft", + "id": 557824, + "type": "User", + "contributions": 2 + }, + { + "login": "rick-palmsens", + "id": 57390463, + "type": "User", + "contributions": 2 + }, + { + "login": "nogginbox", + "id": 729381, + "type": "User", + "contributions": 2 + }, + { + "login": "JTOne123", + "id": 3457140, + "type": "User", + "contributions": 2 + }, + { + "login": "PaulAndersonS", + "id": 42271912, + "type": "User", + "contributions": 2 + }, + { + "login": "ntherning", + "id": 135765, + "type": "User", + "contributions": 2 + }, + { + "login": "pingzing", + "id": 5133649, + "type": "User", + "contributions": 2 + }, + { + "login": "manutdkid77", + "id": 14297705, + "type": "User", + "contributions": 2 + }, + { + "login": "nwestfall", + "id": 4753021, + "type": "User", + "contributions": 2 + }, + { + "login": "Moha69100", + "id": 6330427, + "type": "User", + "contributions": 2 + }, + { + "login": "mjmostachetti", + "id": 6486831, + "type": "User", + "contributions": 2 + }, + { + "login": "migueldeicaza", + "id": 36863, + "type": "User", + "contributions": 2 + }, + { + "login": "mauroa", + "id": 2921919, + "type": "User", + "contributions": 2 + }, + { + "login": "mattjohnsonpint", + "id": 1396388, + "type": "User", + "contributions": 2 + }, + { + "login": "martincostello", + "id": 1439341, + "type": "User", + "contributions": 2 + }, + { + "login": "marcmognol", + "id": 8171300, + "type": "User", + "contributions": 2 + }, + { + "login": "domagojmedo", + "id": 12157224, + "type": "User", + "contributions": 2 + }, + { + "login": "DavidRoqueni", + "id": 45717673, + "type": "User", + "contributions": 2 + }, + { + "login": "Dresel", + "id": 1769090, + "type": "User", + "contributions": 2 + }, + { + "login": "Adam--", + "id": 2179171, + "type": "User", + "contributions": 2 + }, + { + "login": "workgroupengineering", + "id": 12531229, + "type": "User", + "contributions": 2 + }, + { + "login": "ruby-verma", + "id": 20953456, + "type": "User", + "contributions": 2 + }, + { + "login": "praveenkumarkarunanithi", + "id": 100338903, + "type": "User", + "contributions": 2 + }, + { + "login": "neolithos", + "id": 9724420, + "type": "User", + "contributions": 2 + }, + { + "login": "maonaoda", + "id": 32831595, + "type": "User", + "contributions": 2 + }, + { + "login": "flyofsky", + "id": 16184582, + "type": "User", + "contributions": 2 + }, + { + "login": "dotnet-policy-service[bot]", + "id": 123482357, + "type": "Bot", + "contributions": 2 + }, + { + "name": "dend", + "email": "dend@outlook.com", + "type": "Anonymous", + "contributions": 2 + }, + { + "login": "campersau", + "id": 4009570, + "type": "User", + "contributions": 2 + }, + { + "login": "WeihanLi", + "id": 7604648, + "type": "User", + "contributions": 2 + }, + { + "login": "vitek-karas", + "id": 10670590, + "type": "User", + "contributions": 2 + }, + { + "login": "surayya-MS", + "id": 114938397, + "type": "User", + "contributions": 2 + }, + { + "login": "stephen-hawley", + "id": 15199050, + "type": "User", + "contributions": 2 + }, + { + "login": "sanyandreichuk", + "id": 8818052, + "type": "User", + "contributions": 2 + }, + { + "login": "Rustamxon", + "id": 123984585, + "type": "User", + "contributions": 2 + }, + { + "login": "maxkoshevoi", + "id": 6609929, + "type": "User", + "contributions": 2 + }, + { + "login": "dmariogatto", + "id": 8588913, + "type": "User", + "contributions": 2 + }, + { + "login": "breenbob", + "id": 6000851, + "type": "User", + "contributions": 2 + }, + { + "login": "cadsit", + "id": 9328605, + "type": "User", + "contributions": 2 + }, + { + "login": "cschwarz", + "id": 717934, + "type": "User", + "contributions": 2 + }, + { + "login": "csteeg", + "id": 431177, + "type": "User", + "contributions": 2 + }, + { + "login": "chabiss", + "id": 14151258, + "type": "User", + "contributions": 2 + }, + { + "login": "bricelam", + "id": 1226749, + "type": "User", + "contributions": 2 + }, + { + "login": "Bobface", + "id": 10945014, + "type": "User", + "contributions": 2 + }, + { + "login": "BitooBit", + "id": 59031286, + "type": "User", + "contributions": 2 + }, + { + "login": "BurningLights", + "id": 14267553, + "type": "User", + "contributions": 2 + }, + { + "login": "mkArtakMSFT", + "id": 34246760, + "type": "User", + "contributions": 2 + }, + { + "login": "andres-fg", + "id": 16245738, + "type": "User", + "contributions": 2 + }, + { + "login": "SkyeHoefling", + "id": 17751436, + "type": "User", + "contributions": 2 + }, + { + "login": "AArnott", + "id": 3548, + "type": "User", + "contributions": 2 + }, + { + "login": "andreas-nesheim", + "id": 11583629, + "type": "User", + "contributions": 2 + }, + { + "login": "aheubusch", + "id": 11393955, + "type": "User", + "contributions": 2 + }, + { + "login": "appsourcers", + "id": 36886162, + "type": "User", + "contributions": 2 + }, + { + "login": "agaluzzi", + "id": 5098044, + "type": "User", + "contributions": 2 + }, + { + "login": "akamud", + "id": 954102, + "type": "User", + "contributions": 2 + }, + { + "login": "HavenDV", + "id": 3002068, + "type": "User", + "contributions": 2 + }, + { + "login": "KarthikRajaKalaimani", + "id": 92777139, + "type": "User", + "contributions": 2 + }, + { + "login": "jorisvergeer", + "id": 1906639, + "type": "User", + "contributions": 2 + }, + { + "login": "Suplanus", + "id": 2002916, + "type": "User", + "contributions": 2 + }, + { + "login": "lateralusX", + "id": 11529140, + "type": "User", + "contributions": 2 + }, + { + "login": "joelmartinez", + "id": 90380, + "type": "User", + "contributions": 2 + }, + { + "login": "jsmarcus", + "id": 1919776, + "type": "User", + "contributions": 2 + }, + { + "name": "Dave Humphreys", + "email": "dave@thing.com", + "type": "Anonymous", + "contributions": 2 + }, + { + "login": "dend", + "id": 1389609, + "type": "User", + "contributions": 2 + }, + { + "login": "breyed", + "id": 1299073, + "type": "User", + "contributions": 2 + }, + { + "login": "thudugala", + "id": 4112014, + "type": "User", + "contributions": 2 + }, + { + "login": "EmilAlipiev", + "id": 10422347, + "type": "User", + "contributions": 2 + }, + { + "name": "Israel Soto", + "email": "issoto@microsoft.com", + "type": "Anonymous", + "contributions": 2 + }, + { + "login": "terrajobst", + "id": 5169960, + "type": "User", + "contributions": 2 + }, + { + "login": "ethanis", + "id": 8703324, + "type": "User", + "contributions": 2 + }, + { + "login": "fredeil", + "id": 17533404, + "type": "User", + "contributions": 2 + }, + { + "login": "ghuntley", + "id": 127353, + "type": "User", + "contributions": 2 + }, + { + "name": "Stefan de Vogelaere", + "email": "stefan@cavebirdlabs.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Stefan Gerasch", + "email": "stefangerasch1991@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Stanislav", + "email": "stasbav@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sreeraj P R", + "email": "sreerajpr.mec@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Soundman32", + "email": "neil.scales@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Soichi Ikebe", + "email": "souichi1997@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Softlion (Benjamin Mayrargue)", + "email": "benjamin@vapolia.fr", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Softlion (Benjamin Mayrargue)", + "email": "benjamin@mayrargue.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Smit Patel", + "email": "smitpatel@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sivamuthu Kumar", + "email": "sivamuthukumar07@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sivakumar", + "email": "sivakumarr@syncfusion.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Simon Cropp", + "email": "simon.cropp@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Shalini-Ashokan", + "email": "102292178+shalini-ashokan@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sergio Escalada", + "email": "sescalada@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sergej Derjabkin", + "email": "sergej@sendev.de", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sebastian Rauer", + "email": "info@sebastianrauer.de", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sean Killeen", + "email": "seankilleen@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sean Davies", + "email": "spdavies2@live.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sandro Cavazzoni", + "email": "sandro@ideaful.it", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Samir GC", + "email": "55045516+samirgcofficial@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Todd", + "email": "thenderson21@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "TingtingAn", + "email": "antingting2009@qq.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Timothé Larivière", + "email": "timothe.lariviere@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tim Johnson", + "email": "t-johnson@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tianqi Zhang", + "email": "tianqizhang@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Thomas Muller", + "email": "imuller@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Thomas Mijieux", + "email": "tmijieux@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Thetyne", + "email": "thetyne@live.fr", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Theodore Tsirpanis", + "email": "teo-tsirpanis@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Takym (たかやま)", + "email": "15681312+takym@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Takaaki Suzuki", + "email": "xin9le@live.jp", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sławomir Kulików", + "email": "slawomir.kulikow@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sławomir Kulików", + "email": "kulikow@logotec.pl", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sören Nils Kuklau", + "email": "chucker@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Symbai", + "email": "14368203+symbai@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sylvain Gravel", + "email": "lrp-sgravel@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "SyedAbdulAzeemSF4852", + "email": "syedabdulazeem.a@syncfusion.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sven Boemer", + "email": "sbomer@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Surayya Huseyn Zada", + "email": "shuseynzada@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sunner", + "email": "sunnerlp@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "StevenGranados", + "email": "51818199+stevengranados@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Steve", + "email": "steverichey@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Stephen Halter", + "email": "halter73@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Sam", + "email": "28056243+faheys@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Peter Spada", + "email": "spadapet@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "PawKanarek", + "email": "paw.kanarek@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "PavloLukianets", + "email": "109070173+pavlolukianets@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Pavel Yakovlev (Akvelon)", + "email": "v-payako@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Patrick Long", + "email": "pat@munkiisoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Patrick Hartman", + "email": "patrick@leglock.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Patrick Allwood", + "email": "patchandthat@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Parker Bibus", + "email": "pbibus@hotmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Parker Bibus", + "email": "parkerbibus@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "P3PPP", + "email": "ticktackmob@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Oren Novotny", + "email": "oren@novotny.org", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ooi Keng Siang", + "email": "ks@ooiks.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Omniq-APL-Rollving", + "email": "61408543+omniq-apl-rollving@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Oleksandr Dobrynin", + "email": "shuron1988@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Oleh Kaliuzhnyi", + "email": "oleg.kaliuzhny@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Oddbjørn Bakke", + "email": "oddbjorn.bakke@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Oberdan Bitencourt Ferreira", + "email": "oberdan.bitencourt@arctouch.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Noam Yogev", + "email": "noamyogev84@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Niklas Therning", + "email": "nitherni@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Niklas Schilli", + "email": "niklasschilli@mailbox.org", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Niklas Schilli", + "email": "n.schilli@inno-focus.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Niels van der Knaap", + "email": "niels@nielsknaap.nl", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "CartBlanche", + "id": 271363, + "type": "User", + "contributions": 1 + }, + { + "name": "Salar K", + "email": "1272095+salarcode@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Safia Abdalla", + "email": "safia@safia.rocks", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ryo Tsunoda", + "email": "try0.development@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ryan Robidou", + "email": "robidou@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ryan Davis", + "email": "ryandavis.au@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ryan Buckley", + "email": "9486206+rabuckley@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Rui Marinho", + "email": "ruimarinho@msft-m3-pro.ihome", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Roy", + "email": "royvou@hotmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ronny Gunawan", + "email": "3048897+ronnygunawan@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Ronan", + "email": "burkuscat@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Roger Hardiman", + "email": "rogerhardiman@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Rasto", + "email": "rasto@duracellko.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Rastislav Novotný", + "email": "rasto@duracellko.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Raka Rasell", + "email": "rrrraka@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Rafal", + "email": "rkdevel@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Precious Nyasulu", + "email": "preciousnyasulu441@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Praga Siva", + "email": "praga@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Poppyto", + "email": "poppyto@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Pieter Nijs", + "email": "pieternijs@live.be", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Pierre Henri", + "email": "pierrehenrikt@kleartouch.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Pierre Galaup", + "email": "pierregalaup@outlook.fr", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Philipp Sumi", + "email": "hardcodet@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Phil Henning", + "email": "phenning@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "nextfool", + "email": "nextfool@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "nels83", + "email": "nels+git@pgroupe.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "nalka0", + "email": "30848600+nalka0@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "mos379", + "email": "45105519+mos379@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "mohsen bagheri", + "email": "85581484+mohsenbgi@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "michalpobuta", + "email": "52126292+michalpobuta@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "matt4pi", + "email": "matt@4pi.com.au", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "masonyc", + "email": "mason.yunchen@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "mallibone", + "email": "mallibone@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "maexsp", + "email": "maex.sp@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "luyajun0205", + "email": "v-yajlu@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "lewcianci", + "email": "lewcianci@hotmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "kadiryazgan", + "email": "kadiryazgan@msn.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "juliuszint", + "email": "julius.zint@awin-software.de", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "jpiechowiak", + "email": "jerzy.piechowiak@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "jonlipsky", + "email": "jonlipsky@github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "john-larson", + "email": "21021544+john-larson@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "joepgrooten", + "email": "52749854+joepgrooten@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "jaytilly", + "email": "jt@jaybirdlabs.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "jacobmcgoogan", + "email": "jacob.mcgoogan@allscripts.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "inforithmics", + "email": "thomas.stocker@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "indydawgy", + "email": "tophe112@yahoo.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Xiangwei Cai", + "email": "v-caxian@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "zhuXinghan", + "email": "1097278366@qq.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "z3ut", + "email": "z3ut@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "ytn3rd", + "email": "b.moore@4pilabs.com.au", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "yone64", + "email": "yone64@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "wplong11", + "email": "wplong11@naver.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "woutermeuwis", + "email": "wouter.meuwis@3factr.be", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "webwarrior-ws", + "email": "webwarrior-ws@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "weases", + "email": "richard.wiesinger@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "v-haroha", + "email": "51649153+v-haroha@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "tomeverin", + "email": "24466690+tomeverin@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "tj-devel709", + "email": "tj.devel709@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "thisisthekap", + "email": "christian.kapplmueller@tonestro.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "thisisthekap", + "email": "c.kapplmueller@me.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "spruceDevelopment", + "email": "33689503+sprucedevelopment@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "softlion", + "email": "benjamin@vapolia.fr", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "sheiksyedm", + "email": "sheiksyedm@syncfusion.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "sahi82", + "email": "sahi82@yahoo.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "rjantz3", + "email": "rjantz3@msn.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "qmark", + "email": "dimka.qmark@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "pit", + "email": "37137614+pitmobile@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "piotrkonowalski", + "email": "piotrkonowalski@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "pRopia", + "email": "pratik.ropia@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "nor0x", + "email": "nor0x@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Will Davies", + "email": "wdavies973@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "WdeBruin", + "email": "wouterdebruin88@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vũ Đức Tuyến", + "email": "tuyen@naxam.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Víctor Martos", + "email": "vmareg@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Víctor Guzmán", + "email": "vgzman+github@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vojtěch Mádr", + "email": "madrvojtech@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vlada Shubina", + "email": "vshubina@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vinicius Jarina", + "email": "viniciusjarina@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vincent Hoogendoorn", + "email": "vincenth.net@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vincent Dondain", + "email": "vincentdondain@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vincent Costel", + "email": "vincent.costel@apcurium.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Vijay Anand E G", + "email": "81947404+egvijayanand@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tushar Koshti", + "email": "koshtitushar1994@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Trung Nguyen", + "email": "57174311+trungnt2910@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Trivalik", + "email": "3148279+trivalik@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Toni Petrina", + "email": "tonipetrina@hotmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tomáš Ondřej", + "email": "45392392+tomond@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tommi Gustafsson", + "email": "tommi.gustafsson@hyvanmielenpelit.fi", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tomasz Ścisłowicz", + "email": "toomasz@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tomasz Cielecki", + "email": "249719+cheesebaron@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tom Meschter", + "email": "tom.meschter@valinor.org", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Tom Gilder", + "email": "tom@tom.me.uk", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "hydrogen-software-ff", + "email": "81678363+hydrogen-software-ff@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "humhei", + "email": "humhei@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "gleblebedev", + "email": "gleb@gleblebedev.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "genriquez", + "email": "genriquez@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "fengrui", + "email": "fengrui358@163.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "dottienet", + "email": "61212782+dottienet@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "dogukandemir", + "email": "dogukandemir@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "digitaldirk", + "email": "22691956+digitaldirk@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "dgeller-OUHSC", + "email": "dgeller@ouhsc.edu", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "dartasen", + "email": "10561268+dartasen@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "cliff v", + "email": "powerdude@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "ckrempp91", + "email": "chrisk@msidata.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "chenrensong", + "email": "chenrensong@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "cat0363", + "email": "125236133+cat0363@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "borrmann", + "email": "max.borrmann@gmx.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "atoghyani", + "email": "ariantoghyani@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "adammeaney", + "email": "meaneykid2@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "acuntex", + "email": "werner@welsch.cc", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Yusuke Yamada", + "email": "yamachu.dev@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Yunus Efendi", + "email": "19399214+yunusefendi52@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Yun Chen", + "email": "mason.yunchen@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Youssef Victor", + "email": "31348972+youssef1313@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Yaser Moradi", + "email": "ysmoradi@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "LyalinDotCom", + "id": 2363526, + "type": "User", + "contributions": 1 + }, + { + "login": "ChasakisD", + "id": 23040695, + "type": "User", + "contributions": 1 + }, + { + "login": "humblehacker", + "id": 117582, + "type": "User", + "contributions": 1 + }, + { + "login": "EislerDavid", + "id": 48833197, + "type": "User", + "contributions": 1 + }, + { + "login": "davidbritch", + "id": 8092460, + "type": "User", + "contributions": 1 + }, + { + "name": "Dave Humphreys", + "email": "dave@none.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "danielwilliamson", + "id": 6487407, + "type": "User", + "contributions": 1 + }, + { + "login": "danielmarbach", + "id": 174258, + "type": "User", + "contributions": 1 + }, + { + "login": "danielchalmers", + "id": 7112040, + "type": "User", + "contributions": 1 + }, + { + "login": "danmoseley", + "id": 6385855, + "type": "User", + "contributions": 1 + }, + { + "login": "DamianMehers", + "id": 1457446, + "type": "User", + "contributions": 1 + }, + { + "login": "dkarzon", + "id": 214449, + "type": "User", + "contributions": 1 + }, + { + "login": "Csaba8472", + "id": 483692, + "type": "User", + "contributions": 1 + }, + { + "login": "craigloewen-msft", + "id": 42221804, + "type": "User", + "contributions": 1 + }, + { + "login": "CleanCodeDeveloper", + "id": 16760760, + "type": "User", + "contributions": 1 + }, + { + "login": "csdinon", + "id": 24420845, + "type": "User", + "contributions": 1 + }, + { + "login": "Choza-rajan", + "id": 92723643, + "type": "User", + "contributions": 1 + }, + { + "login": "Chase-William", + "id": 46757278, + "type": "User", + "contributions": 1 + }, + { + "login": "ChaseMarsh", + "id": 19700403, + "type": "User", + "contributions": 1 + }, + { + "login": "charlesroddie", + "id": 19760720, + "type": "User", + "contributions": 1 + }, + { + "name": "Charles Petzold", + "email": "chape@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "kvochko", + "id": 2308830, + "type": "User", + "contributions": 1 + }, + { + "name": "Max Brister", + "email": "a+github@2bass.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "Giviruk", + "id": 42971690, + "type": "User", + "contributions": 1 + }, + { + "login": "giuseppe-guerra", + "id": 11569903, + "type": "User", + "contributions": 1 + }, + { + "login": "Ghostbird", + "id": 1202149, + "type": "User", + "contributions": 1 + }, + { + "login": "tarasverq", + "id": 8226275, + "type": "User", + "contributions": 1 + }, + { + "login": "JoergMeier106", + "id": 22917826, + "type": "User", + "contributions": 1 + }, + { + "login": "gabor-nemeth", + "id": 37656640, + "type": "User", + "contributions": 1 + }, + { + "login": "FriedrichRehren", + "id": 22966022, + "type": "User", + "contributions": 1 + }, + { + "login": "fredyadriano90", + "id": 25233851, + "type": "User", + "contributions": 1 + }, + { + "login": "kiok85", + "id": 158862689, + "type": "User", + "contributions": 1 + }, + { + "login": "francedot", + "id": 11706033, + "type": "User", + "contributions": 1 + }, + { + "login": "fenxu", + "id": 12146082, + "type": "User", + "contributions": 1 + }, + { + "login": "IIFabixn", + "id": 92400234, + "type": "User", + "contributions": 1 + }, + { + "login": "EP01", + "id": 22454118, + "type": "User", + "contributions": 1 + }, + { + "login": "eth-ellis", + "id": 13865151, + "type": "User", + "contributions": 1 + }, + { + "login": "Eschryn", + "id": 8217655, + "type": "User", + "contributions": 1 + }, + { + "login": "modplug", + "id": 789588, + "type": "User", + "contributions": 1 + }, + { + "login": "jingliancui", + "id": 16309962, + "type": "User", + "contributions": 1 + }, + { + "login": "eliaspuurunen", + "id": 695294, + "type": "User", + "contributions": 1 + }, + { + "login": "Elashi", + "id": 12378171, + "type": "User", + "contributions": 1 + }, + { + "login": "wachs", + "id": 12235778, + "type": "User", + "contributions": 1 + }, + { + "name": "Edwin Wachs", + "email": "edwin.wachs@tecfinance.com.br", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "Eden-Mor", + "id": 20691183, + "type": "User", + "contributions": 1 + }, + { + "name": "Andrew Hoefling", + "email": "andrew@hoeflingsoftware.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "awaescher", + "id": 3630638, + "type": "User", + "contributions": 1 + }, + { + "login": "AndersRasmussen", + "id": 213707, + "type": "User", + "contributions": 1 + }, + { + "login": "AmrAlSayed0", + "id": 2955032, + "type": "User", + "contributions": 1 + }, + { + "login": "AlleSchonWeg", + "id": 6727366, + "type": "User", + "contributions": 1 + }, + { + "login": "aritchie", + "id": 1431555, + "type": "User", + "contributions": 1 + }, + { + "login": "alfredmyers", + "id": 12210687, + "type": "User", + "contributions": 1 + }, + { + "login": "AxelUser", + "id": 7935489, + "type": "User", + "contributions": 1 + }, + { + "login": "cacti-acaprais", + "id": 43949501, + "type": "User", + "contributions": 1 + }, + { + "login": "NordAlex", + "id": 6042648, + "type": "User", + "contributions": 1 + }, + { + "login": "ahouben", + "id": 2446666, + "type": "User", + "contributions": 1 + }, + { + "name": "Alexander Hardwicke", + "email": "alex.hardwicke@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "Pandalink", + "id": 18328783, + "type": "User", + "contributions": 1 + }, + { + "login": "adrianhall", + "id": 1489465, + "type": "User", + "contributions": 1 + }, + { + "login": "adamsitnik", + "id": 6011991, + "type": "User", + "contributions": 1 + }, + { + "login": "APoukar", + "id": 36044908, + "type": "User", + "contributions": 1 + }, + { + "name": "Adam Pedley", + "email": "adam.pedley@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "adamivancza", + "id": 19835917, + "type": "User", + "contributions": 1 + }, + { + "login": "adambarath", + "id": 14049972, + "type": "User", + "contributions": 1 + }, + { + "login": "1iveowl", + "id": 12871120, + "type": "User", + "contributions": 1 + }, + { + "login": "1d0n7kn0w", + "id": 3910210, + "type": "User", + "contributions": 1 + }, + { + "login": "1c3f0x84", + "id": 35239416, + "type": "User", + "contributions": 1 + }, + { + "name": "Chad Kimes", + "email": "chad.kimes@iticentral.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "kericbowman", + "id": 12725288, + "type": "User", + "contributions": 1 + }, + { + "login": "breezy64", + "id": 3731287, + "type": "User", + "contributions": 1 + }, + { + "login": "bkaankose", + "id": 12009960, + "type": "User", + "contributions": 1 + }, + { + "login": "Brucepimenta", + "id": 37835327, + "type": "User", + "contributions": 1 + }, + { + "login": "brainoffline", + "id": 1763877, + "type": "User", + "contributions": 1 + }, + { + "login": "bradencohen", + "id": 11482832, + "type": "User", + "contributions": 1 + }, + { + "login": "TrueGeek", + "id": 90821, + "type": "User", + "contributions": 1 + }, + { + "login": "bbenetskyy", + "id": 8330262, + "type": "User", + "contributions": 1 + }, + { + "name": "Bohdan Benetskyi", + "email": "bbenetskyi@pgs-soft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "bwoebi", + "id": 3154871, + "type": "User", + "contributions": 1 + }, + { + "login": "BinaryCraX", + "id": 5560801, + "type": "User", + "contributions": 1 + }, + { + "login": "billvenhaus", + "id": 6692379, + "type": "User", + "contributions": 1 + }, + { + "login": "BenBtg", + "id": 70525, + "type": "User", + "contributions": 1 + }, + { + "login": "baskren", + "id": 2528888, + "type": "User", + "contributions": 1 + }, + { + "login": "BarryNolte", + "id": 4474173, + "type": "User", + "contributions": 1 + }, + { + "login": "BaY1251", + "id": 48309205, + "type": "User", + "contributions": 1 + }, + { + "login": "axelgorris", + "id": 11756311, + "type": "User", + "contributions": 1 + }, + { + "login": "atsushieno", + "id": 53929, + "type": "User", + "contributions": 1 + }, + { + "login": "artemutin", + "id": 7271331, + "type": "User", + "contributions": 1 + }, + { + "login": "mellson", + "id": 167574, + "type": "User", + "contributions": 1 + }, + { + "login": "AndrewLang", + "id": 3375370, + "type": "User", + "contributions": 1 + }, + { + "login": "AndreKraemer", + "id": 312671, + "type": "User", + "contributions": 1 + }, + { + "name": "Mausam Shrestha", + "email": "46900712+mausam-shrestha@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mauro Agnoletti", + "email": "mauro.agnoletti@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mattias Sjögren", + "email": "github@msjogren.net", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matthijs ter Woord", + "email": "matthijsterwoord@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matthew Robbins", + "email": "matthew.ch.robbins@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Ward", + "email": "ward.matt@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Ward", + "email": "matt.ward@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Soucoup", + "email": "masoucou@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Regul", + "email": "mareg@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Mitchell", + "email": "mmitche@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Matt Goldman", + "email": "matt.goldman@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mathias Storm", + "email": "mathias@storm.lc", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mateus Luiz Camilo", + "email": "37350787+mathewlc@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Martin Kuckert", + "email": "m.kuckert@salt-and-pepper.eu", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Martin", + "email": "modermatt@tuta.io", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Martijn van Dijk", + "email": "mhvdijk@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mark", + "email": "mrcull@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "Marioo1357", + "id": 45981364, + "type": "User", + "contributions": 1 + }, + { + "login": "MariovanZeist", + "id": 12493059, + "type": "User", + "contributions": 1 + }, + { + "login": "Marcus-L", + "id": 1369184, + "type": "User", + "contributions": 1 + }, + { + "login": "mgierlasinski", + "id": 19707868, + "type": "User", + "contributions": 1 + }, + { + "login": "john-hollander", + "id": 11653688, + "type": "User", + "contributions": 1 + }, + { + "name": "Nicolò Carandini", + "email": "ncarandini@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "NicolD", + "email": "nicolgit@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Nick Kovalsky", + "email": "taublast@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Nick Gamroth", + "email": "thebeekeeper@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Neville Nazerane", + "email": "31866047+neville-nazerane@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Muzib", + "email": "thisismuzib@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mitchell Hwang", + "email": "16830051+mdh1418@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mikhail", + "email": "om2804@mail.ru", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mike Schwörer", + "email": "mailport@mikescher.de", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mike Parker", + "email": "mjbparker@outlook.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mike Parker", + "email": "mikeparker104", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mike Norman", + "email": "mike.norman@xamarin.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mike Irving", + "email": "79252299+mikeirvingweb@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mihhail Maslakov", + "email": "mihhail.maslakov@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael Yanni", + "email": "miyanni@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael S. Scherotter", + "email": "mischero@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael Dwan", + "email": "m@dwan.io", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael Cummings (MSFT)", + "email": "mcumming@microsoft.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael Cao", + "email": "poppop208@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Michael", + "email": "michael@zpf.fr", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Mendy Berger", + "email": "12537668+mendyberger@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "MemeMan", + "email": "52583316+imememani@users.noreply.github.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "name": "Maximo Piva", + "email": "maximo.piva@gmail.com", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "johannesegger", + "id": 237707, + "type": "User", + "contributions": 1 + }, + { + "login": "johankson", + "id": 1113636, + "type": "User", + "contributions": 1 + }, + { + "login": "JogyBlack", + "id": 1275686, + "type": "User", + "contributions": 1 + }, + { + "name": "Joakim Carselind", + "email": "joakim.carselind@cub.se", + "type": "Anonymous", + "contributions": 1 + }, + { + "login": "jimbobbennett", + "id": 1710385, + "type": "User", + "contributions": 1 + }, + { + "login": "jrjrguo", + "id": 27794646, + "type": "User", + "contributions": 1 + }, + { + "login": "Powerhelmsman", + "id": 33136632, + "type": "User", + "contributions": 1 + }, + { + "login": "solvingj", + "id": 8557737, + "type": "User", + "contributions": 1 + }, + { + "login": "lirkki", + "id": 665778, + "type": "User", + "contributions": 1 + }, + { + "login": "JanKrivanek", + "id": 3809076, + "type": "User", + "contributions": 1 + }, + { + "login": "JimBobSquarePants", + "id": 385879, + "type": "User", + "contributions": 1 + }, + { + "login": "licon4812", + "id": 32421608, + "type": "User", + "contributions": 1 + }, + { + "login": "jadenrogers", + "id": 8000621, + "type": "User", + "contributions": 1 + }, + { + "login": "lamest", + "id": 7779341, + "type": "User", + "contributions": 1 + }, + { + "login": "RussKie", + "id": 4403806, + "type": "User", + "contributions": 1 + }, + { + "login": "ice-j", + "id": 3597015, + "type": "User", + "contributions": 1 + }, + { + "login": "ChummerUA", + "id": 12427312, + "type": "User", + "contributions": 1 + }, + { + "login": "hemantbeast", + "id": 10476066, + "type": "User", + "contributions": 1 + }, + { + "login": "Happypig375", + "id": 19922066, + "type": "User", + "contributions": 1 + }, + { + "login": "tracplus-hpaterson", + "id": 87885287, + "type": "User", + "contributions": 1 + }, + { + "login": "gatm50", + "id": 440179, + "type": "User", + "contributions": 1 + }, + { + "login": "GuidoNeele", + "id": 1301586, + "type": "User", + "contributions": 1 + }, + { + "login": "MarcelStommel", + "id": 45386201, + "type": "User", + "contributions": 1 + }, + { + "login": "FaithfulDev", + "id": 16925901, + "type": "User", + "contributions": 1 + }, + { + "login": "manishkungwani", + "id": 673367, + "type": "User", + "contributions": 1 + }, + { + "login": "mairaw", + "id": 12971179, + "type": "User", + "contributions": 1 + }, + { + "login": "MagicAndre1981", + "id": 8274816, + "type": "User", + "contributions": 1 + }, + { + "login": "guardrex", + "id": 1622880, + "type": "User", + "contributions": 1 + }, + { + "login": "lizharems", + "id": 103444841, + "type": "User", + "contributions": 1 + }, + { + "login": "leoMehlig", + "id": 9119485, + "type": "User", + "contributions": 1 + }, + { + "login": "rs-lkroneman", + "id": 66680815, + "type": "User", + "contributions": 1 + }, + { + "login": "lobrien", + "id": 181571, + "type": "User", + "contributions": 1 + }, + { + "login": "lewing", + "id": 24063, + "type": "User", + "contributions": 1 + }, + { + "login": "KyNam", + "id": 1797185, + "type": "User", + "contributions": 1 + }, + { + "login": "pineapple216", + "id": 7579094, + "type": "User", + "contributions": 1 + }, + { + "login": "koviant", + "id": 23036313, + "type": "User", + "contributions": 1 + }, + { + "login": "thekbb", + "id": 8903473, + "type": "User", + "contributions": 1 + }, + { + "login": "kentcb", + "id": 1901832, + "type": "User", + "contributions": 1 + }, + { + "login": "khuongntrd", + "id": 8498480, + "type": "User", + "contributions": 1 + }, + { + "login": "dahlbyk", + "id": 133987, + "type": "User", + "contributions": 1 + }, + { + "login": "Kahbazi", + "id": 19396090, + "type": "User", + "contributions": 1 + }, + { + "login": "garuma", + "id": 104105, + "type": "User", + "contributions": 1 + }, + { + "login": "tondat", + "id": 383380, + "type": "User", + "contributions": 1 + }, + { + "login": "JFMG", + "id": 100067782, + "type": "User", + "contributions": 1 + }, + { + "login": "Jon2G", + "id": 24820069, + "type": "User", + "contributions": 1 + } +] diff --git a/.github/prompts/release_notes.prompt.md b/.github/prompts/release_notes.prompt.md new file mode 100644 index 000000000000..4210177b4ed1 --- /dev/null +++ b/.github/prompts/release_notes.prompt.md @@ -0,0 +1,419 @@ +# .NET MAUI Release Notes Generator + +You are an Open Source release notes generator assistant responsible for classifying and generating comprehensive release notes between two commits from the repository the user specifies. + +## Understanding Categories + +You will classify all commits into exactly ONE of the following categories: + +1. **MAUI Product Fixes**: Bug fixes, improvements, and features related to the MAUI product itself +2. **Dependency Updates**: Updates to dependencies, packages, libraries, or SDKs +3. **Testing**: Test-related changes, test infrastructure, and test improvements +4. **Docs**: Documentation changes, samples, and tutorials +5. **Housekeeping**: Build system changes, CI pipeline, code cleanup, formatting, and any other changes + +Every commit must be classified into exactly one category. When uncertain about where to place a commit, follow the classification rules below or default to Housekeeping. + +## Process for Creating Release Notes + +When asked to create release notes for a particular branch, follow these steps: + +### 1. Finding the Commits to Compare + +* When user specifies two branches or commits, use these for comparison +* If only one branch/commit is provided, you'll need to determine the previous release point, ask the user to tell you what is the previous release branch you can try something like `git branch -a | grep -E "release/10.0.*preview"` +* If needed, ask the user for the comparison point or the previous branch + +### 2. Retrieving the Commit Log + +* Use `git log` or equivalent to get the commits between the two commits/branches and save it to a file like this exmaple `git log --pretty=format:"%h - %s - #%cd (%an - %ae)" --date=short release/10.0.1xx-preview2..release/10.0.1xx-preview3 > release_notes_commits.txt` +* Ensure you capture all commits within the specified range +* Pay attention to merge commits that might indicate important feature merges + +### 3. Find the correct Github username for each commit + +* For each commit on the list, look up the corresponding GitHub username from the actual GitHub PR, not just the commit author email +* Use the `get_pull_request` tool if available to fetch the actual PR information including the correct GitHub username that created the PR +* Use the [text](contributors.json) file to help map commit authors to GitHub usernames +* When encountering an email address in a commit author, check if it exists in the contributors.json file and use the corresponding GitHub login +* Verify all usernames are consistent with GitHub's format (e.g., @jsuarezruiz instead of @javiersuarezruiz) +* Some common username transformations to check for: + - Internal usernames may differ from GitHub usernames + - Email addresses should be converted to GitHub handles + - Employee IDs or numbers in usernames should be included if they are part of the GitHub username (e.g., @HarishKumarSF4517 not @harish.kumar) +* Keep the '@' prefix for all usernames to maintain consistency +* For "Anonymous" type contributors in [text](contributors.json), use their name as shown but try to find their corresponding GitHub username if possible +* For automated systems like dependabot or github-actions, use the standard bot usernames (@dependabot[bot], @github-actions[bot], etc.) + +### 4. Classifying the Commits + +To help when doing your category analizing use lower case of the commit messages +Apply these classification rules: + +* **MAUI Product Fixes**: + - Bug fixes with platform tags like [iOS], [Android], [Windows], [Mac], [MacCatalyst], [android], [x], [xaml], [core], [ios], [android], [windows], [mac], [maccatalyst] + - Feature additions or improvements to MAUI components + - Performance improvements + - API changes and enhancements + - New features or fixes related to Aspire + - Remove for fixing pending TODOs + - Trimmer and AOT related changes + +* **Testing**: + - Has tag [testing], [test], [uitests] or contains terms like "test", "add test", "UI test", "unit test", "UItests", "uitests", if any of these exists the commit is from Testing category + - Changes to test infrastructure, test frameworks, or CI test configurations + - Test coverage improvements + +* **Docs**: + - Has tag [docs] or contains terms like "documentation", "docs", "sample", "example" + - README updates, API documentation, code comments + - No other commits should belong here + +* **Dependency Updates**: + - Updates to package references, dependencies, or SDKs + - Commits from automation bots updating dependencies (e.g., @dotnet-maestro) + - Version bumps of external libraries + - Changes to NuGet packages + +* **Housekeeping**: + - CI pipeline changes, formatting fixes, repo maintenance + - Build system modifications, tooling updates + - Refactoring with no functional changes + - Any commit that doesn't clearly fit other categories + - Merging a branch to another branch + - Has tag [ci] + + +### 5. Organizing for the Response + +* Group commits by category as defined in section 1 +* Within each category, list in descending order by PR number (newest PRs first) +* For PR numbers: + - Ensure they are formatted as '#XXXXX' (e.g., #28804) + - When creating GitHub links, use full URLs: https://github.com/dotnet/maui/pull/XXXXX +* For contributor attribution: + - Use ONLY the GitHub username that appears in the PR, not the commit author + - Always prefix usernames with '@' (e.g., @kubaflo) + - Be especially careful with usernames that have employee IDs or numbers at the end + - For automated actions, use @github-actions or @dotnet-bot as appropriate +* Save the results to a markdown file like docs/release_notes_{releasename}.md + +### 6. Special Cases & Edge Cases + +* **Reverts**: Classify reverted commits to the same category as the original commit +* **Automated PRs**: Place automation-driven changes (like dependency updates) in appropriate categories like Dependency Updates +* **Cross-cutting changes**: When a commit spans multiple categories, prioritize based on the primary focus +* **Breaking changes**: Highlight any breaking changes prominently in the summary +* **New contributors**: Include a separate section acknowledging first-time contributors + +## Response Format + +Structure your release notes in the following categorized format, and save them to a file like docs/release_notes_{releasename}.md: + +```markdown +### MAUI Product Fixes +* [Commit title] by @[correct-github-username] in https://github.com/dotnet/maui/pull/[PR number] +* ... + +### Testing +* [Commit title] by @[correct-github-username] in https://github.com/dotnet/maui/pull/[PR number] +* ... + +### Dependency Updates +* [Commit title] by @[correct-github-username] in https://github.com/dotnet/maui/pull/[PR number] +* ... + +### Docs +* [Commit title] by @[correct-github-username] in https://github.com/dotnet/maui/pull/[PR number] +* ... + +### Housekeeping +* [Commit title] by @[correct-github-username] in https://github.com/dotnet/maui/pull/[PR number] +* ... + +## New Contributors +* @[correct-github-username] made their first contribution in https://github.com/dotnet/maui/pull/[PR number] +* ... + +**Full Changelog**: https://github.com/dotnet/maui/compare/[previous-branch]...[current-branch] +``` + +## Contributors list + +[text](contributors.json) + + +## Example + +Here's a shortened example of properly formatted release notes: + +## What's Changed + +* Internalize/remove MessagingCenter by @jfversluis in https://github.com/dotnet/maui/pull/27842 +* [release/10.0.1xx-preview2] Obsolete TableView by @github-actions in https://github.com/dotnet/maui/pull/28327 + +### MAUI Product Fixes +* Radio button's default template improvements by @kubaflo in https://github.com/dotnet/maui/pull/26719 +* [Windows] - Fixed Window Title Not Shown When Reverting from TitleBar to Default State by @prakashKannanSf3972 in https://github.com/dotnet/maui/pull/27148 +* [Windows] Fixed Margin Not Applied to Shell Flyout Template Items on First Display by @prakashKannanSf3972 in https://github.com/dotnet/maui/pull/27060 +* [iOS] Fix for Left SwipeView Items Conflict with Shell Menu Swipe Gesture by @Tamilarasan-Paranthaman in https://github.com/dotnet/maui/pull/26976 +* [iOS]Fix for Character Spacing Not Updating Correctly in Editor for Dynamically Added Text by @devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/25347 +* Make ImageSource more async-friendly by @symbiogenesis in https://github.com/dotnet/maui/pull/22098 +* [XC] don't call ProvideValue on compiled bindings by @StephaneDelcroix in https://github.com/dotnet/maui/pull/27509 +* [XC] trim x:Name values by @StephaneDelcroix in https://github.com/dotnet/maui/pull/27452 +* [Mac] TitleBar not always initally set by @tj-devel709 in https://github.com/dotnet/maui/pull/27487 +* [X] don't expand types to Extension for x:Static by @StephaneDelcroix in https://github.com/dotnet/maui/pull/17276 +* Fix Android TextView being truncated under some conditions by @albyrock87 in https://github.com/dotnet/maui/pull/27179 +* Improve debugger display XP by @pictos in https://github.com/dotnet/maui/pull/27489 +* [Windows]Fixed Shell Navigating event issue when switching tabs by @Vignesh-SF3580 in https://github.com/dotnet/maui/pull/27197 +* Revert "Implementation of Customizable Search Button Color for SearchBar Across Platforms (#26759)" by @jfversluis in https://github.com/dotnet/maui/pull/27568 +* [net10.0] Revert "Implementation of Customizable Search Button Color for SearchBar Across Platforms (#26759)" by @github-actions in https://github.com/dotnet/maui/pull/27578 +* Use TCS for BusySetSignalName tests by @PureWeen in https://github.com/dotnet/maui/pull/27583 +* [Windows] - Resolved FlyoutBehavior "Locked" State Reset Issue After Navigation by @prakashKannanSf3972 in https://github.com/dotnet/maui/pull/27379 +* Fixed the vertical orientation issue in the CarouselViewHandler2 on iOS by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27273 +* [Android] Fixed the CarouselView Items overlap issue with PeekAreaInsets by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27499 +* Fixed CollectionView's HeaderTemplate is not rendering in iOS and MacCatalyst platform. by @KarthikRajaKalaimani in https://github.com/dotnet/maui/pull/27466 +* Obsolete iOS Compatibility AccessibilityExtensions by @jfversluis in https://github.com/dotnet/maui/pull/27593 +* Make HybridWebView.InvokeJavaScriptAsync public by @jfversluis in https://github.com/dotnet/maui/pull/27594 +* Replace Android ToSpannableString overload by @jfversluis in https://github.com/dotnet/maui/pull/27597 +* [net10.0] Set `UseRidGraph=false` on Windows by @MartyIX in https://github.com/dotnet/maui/pull/27595 +* Reapply "Implementation of Customizable Search Button Color for Search Across Platforms (#26759)" by @jfversluis in https://github.com/dotnet/maui/pull/27586 +* [Android] Fix for Flyout closing when updating the FlyoutPage.Detail by @Tamilarasan-Paranthaman in https://github.com/dotnet/maui/pull/26425 +* Fix for [Windows]ToolbarItem visibility until Page Disappearing by @SuthiYuvaraj in https://github.com/dotnet/maui/pull/26915 +* [net10.0] Set `UseRidGraph=false` on Windows (2) by @MartyIX in https://github.com/dotnet/maui/pull/27634 +* Fix for MenuFlyoutItem stops working after navigating away from and back to page by @BagavathiPerumal in https://github.com/dotnet/maui/pull/25170 +* Fix Issue13551 to use WaitForElement by @PureWeen in https://github.com/dotnet/maui/pull/27644 +* [Android] Fix Flickering issue when calling Navigation.PopAsync by @devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/24887 +* Fix GC Race condition with tests by @PureWeen in https://github.com/dotnet/maui/pull/27652 +* Fix 19647 by @StephaneDelcroix in https://github.com/dotnet/maui/pull/20127 +* [net10.0] Make CV2 default for net10 by @rmarinho in https://github.com/dotnet/maui/pull/27567 +* Timeout Android emulator start by @PureWeen in https://github.com/dotnet/maui/pull/27657 +* [net10] Revert Windows RID graph changes by @jfversluis in https://github.com/dotnet/maui/pull/27671 +* BindableLayout should disconnect handlers by @albyrock87 in https://github.com/dotnet/maui/pull/27450 +* Improve shadow rendering on Android, fix shadow clipping on iOS by @albyrock87 in https://github.com/dotnet/maui/pull/26789 +* [X] deprecate fontImageExtension by @StephaneDelcroix in https://github.com/dotnet/maui/pull/23657 +* 26598 - Fix for Tabbar disappears when navigating back from page with hidden TabBar in iOS 18 by @SuthiYuvaraj in https://github.com/dotnet/maui/pull/27582 +* Avoid compiler error when using init properties with BindingSourceGenerator by @rabuckley in https://github.com/dotnet/maui/pull/27655 +* Make iOS WebView delegates virtual by @jfversluis in https://github.com/dotnet/maui/pull/27601 +* Improve TextToSpeech function by adding a speech rate parameter by @Zerod159 in https://github.com/dotnet/maui/pull/24798 +* Adds very basic CSS support for Border by @sthewissen in https://github.com/dotnet/maui/pull/27529 +* [iOS] Added PermissionStatus.Limited for Contacts by @kubaflo in https://github.com/dotnet/maui/pull/27694 +* Make some internal methods public by @jfversluis in https://github.com/dotnet/maui/pull/27598 +* Add support for iOS/Mac specific modals styled as popovers by @piersdeseilligny in https://github.com/dotnet/maui/pull/23984 +* Adds CSS support for shadows and a simpler way of defining shadows in XAML by @sthewissen in https://github.com/dotnet/maui/pull/27180 +* Fix the Collection view empty view not fill the vertical space by @Shalini-Ashokan in https://github.com/dotnet/maui/pull/27464 +* [Windows] Fix for SearchHandler.Focused and Unfocused event never fires by @BagavathiPerumal in https://github.com/dotnet/maui/pull/27577 +* [Android] Fix Cursor Not Closing in File Picker to Prevent Log Spam. by @bhavanesh2001 in https://github.com/dotnet/maui/pull/27718 +* [Android] Fixed the SoftInputMode issues with modal pages by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27553 +* [iOS] Fix Gray Line Appears on the Right Side of GraphicsView with Decimal WidthRequest by @devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/26368 +* Page cannot scroll to the bottom while using RoundRectangle by @Dhivya-SF4094 in https://github.com/dotnet/maui/pull/27451 +* Support for Setting Switch Off State Color by @devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/25068 +* [iOS] Fix ShellContent Title Does Not Update at Runtime by @devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/26062 +* Fixed [iOS] Navigation breaks when modal pages use PageSheet by @NanthiniMahalingam in https://github.com/dotnet/maui/pull/27765 +* BarBackground with Brush in TabbedPage on theme change by @kubaflo in https://github.com/dotnet/maui/pull/24425 +* [iOS] Using long-press navigation on back button with shell pages - fix by @kubaflo in https://github.com/dotnet/maui/pull/24003 +* Fix for DatePicker displays incorrect date selection when navigating to next month. by @BagavathiPerumal in https://github.com/dotnet/maui/pull/26064 +* Fixed Unnecessary SizeChanged Event Triggering by @Dhivya-SF4094 in https://github.com/dotnet/maui/pull/27476 +* [Essentials] Longitude Validation by @kubaflo in https://github.com/dotnet/maui/pull/27784 +* Fixed latitude->longitude typo by @kubaflo in https://github.com/dotnet/maui/pull/27834 +* [iOS] CollectionView with header or footer has incorrect height - fix by @kubaflo in https://github.com/dotnet/maui/pull/27809 +* Fix concurrency issues and leak reliability by @PureWeen in https://github.com/dotnet/maui/pull/27815 +* [iOS] Fixed the Application crash when ToolbarItem is created with invalid IconImageSource name by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27175 +* Revert "Fix concurrency issues and leak reliability" by @rmarinho in https://github.com/dotnet/maui/pull/27870 +* [Android] Fix app crash caused by dynamic template switching in ListView by @BagavathiPerumal in https://github.com/dotnet/maui/pull/24808 +* Don't need to register ApplicationStub by @PureWeen in https://github.com/dotnet/maui/pull/27885 +* Fixed Toolbar IconImageSource not updating with Binding Changes by @NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/27402 +* [iOS] Fixed a crash in CarouselViewHandler2 on iOS 15. by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27871 +* [Android] Android: Native View not set exception on modal page - fix by @kubaflo in https://github.com/dotnet/maui/pull/27891 +* [iOS/MacCatalyst] Use newer API in FilePicker by @MartyIX in https://github.com/dotnet/maui/pull/27521 +* [Android] Map FlowDirection of shell to PlatformView on Android by @mohsenbgi in https://github.com/dotnet/maui/pull/23473 +* Fix CSS Hot Reload - Handle fingerprint when hot reloading scoped CSS bundles by @spadapet in https://github.com/dotnet/maui/pull/27788 +* [iOS] CV1's footer doesn't increase its size - fix by @kubaflo in https://github.com/dotnet/maui/pull/27979 +* [iOS] CollectionView 1's doesn't adjust its offset when resizing a footer by @kubaflo in https://github.com/dotnet/maui/pull/27963 +* [Android] Properly Resolve File Paths in FilePicker When MANAGE_EXTERNAL_STORAGE is Granted by @bhavanesh2001 in https://github.com/dotnet/maui/pull/27975 +* [net10.0] Set `UseRidGraph=false` on Windows (attempt 2) by @MartyIX in https://github.com/dotnet/maui/pull/27679 +* [Android] Fix crash starting the swipe on SwipeView inside CollectionView by @jsuarezruiz in https://github.com/dotnet/maui/pull/27669 +* Applying visibility change to child controls by @kubaflo in https://github.com/dotnet/maui/pull/20154 +* Fixed CheckBox enabled color is not updated properly by @NanthiniMahalingam in https://github.com/dotnet/maui/pull/26399 +* [android] move `IsDispatchRequiredImplementation()` to Java by @jonathanpeppers in https://github.com/dotnet/maui/pull/27936 +* remove Dispose call on ShellItemRenderer by @pictos in https://github.com/dotnet/maui/pull/27890 +* [iOS] CollectionView with grouped data crashes on iOS when the groups change - fix by @kubaflo in https://github.com/dotnet/maui/pull/27991 +* [BindingSG] Added Binding.Create support for xaml generated sources by @jkurdek in https://github.com/dotnet/maui/pull/27610 +* Make ShadowTypeConverter public & nullable for .NET 10 by @jfversluis in https://github.com/dotnet/maui/pull/27984 +* add DebuggerTypeProxy for Shell by @pictos in https://github.com/dotnet/maui/pull/27989 +* [Windows] Fixed NRE when clearing ListView after navigating back by @SubhikshaSf4851 in https://github.com/dotnet/maui/pull/27274 +* [Windows] Fix for issues caused by setting Shell.FlyoutWidth on WinUI when binding context values are changed by @Tamilarasan-Paranthaman in https://github.com/dotnet/maui/pull/27151 +* [MacCatalyst] Picker focus events by @kubaflo in https://github.com/dotnet/maui/pull/27973 +* [Android] Fixed the ScrollbarVisibility issues by @Ahamed-Ali in https://github.com/dotnet/maui/pull/27613 +* Make more internal methods public by @jsuarezruiz in https://github.com/dotnet/maui/pull/28059 +* Fixed FontImageSource icon color does not change in the TabbedPage when dynamically updated. by @NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/27742 +* [ci] Remove macios workaround to build net9 by @rmarinho in https://github.com/dotnet/maui/pull/28363 + + +### Tests + +* [Testing] Fix for MacCatalyst flaky tests in CI which fails due window position below the dock layer by @anandhan-rajagopal in https://github.com/dotnet/maui/pull/27279 +* Revert "Run every category separately" by @rmarinho in https://github.com/dotnet/maui/pull/27469 +* [Testing] UITest to measure layout passes on a common scenario by @albyrock87 in https://github.com/dotnet/maui/pull/25671 +* [Testing] Enabling some UITests from Issues folder in Appium-13 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27257 +* [Testing] Fix flaky UITests failing sometimes 3 by @jsuarezruiz in https://github.com/dotnet/maui/pull/27277 +* [testing] Disable BlazorWebview tests by @rmarinho in https://github.com/dotnet/maui/pull/27557 +* Fix UITest screenshot taking on MacCatalyst by @albyrock87 in https://github.com/dotnet/maui/pull/27531 +* [Testing] Fix flaky test 4 by @jsuarezruiz in https://github.com/dotnet/maui/pull/27607 +* [testing] Update tests demands by @rmarinho in https://github.com/dotnet/maui/pull/27560 +* [Testing] Implement Appium swipe action on Catalyst using the Mac Driver by @jsuarezruiz in https://github.com/dotnet/maui/pull/27441 +* [Testing] Implement PressEnter Appium action on Windows by @jsuarezruiz in https://github.com/dotnet/maui/pull/27602 +* [Testing] Implement ContextMenu UITest extension methods by @jsuarezruiz in https://github.com/dotnet/maui/pull/26204 +* [Testing] Enabling more UI Tests by removing platform specific condition - 6 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27581 +* [tests] Run tests on x64 only for devices controls by @rmarinho in https://github.com/dotnet/maui/pull/27714 +* [Testing, CI] Increased threshold value to make Resizetizer unit tests pass on arm64 machines by @anandhan-rajagopal in https://github.com/dotnet/maui/pull/27684 +* [Testing] Enabling more UI Tests by removing platform specific condition - 7 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27639 +* [Testing] Implement TapCoordinates Appium action on macOS by @jsuarezruiz in https://github.com/dotnet/maui/pull/27603 +* [Testing] Enabling more UI Tests by removing platform specific condition - 8 by @nivetha-nagalingam in https://github.com/dotnet/maui/pull/27681 +* [Testing] Enabling more UI Tests by removing platform specific condition - 3 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27501 +* [Testing] Fix DragCoordinates Appium action on Mac by @jsuarezruiz in https://github.com/dotnet/maui/pull/27339 +* [Testing] Enabling WebView UITests from Issues folder in Appium by @NafeelaNazhir in https://github.com/dotnet/maui/pull/27284 +* [Testing] Fix flaky test 5 by @jsuarezruiz in https://github.com/dotnet/maui/pull/27733 +* [Testing] Enabling more UI Tests by removing platform specific condition - 1 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27454 +* Add missing screen shot for Issue25502 on MAC by @PureWeen in https://github.com/dotnet/maui/pull/27813 +* [Testing] Enabling ContextMenu UITests from Xamarin.UITests to Appium by @NafeelaNazhir in https://github.com/dotnet/maui/pull/27403 +* Mark VerifyInitialEntryReturnTypeChange and VerifyGraphicsViewWithoutGrayLine tests as flaky by @jfversluis in https://github.com/dotnet/maui/pull/27776 +* [Testing] Fix for flaky UITests in CI that occasionally fail - 2 by @nivetha-nagalingam in https://github.com/dotnet/maui/pull/27878 +* [Testing] Enabling more UI Tests by removing platform specific condition - 5 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27564 +* Update Appium Versions by @PureWeen in https://github.com/dotnet/maui/pull/27933 +* Revert "Update Appium Versions" by @PureWeen in https://github.com/dotnet/maui/pull/27938 +* [Android] Testcase for Shell FlowDirection issue by @Vignesh-SF3580 in https://github.com/dotnet/maui/pull/27931 +* [Testing] Run tests verifying snapshots on mac now that's possible by @jsuarezruiz in https://github.com/dotnet/maui/pull/27893 +* [Testing] More changes in capabilities to adjust Appium timeouts by @jsuarezruiz in https://github.com/dotnet/maui/pull/27675 +* [Testing] Migration of Compatibility.Core platform-specific unit tests into device tests - 1 by @anandhan-rajagopal in https://github.com/dotnet/maui/pull/27695 +* [Testing] Fix flaky tests 6 by @jsuarezruiz in https://github.com/dotnet/maui/pull/27874 +* [Testing] Enabling more UI Tests by removing platform specific condition - 12 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27804 +* [Testing] Enabling more UI Tests by removing platform specific condition - 13 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27904 +* [Testing] Enabling more UI Tests by removing platform specific condition - 4 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27561 +* [Testing] Enable the Issue417 test on iOS and Catalyst by @kubaflo in https://github.com/dotnet/maui/pull/27987 +* [Testing] Enabling more UI Tests by removing platform specific condition - 2 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27500 +* [Testing] Enabling more UI Tests by removing platform specific condition - 14 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27906 +* Fix Android device tests on .NET 10 by @jfversluis in https://github.com/dotnet/maui/pull/28009 +* [Testing] Enabling ContextMenu UITests from Xamarin.UITests to Appium - 2 by @nivetha-nagalingam in https://github.com/dotnet/maui/pull/27405 +* [Testing] Enabling more UI Tests by removing platform specific condition - 9 by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/27743 +* [Testing] Enabling more UI Tests by removing platform specific condition - 10 by @nivetha-nagalingam in https://github.com/dotnet/maui/pull/27751 +* [Testing] Fix for flaky UITests in CI that occasionally fail - 3 by @NafeelaNazhir in https://github.com/dotnet/maui/pull/27905 +* [Testing] Fix for flaky UITests in CI that occasionally fail. by @nivetha-nagalingam in https://github.com/dotnet/maui/pull/27453 +* [Testing] Enabling more UI Tests by removing platform specific condition - 11 by @LogishaSelvarajSF4525 in https://github.com/dotnet/maui/pull/27764 +* [Testing] Feature Matrix UITest Cases for Slider Control by @NafeelaNazhir in https://github.com/dotnet/maui/pull/27433 +* [Testing] Fix flaky UITests 7 by @jsuarezruiz in https://github.com/dotnet/maui/pull/28000 +* [Testing] Implement the option to change system theme on Appium by @jsuarezruiz in https://github.com/dotnet/maui/pull/28025 +* [Testing] Resolved Shell TabBar DeviceTests CI failures on macOS by @anandhan-rajagopal in https://github.com/dotnet/maui/pull/28072 +* [release/10.0.1xx-preview2] [net10.0] Move iOS 18.0 simulators by @github-actions in https://github.com/dotnet/maui/pull/28277 +* [release/10.0.1xx-preview2] [ci] Fix platform for UItests for iOS by @github-actions in https://github.com/dotnet/maui/pull/28345 + + +### Dependency Updates + +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27510 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27540 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27570 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27587 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27615 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27643 +* [main] Update dependencies from dotnet/xharness by @dotnet-maestro in https://github.com/dotnet/maui/pull/27662 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27687 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27719 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27725 +* [Windows] Upgrade Windows App SDK from 1.6.4 to 1.6.5 by @MartyIX in https://github.com/dotnet/maui/pull/27729 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27758 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27791 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27810 +* [main] Update dependencies from dotnet/xharness by @dotnet-maestro in https://github.com/dotnet/maui/pull/27835 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27887 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27902 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27937 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/27960 +* [net10.0] Update aspnet as sdk, enable Blazor tests by @rmarinho in https://github.com/dotnet/maui/pull/27796 +* [net10.0] Update dependencies from dotnet/android by @dotnet-maestro in https://github.com/dotnet/maui/pull/28019 +* [release/10.0.1xx-preview2] Update with final preview2 versions by @rmarinho in https://github.com/dotnet/maui/pull/28231 +* [release/10.0.1xx-preview2] Update preview2 ios android sdk by @rmarinho in https://github.com/dotnet/maui/pull/28287 +* [release/10.0.1xx-preview2] Update sdk and runtime by @rmarinho in https://github.com/dotnet/maui/pull/28307 +* [release/10.0.1xx-preview2] Update dependencies from dotnet/sdk by @dotnet-maestro in https://github.com/dotnet/maui/pull/28329 +* [release/10.0.1xx-preview2] Update dependencies from dotnet/sdk by @dotnet-maestro in https://github.com/dotnet/maui/pull/28390 + + +### Housekeeping + +* [ci] Remove references to sdk-insertions by @pjcollins in https://github.com/dotnet/maui/pull/27480 +* [ci] Fix yaml by @rmarinho in https://github.com/dotnet/maui/pull/27497 +* Fix color checking from blocking and add logging by @PureWeen in https://github.com/dotnet/maui/pull/27400 +* [Localization] Simply Logic for Localization Handoff & Handback by @tj-devel709 in https://github.com/dotnet/maui/pull/27508 +* [ci] Run device tests in any machine by @rmarinho in https://github.com/dotnet/maui/pull/27518 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27504 +* [net10.0] Update net10.0 with main by @rmarinho in https://github.com/dotnet/maui/pull/27539 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27547 +* Removes setting up the JDK in pipelines by @jfversluis in https://github.com/dotnet/maui/pull/27396 +* [Localization] Fix blocking typo by @tj-devel709 in https://github.com/dotnet/maui/pull/27566 +* Localized file check-in by OneLocBuild Task: Build definition ID 13330: Build ID 10953111 by @dotnet-bot in https://github.com/dotnet/maui/pull/27569 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27571 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27621 +* [ci] Update variables for signing and not used by @rmarinho in https://github.com/dotnet/maui/pull/27640 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27645 +* Update android.cake cmdline paths by @PureWeen in https://github.com/dotnet/maui/pull/27686 +* Update Versions.props to .NET 9 SR5 Branding by @PureWeen in https://github.com/dotnet/maui/pull/27691 +* Update comments by @APoukar in https://github.com/dotnet/maui/pull/27658 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27693 +* Update bug-report.yml with 9.0.40 by @PureWeen in https://github.com/dotnet/maui/pull/27723 +* [net10.0] Merge main to net10.0 by @rmarinho in https://github.com/dotnet/maui/pull/27720 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27726 +* Move Microsoft.Maui.Packages.slnf to eng folder by @jfversluis in https://github.com/dotnet/maui/pull/27032 +* Move Microsoft.Maui.Samples.slnf to eng folder by @jfversluis in https://github.com/dotnet/maui/pull/27033 +* Make auto applied labels more relevant for Syncfusion partner team by @jfversluis in https://github.com/dotnet/maui/pull/27295 +* Move Microsoft.Maui.Graphics.slnf to subfolder (clean up repo root) by @jfversluis in https://github.com/dotnet/maui/pull/27035 +* [ci] Builds should only take 2h max by @rmarinho in https://github.com/dotnet/maui/pull/27747 +* Add ISO information to Locale API documentation by @jfversluis in https://github.com/dotnet/maui/pull/27746 +* Delete maui.code-workspace (clean up repo root by @jfversluis in https://github.com/dotnet/maui/pull/27767 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27757 +* [Localization] Add Localization tests and other fixes by @tj-devel709 in https://github.com/dotnet/maui/pull/25620 +* [ci] Update sdk, aspnet and runtime by @rmarinho in https://github.com/dotnet/maui/pull/27790 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27816 +* [ci] Fix dnceng builds by @rmarinho in https://github.com/dotnet/maui/pull/27855 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27863 +* [ci] Update slnf location and arcade by @rmarinho in https://github.com/dotnet/maui/pull/27860 +* Localized file check-in by OneLocBuild Task: Build definition ID 13330: Build ID 11029468 by @dotnet-bot in https://github.com/dotnet/maui/pull/27789 +* [ci] Move to Sequoia machines by @rmarinho in https://github.com/dotnet/maui/pull/27787 +* Update DEVELOPMENT.md with net10.0 by @PureWeen in https://github.com/dotnet/maui/pull/27913 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27918 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27942 +* [ci] Remove conditions for devdiv by @rmarinho in https://github.com/dotnet/maui/pull/27958 +* [net10.0] Merge main to net10 by @rmarinho in https://github.com/dotnet/maui/pull/27967 +* [ci] Move more runs to Sequoia by @rmarinho in https://github.com/dotnet/maui/pull/27972 +* LEGO: Pull request from lego/hb_7241b85a-f216-4d55-a9fa-d8030c736df5_20250219211456120 to main by @csigs in https://github.com/dotnet/maui/pull/27915 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/27986 +* Localized file check-in by OneLocBuild Task: Build definition ID 13330: Build ID 11064473 by @dotnet-bot in https://github.com/dotnet/maui/pull/27982 +* Enable generation of API docs in CI for .NET 10 by @jfversluis in https://github.com/dotnet/maui/pull/28004 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/28021 +* [ci] Publish workload VS insertion zips by @pjcollins in https://github.com/dotnet/maui/pull/28016 +* Update DEVELOPMENT.md to clarify .NET SDK version needed by @jfversluis in https://github.com/dotnet/maui/pull/28031 +* [ci] Remove usage on cake script by @rmarinho in https://github.com/dotnet/maui/pull/28037 +* [ci] Update autoformat prs version by @rmarinho in https://github.com/dotnet/maui/pull/28042 +* [ci] Last move sequoia by @rmarinho in https://github.com/dotnet/maui/pull/28029 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/28045 +* [ci] Run provisionator devdiv by @rmarinho in https://github.com/dotnet/maui/pull/28056 +* Revert "[ci] Run provisionator devdiv" by @rmarinho in https://github.com/dotnet/maui/pull/28079 +* [housekeeping] Automated PR to fix formatting errors by @github-actions in https://github.com/dotnet/maui/pull/28068 +* [code style] Prefer file-scope namespaces by @MartyIX in https://github.com/dotnet/maui/pull/28040 +* [net10.0] Merge main to net10.0 by @rmarinho in https://github.com/dotnet/maui/pull/28044 +* [iOS] Ignore for now obsoletes on iOS by @rmarinho in https://github.com/dotnet/maui/pull/28136 + + +## New Contributors +* @Ahamed-Ali made their first contribution in https://github.com/dotnet/maui/pull/27273 +* @KarthikRajaKalaimani made their first contribution in https://github.com/dotnet/maui/pull/27466 +* @rabuckley made their first contribution in https://github.com/dotnet/maui/pull/27655 +* @Zerod159 made their first contribution in https://github.com/dotnet/maui/pull/24798 +* @sthewissen made their first contribution in https://github.com/dotnet/maui/pull/27529 +* @APoukar made their first contribution in https://github.com/dotnet/maui/pull/27658 +* @piersdeseilligny made their first contribution in https://github.com/dotnet/maui/pull/23984 +* @Shalini-Ashokan made their first contribution in https://github.com/dotnet/maui/pull/27464 +* @bhavanesh2001 made their first contribution in https://github.com/dotnet/maui/pull/27718 +* @Dhivya-SF4094 made their first contribution in https://github.com/dotnet/maui/pull/27451 +* @mohsenbgi made their first contribution in https://github.com/dotnet/maui/pull/23473 + +**Full Changelog**: https://github.com/dotnet/maui/compare/{branch}..{previous branch} \ No newline at end of file diff --git a/.github/workflows/add-remove-label-check-suites.yml b/.github/workflows/add-remove-label-check-suites.yml new file mode 100644 index 000000000000..444bac6e6fe5 --- /dev/null +++ b/.github/workflows/add-remove-label-check-suites.yml @@ -0,0 +1,73 @@ +# When all check suites are completed successfully, the workflow adds a label to the pull request. +# When a new check suite is requested (or rerequested), the workflow removes the label from the pull request. +name: Manage Label on Check Suites + +on: + check_suite: + types: [completed, requested, rerequested] + +jobs: + add-label: + if: github.event.action == 'completed' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Check if all check suites are successful + id: check_suites + uses: actions/github-script@v6 + with: + script: | + const { data: checkSuites } = await github.checks.listSuitesForRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: context.payload.check_suite.head_sha, + }); + + const allSuccessful = checkSuites.check_suites.every( + suite => suite.conclusion === 'success' || suite.conclusion === 'skipped'); + + if (allSuccessful) { + return { success: true }; + } else { + return { success: false }; + } + + - name: Add label if all check suites are successful + if: steps.check_suites.outputs.success == 'true' + uses: actions/github-script@v6 + with: + script: | + const pullRequest = context.payload.check_suite.pull_requests[0]; + if (pullRequest) { + github.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pullRequest.number, + labels: 'all-checks-passed', + }); + } + + remove-label: + if: github.event.action == 'requested' || github.event.action == 'rerequested' + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Remove label when check suite is triggered or re-requested + uses: actions/github-script@v6 + with: + script: | + const pullRequest = context.payload.check_suite.pull_requests[0]; + if (pullRequest) { + github.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pullRequest.number, + name: 'all-checks-passed', + }); + } \ No newline at end of file diff --git a/.github/workflows/dotnet-autoformat-pr-push.yml b/.github/workflows/dotnet-autoformat-pr-push.yml index 6730e30e8ec9..37545d6f8d06 100644 --- a/.github/workflows/dotnet-autoformat-pr-push.yml +++ b/.github/workflows/dotnet-autoformat-pr-push.yml @@ -18,7 +18,7 @@ jobs: github.event.workflow_run.conclusion == 'success' steps: - name: 'Push autoformatted patch' - uses: rolfbjarne/autoformat-push@v0.2 + uses: rolfbjarne/autoformat-push@v0.5 with: githubToken: ${{ secrets.GITHUB_TOKEN }} commentContents: 'Thank you for your pull request. We are auto-formatting your source code to follow our code guidelines.' diff --git a/.github/workflows/dotnet-autoformat-pr.yml b/.github/workflows/dotnet-autoformat-pr.yml index dcb055c50335..40ea9cb49d1c 100644 --- a/.github/workflows/dotnet-autoformat-pr.yml +++ b/.github/workflows/dotnet-autoformat-pr.yml @@ -12,7 +12,7 @@ jobs: steps: - name: 'Autoformat' - uses: rolfbjarne/autoformat@v0.2 + uses: rolfbjarne/autoformat@v0.5 with: script: 'dotnet format Microsoft.Maui.sln --no-restore --exclude Templates/src BlazorWebView/src/SharedSource/BlazorWebViewDeveloperTools.cs BlazorWebView/src/SharedSource/BlazorWebViewServiceCollectionExtensions.cs Graphics/src/Graphics.Win2D/W2DCanvas.cs Graphics/src/Graphics.Win2D/W2DExtensions.cs' onlyFilesModifiedInPullRequest: true diff --git a/.github/workflows/dotnet-format-daily-main.yml b/.github/workflows/dotnet-format-daily-main.yml deleted file mode 100644 index 70074015c77b..000000000000 --- a/.github/workflows/dotnet-format-daily-main.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: Daily code format check -on: - workflow_dispatch: - schedule: - - cron: 0 0 * * * # Every day at midnight (UTC) - -permissions: - pull-requests: write - contents: write - -jobs: - dotnet-format: - runs-on: windows-latest - steps: - - name: Checkout repo - uses: actions/checkout@v2 - with: - ref: main - - - name: Setup .NET Core SDK - uses: actions/setup-dotnet@v3.2.0 - with: - dotnet-version: 8.x - - - name: Run dotnet format - run: dotnet format .\Microsoft.Maui.sln --no-restore --exclude Templates/src BlazorWebView/src/SharedSource/BlazorWebViewDeveloperTools.cs BlazorWebView/src/SharedSource/BlazorWebViewServiceCollectionExtensions.cs Graphics/src/Graphics.Win2D/W2DCanvas.cs Graphics/src/Graphics.Win2D/W2DExtensions.cs - - - name: Commit files - if: steps.format.outputs.has-changes == 'true' - run: | - git config --local user.name "github-actions[bot]" - git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git commit -a -m 'Automated dotnet-format update' - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v3 - with: - title: '[housekeeping] Automated PR to fix formatting errors' - body: | - Automated PR to fix formatting errors - committer: GitHub - author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> - labels: | - t/housekeeping ♻︎ - area/infrastructure 🏗️ - assignees: rmarinho, jsuarezruiz - reviewers: rmarinho, jsuarezruiz - branch: housekeeping/fix-codeformatting - base: main diff --git a/.github/workflows/dotnet-format-daily.yml b/.github/workflows/dotnet-format-daily.yml new file mode 100644 index 000000000000..4fa5b1ca2fd7 --- /dev/null +++ b/.github/workflows/dotnet-format-daily.yml @@ -0,0 +1,45 @@ +name: Format Branch Code +on: + workflow_dispatch: + schedule: + - cron: 0 0 * * * # Every day at midnight (UTC) + +permissions: + pull-requests: write + contents: write + +jobs: + dotnet-format: + runs-on: windows-latest + strategy: + matrix: + branch: [ main, net10.0, inflight/current ] + steps: + - name: Checkout repo + uses: actions/checkout@v2 + with: + ref: ${{ matrix.branch }} + + - name: Setup .NET Core SDK + uses: actions/setup-dotnet@v3.2.0 + with: + dotnet-version: 8.x + + - name: Run dotnet format + run: dotnet format .\Microsoft.Maui.sln --no-restore --exclude Templates/src --exclude-diagnostics CA1822 + + - name: Create Pull Request + uses: dotnet/actions-create-pull-request@v4 + with: + title: '[housekeeping] Automated PR to fix formatting errors on ${{ matrix.branch }}' + body: | + Automated PR to fix formatting errors + committer: GitHub + author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> + labels: | + t/housekeeping ♻︎ + area-infrastructure + assignees: rmarinho, jsuarezruiz + reviewers: rmarinho, jsuarezruiz + branch: housekeeping/fix-codeformatting/${{ matrix.branch }} + base: ${{ matrix.branch }} diff --git a/.github/workflows/dotnet-format-pr.yml b/.github/workflows/dotnet-format-pr.yml new file mode 100644 index 000000000000..9229befd6965 --- /dev/null +++ b/.github/workflows/dotnet-format-pr.yml @@ -0,0 +1,41 @@ +name: Format PR Code +on: + pull_request + +permissions: + pull-requests: write + contents: write + +jobs: + dotnet-format: + runs-on: windows-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + fetch-depth: 0 + + - name: Setup .NET Core SDK + uses: actions/setup-dotnet@v3.2.0 + with: + dotnet-version: 8.x + + - name: Run dotnet format + run: | + dotnet format .\Microsoft.Maui.sln --no-restore --exclude Templates/src --exclude-diagnostics CA1822 + git diff + + - name: Commit changes + run: | + git config --local user.name "github-actions[bot]" + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com>" + git add . + git commit -m "[housekeeping] Automated PR to fix formatting errors on ${{ github.head_ref }}" + + - name: Push changes to PR + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git push origin HEAD:${{ github.event.pull_request.head.ref }} diff --git a/.github/workflows/inclusive-heat-sensor.yml b/.github/workflows/inclusive-heat-sensor.yml new file mode 100644 index 000000000000..26664076b285 --- /dev/null +++ b/.github/workflows/inclusive-heat-sensor.yml @@ -0,0 +1,22 @@ +name: Inclusive Heat Sensor +on: + issues: + types: [opened, reopened] + issue_comment: + types: [created, edited] + pull_request_review_comment: + types: [created, edited] + +permissions: + contents: read + issues: write + pull-requests: write + +jobs: + detect-heat: + uses: jonathanpeppers/inclusive-heat-sensor/.github/workflows/comments.yml@v0.1.2 + secrets: inherit + with: + minimizeComment: true + offensiveThreshold: 9 + angerThreshold: 9 diff --git a/.github/workflows/locker.yml b/.github/workflows/locker.yml index 0e7b77151016..3cf63182334d 100644 --- a/.github/workflows/locker.yml +++ b/.github/workflows/locker.yml @@ -20,13 +20,14 @@ permissions: jobs: main: runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'dotnet' }} steps: - name: Checkout Actions uses: actions/checkout@v4 with: repository: "microsoft/vscode-github-triage-actions" path: ./actions - ref: cd16cd2aad6ba2da74bb6c6f7293adddd579a90e # locker action commit sha + ref: 066bee9cefa6f0b4bf306040ff36fc7d96a6d56d # locker action commit sha - name: Install Actions run: npm install --production --prefix ./actions - name: Run Locker diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml index 0c91ca28ae81..741b364a8436 100644 --- a/.github/workflows/rebase.yml +++ b/.github/workflows/rebase.yml @@ -20,7 +20,7 @@ jobs: ) steps: - name: Checkout the latest code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 # otherwise, you will fail to push refs to dest repo diff --git a/.github/workflows/sdk-insertion-bump.yml b/.github/workflows/sdk-insertion-bump.yml deleted file mode 100644 index befd33f952db..000000000000 --- a/.github/workflows/sdk-insertion-bump.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Notify release branch change - -on: - # trigger for main and release branches. - push: - branches: - - main - - net8.0 - - 'release/**' - workflow_dispatch: - inputs: - brach: - description: 'The dotnet maui branch the contains the commit.' - required: true - type: string - commit: - description: 'The hash to be used to bump the sdk insertion.' - required: true - type: string - commit_title: - description: 'The commit title to be used for the bump.' - required: true - type: string - -jobs: - pingRemote: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - # because we want to be able to execute the action manually, we need diff steps - # depending on the event that triggered the action. If we are executing the event - # manually we want to parse the given data and add it to the variables, els we just - # copy what we got from the push - - # if manual trigger - - - name: 'Update remote repository from manual trigger' - uses: peter-evans/repository-dispatch@v2 - if: ${{ github.event_name == 'workflow_dispatch' }} - with: - token: ${{ secrets.MEGAPIPELINE_PAT }} - event-type: 'sdk_insertion' - repository: 'xamarin/sdk-insertions' - client-payload: '{"repository": "dotnet/maui", "branch": "${{ inputs.branch }}", "commit": "${{ inputs.commit }}", "commit_message": "${{ inputs.commit_title }}"}' - - # if push event - - - name: Parse commit - shell: pwsh - id: commit_title - if: ${{ github.event_name == 'push' }} - run: | - Write-Host "Commit message is $Env:COMMIT_MESSAGE" - $title = ($Env:COMMIT_MESSAGE -split '\n')[0] | ConvertTo-Json - "COMMIT_TITLE=$title" >> $env:GITHUB_OUTPUT - env: - COMMIT_MESSAGE: "${{ github.event.head_commit.message }}" - - - name: 'Update remote repository from push event' - uses: peter-evans/repository-dispatch@v2 - if: ${{ github.event_name == 'push' }} - with: - token: ${{ secrets.MEGAPIPELINE_PAT }} - event-type: 'sdk_insertion' - repository: 'xamarin/sdk-insertions' - client-payload: '{"repository": "dotnet/maui", "branch": "${{ github.ref_name }}", "commit": "${{ github.sha }}", "commit_message": ${{ steps.commit_title.outputs.COMMIT_TITLE }} }' - - diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index b8d072bbf061..061ec5f195ae 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -25,5 +25,5 @@ jobs: node-version: "18" - run: npm install -g cspell name: Install cSpell - - run: cspell --config ./cSpell.json "docs/**/*.md" --no-progress + - run: cspell --config ./eng/automation/cspell/cSpell.json "docs/**/*.md" --no-progress name: Run cSpell diff --git a/.gitignore b/.gitignore index 69887dd81422..8f457824a432 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ templatesTest/ *.user *.userosscache *.sln.docstates +/src/Controls/tests/TestCases.HostApp/MauiProgram.user.cs # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs @@ -376,3 +377,10 @@ Directory.Build.Override.props # Only the "snapshots" directory should be added to Git, not the "snapshots-diff" directory snapshots-diff/ + +#install of dotnet version +/.dotnet +.dotnet +temp +.packages +/src/Templates/.tempTemplateOutput diff --git a/.vscode/.launch.json b/.vscode/.launch.json new file mode 100644 index 000000000000..bb5a49b8dc8f --- /dev/null +++ b/.vscode/.launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Process", + "type": "coreclr", + "request": "attach", + "processId": "${input:processid}" + } + ], + "inputs": [ + { + "id": "processid", + "type": "promptString", + "default": "0", + "description": "Enter dotnet build process id reported when setting the env var MSBUILDDEBUGONSTART=2", + } + ] +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 4930f5b8a0c4..45d0d17ffd51 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,7 @@ { "recommendations": [ - "ms-dotnettools.csharp", - "ms-vscode.mono-debug", - "visualstudioexptteam.vscodeintellicode", + "ms-dotnettools.vscodeintellicode-csharp", + "ms-dotnettools.dotnet-maui", + "github.copilot-chat" ] } \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index a83c6d52840e..000000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": ".NET MAUI", - "type": "maui", - "request": "launch", - "preLaunchTask": "maui: Build" - }, - { - "name": "Attach to Process", - "type": "coreclr", - "request": "attach", - "processId": "${input:processid}" - } - ], - "inputs": [ - { - "id": "processid", - "type": "promptString", - "default": "0", - "description": "Enter dotnet build process id reported when setting the env var MSBUILDDEBUGONSTART=2", - } - ] -} diff --git a/.vscode/mcp.json b/.vscode/mcp.json new file mode 100644 index 000000000000..0273b732a393 --- /dev/null +++ b/.vscode/mcp.json @@ -0,0 +1,26 @@ +{ + "inputs": [ + { + "type": "promptString", + "id": "github-key", + "password": true, // Encrypted at-rest + "description": "GitHub PAT" + } + ], + "servers": { + "github": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "GITHUB_PERSONAL_ACCESS_TOKEN", + "ghcr.io/github/github-mcp-server" + ], + "env": { + "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github-key}" + } + } + } +} \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 5ce21d045967..29574ffd89a2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,18 +1,71 @@ - + + + + + true + portable + true + Latest + true + false + $(MSBuildThisFileDirectory) + $(MSBuildThisFileDirectory)src/ + false + false + false + - <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">8 + + $(CopyrightNetFoundation) + Microsoft + Microsoft .NET MAUI + MIT + Microsoft + en + https://github.com/dotnet/maui.git + git + https://github.com/dotnet/maui + True + © Microsoft Corporation. All rights reserved. + $(MauiRootDirectory)artifacts + $(MauiRootDirectory)LICENSE.TXT + $(MauiRootDirectory)Assets\icon.png + $(MauiRootDirectory)THIRD-PARTY-NOTICES.TXT + dotnet-maui;dotnet;maui;cross-platform;ios;android;macos;maccatalyst;windows;winui;tizen + true + true + true + + + + all + moderate + false + + + + <_MauiDotNetVersionMajor Condition="'$(_MauiDotNetVersionMajor)' == ''">9 <_MauiDotNetVersionMinor Condition="'$(_MauiDotNetVersionMinor)' == ''">0 <_MauiDotNetVersion Condition="'$(_MauiDotNetVersion)' == ''">$(_MauiDotNetVersionMajor).$(_MauiDotNetVersionMinor) <_MauiDotNetTfm Condition="'$(_MauiDotNetTfm)' == ''">net$(_MauiDotNetVersion) - - <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">7 + + <_MauiPreviousDotNetVersionMajor Condition="'$(_MauiPreviousDotNetVersionMajor)' == ''">8 <_MauiPreviousDotNetVersionMinor Condition="'$(_MauiPreviousDotNetVersionMinor)' == ''">0 <_MauiPreviousDotNetVersion Condition="'$(_MauiPreviousDotNetVersion)' == ''">$(_MauiPreviousDotNetVersionMajor).$(_MauiPreviousDotNetVersionMinor) <_MauiPreviousDotNetVersionNoDot Condition="'$(_MauiPreviousDotNetVersionNoDot)' == ''">$(_MauiPreviousDotNetVersionMajor)$(_MauiPreviousDotNetVersionMinor) <_MauiPreviousDotNetTfm Condition="'$(_MauiPreviousDotNetTfm)' == ''">net$(_MauiPreviousDotNetVersion) + + <_MauiMinimumSupportedDotNetTfm>$(_MauiDotNetVersion) + <_MauiMinimumSupportedDotNetTfm Condition="'$(IncludePreviousTfms)' == 'true'">$(_MauiPreviousDotNetVersion) + + + $(_MauiDotNetVersion).0 + + $(_MauiPreviousDotNetVersion).0 + <_MauiTargetPlatformIdentifier>$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) <_MauiNoTargetPlatform>false <_MauiNoTargetPlatform Condition="'$(_MauiTargetPlatformIdentifier)' == ''">True @@ -62,19 +115,21 @@ - + true + true - true + true true - true - true + true + true $(DefineConstants);WINDOWS $(DefineConstants);COMPATIBILITY_ENABLED - snupkg + $(DefineConstants);ENABLE_PREVIOUS_TFM_BUILDS + true @@ -82,56 +137,98 @@ true + + + 10.0.19041.44 + + - 13.6 - 13.6 - 13.5 - 10.14 - 30.0 + + 18.0 + 18.0 + 18.0 + 15.0 + 35.0 + + 18.0 + 18.0 + 18.0 + 15.0 + 35.0 10.0.19041.0 10.0.20348.0 - 6.5 + 7.0 + + 17.5 + 17.5 + 17.5 + 14.5 + 35.0 + 10.0.19041.0 + 10.0.20348.0 + 7.0 + + 10.0.17763.0 - + net$(_MauiDotNetVersion)-windows$(WindowsTargetFrameworkVersion);net$(_MauiDotNetVersion)-windows$(Windows2TargetFrameworkVersion) - - net$(_MauiDotNetVersion)-tizen;$(MauiPlatforms) + net$(_MauiDotNetVersion)-tizen$(TizenTargetFrameworkVersion);$(MauiPlatforms) $(WindowsMauiPlatforms);$(MauiPlatforms) - net$(_MauiDotNetVersion)-android;$(MauiPlatforms) - net$(_MauiDotNetVersion)-maccatalyst;$(MauiPlatforms) - net$(_MauiDotNetVersion)-ios;$(MauiPlatforms) + net$(_MauiDotNetVersion)-android$(AndroidTargetFrameworkVersion);$(MauiPlatforms) + net$(_MauiDotNetVersion)-android;$(MauiPlatforms) + net$(_MauiDotNetVersion)-maccatalyst$(MacCatalystTargetFrameworkVersion);$(MauiPlatforms) + net$(_MauiDotNetVersion)-maccatalyst;$(MauiPlatforms) + net$(_MauiDotNetVersion)-ios$(IosTargetFrameworkVersion);$(MauiPlatforms) + net$(_MauiDotNetVersion)-ios;$(MauiPlatforms) - net$(_MauiPreviousDotNetVersion)-windows$(WindowsTargetFrameworkVersion);net$(_MauiPreviousDotNetVersion)-windows$(Windows2TargetFrameworkVersion) - net$(_MauiPreviousDotNetVersion)-tizen;$(MauiPreviousPlatforms) + + net$(_MauiPreviousDotNetVersion)-windows$(WindowsPreviousTargetFrameworkVersion);net$(_MauiPreviousDotNetVersion)-windows$(Windows2PreviousTargetFrameworkVersion) + net$(_MauiPreviousDotNetVersion)-tizen$(TizenPreviousTargetFrameworkVersion);$(MauiPreviousPlatforms) $(WindowsMauiPreviousPlatforms);$(MauiPreviousPlatforms) - net$(_MauiPreviousDotNetVersion)-android;$(MauiPreviousPlatforms) - net$(_MauiPreviousDotNetVersion)-maccatalyst;$(MauiPreviousPlatforms) - net$(_MauiPreviousDotNetVersion)-ios;$(MauiPreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-android$(AndroidPreviousTargetFrameworkVersion);$(MauiPreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-maccatalyst$(MacCatalystPreviousTargetFrameworkVersion);$(MauiPreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-ios$(IosPreviousTargetFrameworkVersion);$(MauiPreviousPlatforms) + + + net$(_MauiDotNetVersion)-tizen;$(MauiSamplePlatforms) + $(WindowsMauiPlatforms);$(MauiSamplePlatforms) + net$(_MauiDotNetVersion)-android;$(MauiSamplePlatforms) + net$(_MauiDotNetVersion)-maccatalyst;$(MauiSamplePlatforms) + net$(_MauiDotNetVersion)-ios;$(MauiSamplePlatforms) + net$(_MauiPreviousDotNetVersion)-tizen;$(MauiSamplePreviousPlatforms) + $(WindowsMauiPreviousPlatforms);$(MauiSamplePreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-android;$(MauiSamplePreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-maccatalyst;$(MauiSamplePreviousPlatforms) + net$(_MauiPreviousDotNetVersion)-ios;$(MauiSamplePreviousPlatforms) - + $(WindowsMauiPlatforms);$(MauiDeviceTestsPlatforms) net$(_MauiDotNetVersion)-android;$(MauiDeviceTestsPlatforms) net$(_MauiDotNetVersion)-maccatalyst;$(MauiDeviceTestsPlatforms) net$(_MauiDotNetVersion)-ios;$(MauiDeviceTestsPlatforms) - + + $(WindowsMauiPlatforms);$(MauiEmbeddingPlatforms) + net$(_MauiDotNetVersion)-android;$(MauiEmbeddingPlatforms) + net$(_MauiDotNetVersion)-maccatalyst;$(MauiEmbeddingPlatforms) + net$(_MauiDotNetVersion)-ios;$(MauiEmbeddingPlatforms) + + $(MauiPlatforms) - $(MauiGraphicsPlatforms);net$(_MauiDotNetVersion)-macos + $(MauiGraphicsPlatforms);net$(_MauiDotNetVersion)-macos$(MacosTargetFrameworkVersion) + $(MauiPreviousPlatforms) - $(MauiGraphicsPreviousPlatforms);net$(_MauiPreviousDotNetVersion)-macos + $(MauiGraphicsPreviousPlatforms);net$(_MauiPreviousDotNetVersion)-macos$(MacosPreviousTargetFrameworkVersion) - $(MSBuildThisFileDirectory) - $(MSBuildThisFileDirectory)src/ - $(MSBuildThisFileDirectory)bin/ - $(DotNetOutputPath)temp/ - $(DotNetOutputPath)dotnet/ + $(RepoRoot)temp/ + $(RepoRoot).dotnet/ $(DotNetDirectory)dotnet $(DotNetDirectory)packs/ $(DotNetDirectory)library-packs/ @@ -141,43 +238,12 @@ <_MauiBuildTasksLocation Condition="'$(_MauiBuildTasksLocation)' == ''">$(MSBuildThisFileDirectory).buildtasks\ <_MauiAOTProfileLocation>$(MauiSrcDirectory)Controls\src\Build.Tasks\nuget\buildTransitive\netstandard2.0\ $(MauiRootDirectory)eng/microsoft.maui.controls.snk - true - portable - true - true - true $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - Microsoft - Microsoft MAUI True True false - - main - - - - MIT - Microsoft - en - https://github.com/dotnet/maui.git - git - https://github.com/dotnet/maui - True - © Microsoft Corporation. All rights reserved. - $(DotNetVersionBand)-dev - $(MSBuildThisFileDirectory)artifacts - $(MSBuildThisFileDirectory)LICENSE.TXT - $(MSBuildThisFileDirectory)Assets\icon.png - $(MSBuildThisFileDirectory)THIRD-PARTY-NOTICES.TXT - dotnet-maui;dotnet;maui;cross-platform;ios;android;macos;maccatalyst;windows;winui;tizen - true - - - - - + diff --git a/Directory.Build.targets b/Directory.Build.targets index 2224ef7b3fd5..cdfa0ed38f55 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,21 +1,38 @@ - - - + + + + + + + + - + True + + + + $(NoWarn);MSB4011;NETSDK1206 + + - 11.0 - 11.0 + 13.0 + 13.0 $(NoWarn);CA1416 @@ -26,14 +43,14 @@ $(NoWarn);CA1416 - 13.1 - 13.1 + 15.0 + 15.0 $(NoWarn);CA1416 - 10.14 - 10.14 + 12.0 + 12.0 21.0 @@ -44,8 +61,8 @@ 6.5 - @@ -54,7 +71,7 @@ 10.0.17763.0 - @@ -68,9 +85,9 @@ - - - + + + $(DefaultPackageTags) - $([System.IO.Path]::GetFileName('$(PackageIconFile)')) _MauiPackReadmeFile; $(GenerateNuspecDependsOn); @@ -94,9 +110,6 @@ - diff --git a/GitInfo.txt b/GitInfo.txt deleted file mode 100644 index 89f7b489a1eb..000000000000 --- a/GitInfo.txt +++ /dev/null @@ -1 +0,0 @@ -8.0.40-ci.net8 diff --git a/Microsoft.Maui-dev.sln b/Microsoft.Maui-dev.sln index c38c4fe99ab0..537ab42bd738 100644 --- a/Microsoft.Maui-dev.sln +++ b/Microsoft.Maui-dev.sln @@ -135,6 +135,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedSource", "SharedSource", "{4F2926C8-43AB-4328-A735-D9EAD699F81D}" ProjectSection(SolutionItems) = preProject src\BlazorWebView\src\SharedSource\AutoCloseOnReadCompleteStream.cs = src\BlazorWebView\src\SharedSource\AutoCloseOnReadCompleteStream.cs + src\BlazorWebView\src\SharedSource\HostAddressHelper.cs = src\BlazorWebView\src\SharedSource\HostAddressHelper.cs src\BlazorWebView\src\SharedSource\QueryStringHelper.cs = src\BlazorWebView\src\SharedSource\QueryStringHelper.cs src\BlazorWebView\src\SharedSource\UrlLoadingEventArgs.cs = src\BlazorWebView\src\SharedSource\UrlLoadingEventArgs.cs src\BlazorWebView\src\SharedSource\UrlLoadingStrategy.cs = src\BlazorWebView\src\SharedSource\UrlLoadingStrategy.cs @@ -203,47 +204,41 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.Int EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.AppiumTests", "src\Controls\tests\UITests\Controls.AppiumTests.csproj", "{2A0CB35C-ED05-4FCB-91BC-21B288B749B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Sample.UITests", "src\Controls\samples\Controls.Sample.UITests\Controls.Sample.UITests.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationTests", "src\TestUtils\src\Microsoft.Maui.IntegrationTests\Microsoft.Maui.IntegrationTests.csproj", "{A6976D43-B3A4-47AF-89D9-FA388B56B52B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compatibility", "Compatibility", "{0AF0E771-4E09-4F05-B187-B43A2B9F62B0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{DA908446-C6A1-473C-BF5C-83E600F5C69E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9B37E707-EE0B-480E-AEB9-0176784879BE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CBC63DBF-892C-4F03-890E-D48F25509CC6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{8F7B825D-24A8-4E09-AC5B-9117926B7BF3}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.ControlGallery.Issues.Shared", "src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.shproj", "{AE2513CB-4E5E-4E5C-8237-88954D4C9433}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{26379D0E-4D4D-48CA-94B1-A2C1972AB335}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core.csproj", "{7A28BAB3-4396-415F-8473-2700027E57A7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{A307B624-48D4-494E-A70D-5B3CDF6620CF}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android", "src\Compatibility\ControlGallery\src\Android\Compatibility.ControlGallery.Android.csproj", "{36664529-91C2-49A5-BFDA-7D663FB19BC5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGen.UnitTests", "src\Controls\tests\SourceGen.UnitTests\SourceGen.UnitTests.csproj", "{06747B55-91DB-47F5-B7A2-56526C28A0D3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS", "src\Compatibility\ControlGallery\src\iOS\Compatibility.ControlGallery.iOS.csproj", "{137B044D-31C4-4CF2-AB66-97C516AB8393}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{054C5BAC-3671-4F76-B32E-47CF4E64BB39}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.WinUI", "src\Compatibility\ControlGallery\src\WinUI\Compatibility.ControlGallery.WinUI.csproj", "{0BECADBB-8EE4-4C73-8341-30B041CFD4B8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Core.UnitTests", "src\Compatibility\Core\tests\Compatibility.UnitTests\Compatibility.Core.UnitTests.csproj", "{1D950CD3-6778-4729-B6D9-446088093F34}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.UITests.Shared", "src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.Shared.shproj", "{E175485B-3C8C-47D7-8DD5-F7FED627EB25}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Shared.Tests", "src\Controls\tests\TestCases.Shared.Tests\Controls.TestCases.Shared.Tests.csproj", "{C450F8F4-C40F-4C15-978F-F43BA7DEA29D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android.UITests", "src\Compatibility\ControlGallery\test\Android.UITests\Compatibility.ControlGallery.Android.UITests.csproj", "{2E41CBBF-999A-40F1-BF65-EA68585CA070}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Android.Tests", "src\Controls\tests\TestCases.Android.Tests\Controls.TestCases.Android.Tests.csproj", "{7042E8FF-472F-4CB5-8AAE-DAD87BA32207}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS.UITests", "src\Compatibility\ControlGallery\test\iOS.UITests\Compatibility.ControlGallery.iOS.UITests.csproj", "{306C0B6E-B797-40A0-994C-4F923E91F31B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.iOS.Tests", "src\Controls\tests\TestCases.iOS.Tests\Controls.TestCases.iOS.Tests.csproj", "{5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinUI.UITests", "src\Compatibility\ControlGallery\test\WinUI.UITests\WinUI.UITests.csproj", "{B111C308-8B8B-4679-A229-39F80013D51E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Mac.Tests", "src\Controls\tests\TestCases.Mac.Tests\Controls.TestCases.Mac.Tests.csproj", "{6E1ADE49-680E-4CA3-8FEA-6450802F8250}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{8F7B825D-24A8-4E09-AC5B-9117926B7BF3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.WinUI.Tests", "src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj", "{A3E22F99-F380-4005-8483-3ACA6C104220}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{26379D0E-4D4D-48CA-94B1-A2C1972AB335}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen", "src\Controls\src\BindingSourceGen\Controls.BindingSourceGen.csproj", "{9538341F-8A00-4356-A2B2-5C2959979F22}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{A307B624-48D4-494E-A70D-5B3CDF6620CF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen.UnitTests", "src\Controls\tests\BindingSourceGen.UnitTests\Controls.BindingSourceGen.UnitTests.csproj", "{23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.SourceGen.UnitTests", "src\Controls\tests\SourceGen.UnitTests\Controls.SourceGen.UnitTests\Controls.SourceGen.UnitTests.csproj", "{06747B55-91DB-47F5-B7A2-56526C28A0D3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Analyzers", "src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj", "{55905937-1399-46DB-BA38-E426801CB759}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGen.UnitTests", "src\Controls\tests\SourceGen.UnitTests\SourceGen.UnitTests.csproj", "{BC7F7C82-694F-4B97-86FC-273FB3FACA25}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Embedding", "src\Controls\samples\Controls.Sample.Embedding\Maui.Controls.Sample.Embedding.csproj", "{4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -555,10 +550,6 @@ Global {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.Build.0 = Release|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Release|Any CPU.Build.0 = Release|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Build.0 = Debug|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -568,40 +559,6 @@ Global {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.Build.0 = Release|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.Build.0 = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Build.0 = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Deploy.0 = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Build.0 = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.ActiveCfg = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Build.0 = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.Build.0 = Release|Any CPU - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.Build.0 = Release|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.Build.0 = Release|Any CPU - {B111C308-8B8B-4679-A229-39F80013D51E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B111C308-8B8B-4679-A229-39F80013D51E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B111C308-8B8B-4679-A229-39F80013D51E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B111C308-8B8B-4679-A229-39F80013D51E}.Release|Any CPU.Build.0 = Release|Any CPU {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -618,10 +575,48 @@ Global {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Release|Any CPU.Build.0 = Release|Any CPU - {BC7F7C82-694F-4B97-86FC-273FB3FACA25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC7F7C82-694F-4B97-86FC-273FB3FACA25}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC7F7C82-694F-4B97-86FC-273FB3FACA25}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC7F7C82-694F-4B97-86FC-273FB3FACA25}.Release|Any CPU.Build.0 = Release|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Release|Any CPU.Build.0 = Release|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Release|Any CPU.Build.0 = Release|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Release|Any CPU.Build.0 = Release|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Release|Any CPU.Build.0 = Release|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Release|Any CPU.Build.0 = Release|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Release|Any CPU.Build.0 = Release|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Release|Any CPU.Build.0 = Release|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Release|Any CPU.Build.0 = Release|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -715,39 +710,25 @@ Global {B5F38A9E-1949-4779-8739-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {B5F38A9E-1949-4779-6666-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {FB39FACE-BAF2-4F97-A249-E45BA63D77FE} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {07C26A25-08C2-4C52-9574-1C33EC8E7919} = {E1082E26-D700-4127-9329-66D673FD2D55} + {07C26A25-08C2-4C52-9574-1C33EC8E7919} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {A6976D43-B3A4-47AF-89D9-FA388B56B52B} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} - {DA908446-C6A1-473C-BF5C-83E600F5C69E} = {0AF0E771-4E09-4F05-B187-B43A2B9F62B0} - {9B37E707-EE0B-480E-AEB9-0176784879BE} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} - {CBC63DBF-892C-4F03-890E-D48F25509CC6} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} - {AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {7A28BAB3-4396-415F-8473-2700027E57A7} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {36664529-91C2-49A5-BFDA-7D663FB19BC5} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {137B044D-31C4-4CF2-AB66-97C516AB8393} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {0BECADBB-8EE4-4C73-8341-30B041CFD4B8} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} - {2E41CBBF-999A-40F1-BF65-EA68585CA070} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} - {306C0B6E-B797-40A0-994C-4F923E91F31B} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} - {B111C308-8B8B-4679-A229-39F80013D51E} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} {8F7B825D-24A8-4E09-AC5B-9117926B7BF3} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {26379D0E-4D4D-48CA-94B1-A2C1972AB335} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {A307B624-48D4-494E-A70D-5B3CDF6620CF} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {06747B55-91DB-47F5-B7A2-56526C28A0D3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {BC7F7C82-694F-4B97-86FC-273FB3FACA25} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {054C5BAC-3671-4F76-B32E-47CF4E64BB39} = {0AF0E771-4E09-4F05-B187-B43A2B9F62B0} + {1D950CD3-6778-4729-B6D9-446088093F34} = {054C5BAC-3671-4F76-B32E-47CF4E64BB39} + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {6E1ADE49-680E-4CA3-8FEA-6450802F8250} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {A3E22F99-F380-4005-8483-3ACA6C104220} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {9538341F-8A00-4356-A2B2-5C2959979F22} = {50C758FE-4E10-409A-94F5-A75480960864} + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {55905937-1399-46DB-BA38-E426801CB759} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9} = {E1082E26-D700-4127-9329-66D673FD2D55} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50} EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{7a28bab3-4396-415f-8473-2700027e57a7}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{ae2513cb-4e5e-4e5c-8237-88954d4c9433}*SharedItemsImports = 13 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{b111c308-8b8b-4679-a229-39f80013d51e}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{b111c308-8b8b-4679-a229-39f80013d51e}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{e175485b-3c8c-47d7-8dd5-f7fed627eb25}*SharedItemsImports = 13 - EndGlobalSection EndGlobal diff --git a/Microsoft.Maui-mac.slnf b/Microsoft.Maui-mac.slnf index fef3c9db9261..928aae767e7e 100644 --- a/Microsoft.Maui-mac.slnf +++ b/Microsoft.Maui-mac.slnf @@ -11,7 +11,8 @@ "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", - "src\\Controls\\samples\\Controls.Sample.UITests\\Controls.Sample.UITests.csproj", + "src\\Controls\\samples\\Controls.Sample.Embedding\\Maui.Controls.Sample.Embedding.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", "src\\Controls\\src\\Core\\Controls.Core.csproj", @@ -22,11 +23,15 @@ "src\\Controls\\tests\\Core.UnitTests\\Controls.Core.UnitTests.csproj", "src\\Controls\\tests\\CustomAttributes\\Controls.CustomAttributes.csproj", "src\\Controls\\tests\\DeviceTests\\Controls.DeviceTests.csproj", - "src\\Controls\\tests\\UITests\\Controls.AppiumTests.csproj", + "src\\Controls\\tests\\TestCases.Android.Tests\\Controls.TestCases.Android.Tests.csproj", + "src\\Controls\\tests\\TestCases.iOS.Tests\\Controls.TestCases.iOS.Tests.csproj", + "src\\Controls\\tests\\TestCases.Mac.Tests\\Controls.TestCases.Mac.Tests.csproj", + "src\\Controls\\tests\\TestCases.Shared.Tests\\Controls.TestCases.Shared.Tests.csproj", "src\\Controls\\tests\\Xaml.UnitTests.ExternalAssembly\\Controls.Xaml.UnitTests.ExternalAssembly.csproj", "src\\Controls\\tests\\Xaml.UnitTests.InternalsVisibleAssembly\\Controls.Xaml.UnitTests.InternalsVisibleAssembly.csproj", "src\\Controls\\tests\\Xaml.UnitTests.InternalsHiddenAssembly\\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "src\\Controls\\tests\\Xaml.UnitTests\\Controls.Xaml.UnitTests.csproj", + "src\\Controls\\tests\\SourceGen.UnitTests\\SourceGen.UnitTests.csproj", "src\\Core\\maps\\src\\Maps.csproj", "src\\Core\\src\\Core.csproj", "src\\Core\\tests\\Benchmarks\\Core.Benchmarks.csproj", @@ -42,6 +47,7 @@ "src\\Graphics\\src\\Graphics\\Graphics.csproj", "src\\Graphics\\src\\Text.Markdig\\Graphics.Text.Markdig.csproj", "src\\Graphics\\tests\\DeviceTests\\Graphics.DeviceTests.csproj", + "src\\Graphics\\tests\\Graphics.Tests\\Graphics.Tests.csproj", "src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj", "src\\SingleProject\\Resizetizer\\test\\UnitTests\\Resizetizer.UnitTests.csproj", "src\\Templates\\src\\Microsoft.Maui.Templates.csproj", diff --git a/Microsoft.Maui-vscode.sln b/Microsoft.Maui-vscode.sln index 3a1141697ab2..d74ad80a1185 100644 --- a/Microsoft.Maui-vscode.sln +++ b/Microsoft.Maui-vscode.sln @@ -1,3 +1,4 @@ + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31410.414 @@ -183,39 +184,33 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.Int EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.AppiumTests", "src\Controls\tests\UITests\Controls.AppiumTests.csproj", "{2A0CB35C-ED05-4FCB-91BC-21B288B749B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Sample.UITests", "src\Controls\samples\Controls.Sample.UITests\Controls.Sample.UITests.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationTests", "src\TestUtils\src\Microsoft.Maui.IntegrationTests\Microsoft.Maui.IntegrationTests.csproj", "{A6976D43-B3A4-47AF-89D9-FA388B56B52B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compatibility", "Compatibility", "{0AF0E771-4E09-4F05-B187-B43A2B9F62B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{DA908446-C6A1-473C-BF5C-83E600F5C69E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9B37E707-EE0B-480E-AEB9-0176784879BE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{401CA2F5-EAD1-4414-AE8F-42444BF458EB}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CBC63DBF-892C-4F03-890E-D48F25509CC6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{5BC29B1A-1EBC-41BF-A0B6-D1B73F8A4991}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.ControlGallery.Issues.Shared", "src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.shproj", "{AE2513CB-4E5E-4E5C-8237-88954D4C9433}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{A7B4FF91-8AF6-4A36-805C-B73D888AC1BE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core.csproj", "{7A28BAB3-4396-415F-8473-2700027E57A7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Shared.Tests", "src\Controls\tests\TestCases.Shared.Tests\Controls.TestCases.Shared.Tests.csproj", "{34DC60C1-C722-4134-99A4-E69B9AF1EAE3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android", "src\Compatibility\ControlGallery\src\Android\Compatibility.ControlGallery.Android.csproj", "{36664529-91C2-49A5-BFDA-7D663FB19BC5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Android.Tests", "src\Controls\tests\TestCases.Android.Tests\Controls.TestCases.Android.Tests.csproj", "{78B6A973-63DD-4BCC-92F6-5C479401E5D3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS", "src\Compatibility\ControlGallery\src\iOS\Compatibility.ControlGallery.iOS.csproj", "{137B044D-31C4-4CF2-AB66-97C516AB8393}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.iOS.Tests", "src\Controls\tests\TestCases.iOS.Tests\Controls.TestCases.iOS.Tests.csproj", "{AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.UITests.Shared", "src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.Shared.shproj", "{E175485B-3C8C-47D7-8DD5-F7FED627EB25}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Mac.Tests", "src\Controls\tests\TestCases.Mac.Tests\Controls.TestCases.Mac.Tests.csproj", "{0B3AF328-82B8-431D-8AFF-45F0F86CEA0E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android.UITests", "src\Compatibility\ControlGallery\test\Android.UITests\Compatibility.ControlGallery.Android.UITests.csproj", "{2E41CBBF-999A-40F1-BF65-EA68585CA070}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.WinUI.Tests", "src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj", "{DACF87DB-6354-4B18-A34C-923A55F317F0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS.UITests", "src\Compatibility\ControlGallery\test\iOS.UITests\Compatibility.ControlGallery.iOS.UITests.csproj", "{306C0B6E-B797-40A0-994C-4F923E91F31B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen", "src\Controls\src\BindingSourceGen\Controls.BindingSourceGen.csproj", "{F3E4596C-3047-42F8-9724-80BCE74C141C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{401CA2F5-EAD1-4414-AE8F-42444BF458EB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen.UnitTests", "src\Controls\tests\BindingSourceGen.UnitTests\Controls.BindingSourceGen.UnitTests.csproj", "{0048EA9A-D751-4576-A2BB-2A37BFB385A5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{5BC29B1A-1EBC-41BF-A0B6-D1B73F8A4991}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Analyzers", "src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj", "{DA001142-4777-4EDE-97D5-B1AC08162F99}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{A7B4FF91-8AF6-4A36-805C-B73D888AC1BE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Embedding", "src\Controls\samples\Controls.Sample.Embedding\Maui.Controls.Sample.Embedding.csproj", "{4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -485,10 +480,6 @@ Global {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.Build.0 = Release|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1}.Release|Any CPU.Build.0 = Release|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Build.0 = Debug|Any CPU {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -498,30 +489,6 @@ Global {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.Build.0 = Release|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.Build.0 = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Build.0 = Release|Any CPU - {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Deploy.0 = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Build.0 = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.ActiveCfg = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Build.0 = Release|Any CPU - {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.Build.0 = Release|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.Build.0 = Release|Any CPU {401CA2F5-EAD1-4414-AE8F-42444BF458EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {401CA2F5-EAD1-4414-AE8F-42444BF458EB}.Debug|Any CPU.Build.0 = Debug|Any CPU {401CA2F5-EAD1-4414-AE8F-42444BF458EB}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -534,6 +501,44 @@ Global {A7B4FF91-8AF6-4A36-805C-B73D888AC1BE}.Debug|Any CPU.Build.0 = Debug|Any CPU {A7B4FF91-8AF6-4A36-805C-B73D888AC1BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {A7B4FF91-8AF6-4A36-805C-B73D888AC1BE}.Release|Any CPU.Build.0 = Release|Any CPU + {34DC60C1-C722-4134-99A4-E69B9AF1EAE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34DC60C1-C722-4134-99A4-E69B9AF1EAE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34DC60C1-C722-4134-99A4-E69B9AF1EAE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34DC60C1-C722-4134-99A4-E69B9AF1EAE3}.Release|Any CPU.Build.0 = Release|Any CPU + {78B6A973-63DD-4BCC-92F6-5C479401E5D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78B6A973-63DD-4BCC-92F6-5C479401E5D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78B6A973-63DD-4BCC-92F6-5C479401E5D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78B6A973-63DD-4BCC-92F6-5C479401E5D3}.Release|Any CPU.Build.0 = Release|Any CPU + {AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC}.Release|Any CPU.Build.0 = Release|Any CPU + {0B3AF328-82B8-431D-8AFF-45F0F86CEA0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B3AF328-82B8-431D-8AFF-45F0F86CEA0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B3AF328-82B8-431D-8AFF-45F0F86CEA0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B3AF328-82B8-431D-8AFF-45F0F86CEA0E}.Release|Any CPU.Build.0 = Release|Any CPU + {DACF87DB-6354-4B18-A34C-923A55F317F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DACF87DB-6354-4B18-A34C-923A55F317F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DACF87DB-6354-4B18-A34C-923A55F317F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DACF87DB-6354-4B18-A34C-923A55F317F0}.Release|Any CPU.Build.0 = Release|Any CPU + {F3E4596C-3047-42F8-9724-80BCE74C141C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3E4596C-3047-42F8-9724-80BCE74C141C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3E4596C-3047-42F8-9724-80BCE74C141C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3E4596C-3047-42F8-9724-80BCE74C141C}.Release|Any CPU.Build.0 = Release|Any CPU + {0048EA9A-D751-4576-A2BB-2A37BFB385A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0048EA9A-D751-4576-A2BB-2A37BFB385A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0048EA9A-D751-4576-A2BB-2A37BFB385A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0048EA9A-D751-4576-A2BB-2A37BFB385A5}.Release|Any CPU.Build.0 = Release|Any CPU + {DA001142-4777-4EDE-97D5-B1AC08162F99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA001142-4777-4EDE-97D5-B1AC08162F99}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA001142-4777-4EDE-97D5-B1AC08162F99}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA001142-4777-4EDE-97D5-B1AC08162F99}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -617,33 +622,22 @@ Global {B5F38A9E-1949-4779-8739-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {B5F38A9E-1949-4779-6666-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {FB39FACE-BAF2-4F97-A249-E45BA63D77FE} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {2A0CB35C-ED05-4FCB-91BC-21B288B749B1} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {07C26A25-08C2-4C52-9574-1C33EC8E7919} = {E1082E26-D700-4127-9329-66D673FD2D55} + {07C26A25-08C2-4C52-9574-1C33EC8E7919} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {A6976D43-B3A4-47AF-89D9-FA388B56B52B} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} - {DA908446-C6A1-473C-BF5C-83E600F5C69E} = {0AF0E771-4E09-4F05-B187-B43A2B9F62B0} - {9B37E707-EE0B-480E-AEB9-0176784879BE} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} - {CBC63DBF-892C-4F03-890E-D48F25509CC6} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} - {AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {7A28BAB3-4396-415F-8473-2700027E57A7} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {36664529-91C2-49A5-BFDA-7D663FB19BC5} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {137B044D-31C4-4CF2-AB66-97C516AB8393} = {9B37E707-EE0B-480E-AEB9-0176784879BE} - {E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} - {2E41CBBF-999A-40F1-BF65-EA68585CA070} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} - {306C0B6E-B797-40A0-994C-4F923E91F31B} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} {401CA2F5-EAD1-4414-AE8F-42444BF458EB} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {5BC29B1A-1EBC-41BF-A0B6-D1B73F8A4991} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {A7B4FF91-8AF6-4A36-805C-B73D888AC1BE} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {34DC60C1-C722-4134-99A4-E69B9AF1EAE3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {78B6A973-63DD-4BCC-92F6-5C479401E5D3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {AF5A8B2E-13E7-4D94-A44E-BC96180C1FCC} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {0B3AF328-82B8-431D-8AFF-45F0F86CEA0E} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {DACF87DB-6354-4B18-A34C-923A55F317F0} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {F3E4596C-3047-42F8-9724-80BCE74C141C} = {50C758FE-4E10-409A-94F5-A75480960864} + {0048EA9A-D751-4576-A2BB-2A37BFB385A5} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {DA001142-4777-4EDE-97D5-B1AC08162F99} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9} = {E1082E26-D700-4127-9329-66D673FD2D55} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50} EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{7a28bab3-4396-415f-8473-2700027e57a7}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{ae2513cb-4e5e-4e5c-8237-88954d4c9433}*SharedItemsImports = 13 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{e175485b-3c8c-47d7-8dd5-f7fed627eb25}*SharedItemsImports = 13 - EndGlobalSection EndGlobal diff --git a/Microsoft.Maui-windows.slnf b/Microsoft.Maui-windows.slnf index 87fda3963db9..ce7648da24a5 100644 --- a/Microsoft.Maui-windows.slnf +++ b/Microsoft.Maui-windows.slnf @@ -14,8 +14,9 @@ "src\\Controls\\Maps\\src\\Controls.Maps.csproj", "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\samples\\Controls.Sample.UITests\\Controls.Sample.UITests.csproj", + "src\\Controls\\tests\\TestCases.HostApp\\Controls.TestCases.HostApp.csproj", "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", + "src\\Controls\\samples\\Controls.Sample.Embedding\\Maui.Controls.Sample.Embedding.csproj", "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", "src\\Controls\\src\\Core\\Controls.Core.csproj", @@ -28,7 +29,11 @@ "src\\Controls\\tests\\CustomAttributes\\Controls.CustomAttributes.csproj", "src\\Controls\\tests\\DeviceTests\\Controls.DeviceTests.csproj", "src\\Controls\\tests\\SourceGen.UnitTests\\SourceGen.UnitTests.csproj", - "src\\Controls\\tests\\UITests\\Controls.AppiumTests.csproj", + "src\\Controls\\tests\\TestCases.Android.Tests\\Controls.TestCases.Android.Tests.csproj", + "src\\Controls\\tests\\TestCases.iOS.Tests\\Controls.TestCases.iOS.Tests.csproj", + "src\\Controls\\tests\\TestCases.Mac.Tests\\Controls.TestCases.Mac.Tests.csproj", + "src\\Controls\\tests\\TestCases.WinUI.Tests\\Controls.TestCases.WinUI.Tests.csproj", + "src\\Controls\\tests\\TestCases.Shared.Tests\\Controls.TestCases.Shared.Tests.csproj", "src\\Controls\\tests\\Xaml.UnitTests.ExternalAssembly\\Controls.Xaml.UnitTests.ExternalAssembly.csproj", "src\\Controls\\tests\\Xaml.UnitTests.InternalsHiddenAssembly\\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "src\\Controls\\tests\\Xaml.UnitTests.InternalsVisibleAssembly\\Controls.Xaml.UnitTests.InternalsVisibleAssembly.csproj", @@ -68,6 +73,7 @@ "src\\TestUtils\\src\\DeviceTests\\TestUtils.DeviceTests.csproj", "src\\TestUtils\\src\\Microsoft.Maui.IntegrationTests\\Microsoft.Maui.IntegrationTests.csproj", "src\\TestUtils\\src\\TestUtils\\TestUtils.csproj", + "src\\TestUtils\\src\\UITest.Analyzers\\UITest.Analyzers.csproj", "src\\TestUtils\\src\\UITest.Appium\\UITest.Appium.csproj", "src\\TestUtils\\src\\UITest.Core\\UITest.Core.csproj", "src\\TestUtils\\src\\UITest.NUnit\\UITest.NUnit.csproj", diff --git a/Microsoft.Maui.LegacyControlGallery.sln b/Microsoft.Maui.LegacyControlGallery.sln new file mode 100644 index 000000000000..570c40a5f558 --- /dev/null +++ b/Microsoft.Maui.LegacyControlGallery.sln @@ -0,0 +1,815 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31410.414 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core", "src\Core\src\Core.csproj", "{95BA42B5-B00E-4986-B9B5-517140378452}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core", "src\Controls\src\Core\Controls.Core.csproj", "{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{459BF674-83CB-46F6-881F-A2D2117DBF4D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{E1082E26-D700-4127-9329-66D673FD2D55}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample", "src\Controls\samples\Controls.Sample\Maui.Controls.Sample.csproj", "{B8DC1324-977C-46F1-B697-9064ADE6099A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Build.Tasks", "src\Controls\src\Build.Tasks\Controls.Build.Tasks.csproj", "{75C380E0-CE53-4C01-B89F-CF685331DE18}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Essentials", "Essentials", "{94F3C036-A5F4-4ACC-A028-8506802ADB88}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials", "src\Essentials\src\Essentials.csproj", "{39B47A3C-21CA-4B28-9250-14FD957EB0FC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SingleProject", "SingleProject", "{D5478E0A-5D9C-4C1F-980C-7A9FC71F925E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer", "src\SingleProject\Resizetizer\src\Resizetizer.csproj", "{9909F93F-C085-4F76-B92A-5D8C516BF47D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml", "src\Controls\src\Xaml\Controls.Xaml.csproj", "{CC3D4667-D94E-4276-9311-6439BFD075E4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Templates", "src\Templates\src\Microsoft.Maui.Templates.csproj", "{DAAC2822-63B6-4DE0-83AE-04873CD2F364}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{6998CAA1-11D4-46B2-B80F-0AC882F58124}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\src\TestUtils\TestUtils.csproj", "{FBB3270F-1924-4A72-845E-A6DF39C402F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.UnitTests", "src\Core\tests\UnitTests\Core.UnitTests.csproj", "{92644F6F-5946-48FC-A21A-A3D6EE24E8B3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E8AD265B-3C67-4640-AC58-A522F9FB3361}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C564DDD6-DE79-45CD-88EA-3F690481572A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{50C758FE-4E10-409A-94F5-A75480960864}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{72397ADB-40A8-4B8E-8E08-2DBE2803C845}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BlazorWebView", "BlazorWebView", "{1614D1A4-5C3D-4D5B-8C89-426E37A564EF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Maui", "src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj", "{F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.Design", "src\Controls\src\Core.Design\Controls.Core.Design.csproj", "{F2A419ED-B18E-4075-9969-536C2EC67F82}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.Design", "src\Controls\src\Xaml.Design\Controls.Xaml.Design.csproj", "{F9AEE4C0-9E67-4B87-932E-26EDF0FC932A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRazorClassLibrarySample", "src\BlazorWebView\samples\MauiRazorClassLibrarySample\MauiRazorClassLibrarySample.csproj", "{4515DAA4-9801-401D-A7A0-38D019B3B19F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.SourceGen", "src\Controls\src\SourceGen\Controls.SourceGen.csproj", "{22C17254-2CB4-4AE7-A558-E3208E1D19D3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F3FFE2E4-E89E-46A9-A180-FDA8908BA21D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E25E7929-2423-4C8A-9B03-DC4C8B19A2E5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer.UnitTests", "src\SingleProject\Resizetizer\test\UnitTests\Resizetizer.UnitTests.csproj", "{05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A8E9400E-70DD-421F-8609-1C2FA4AE8E71}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebViewAppShared", "src\BlazorWebView\samples\WebViewAppShared\WebViewAppShared.csproj", "{9F1E0CE0-BF56-433F-8238-6C2B880EEF18}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Workload", "Workload", "{EC63FD88-5E12-46D7-B440-68F70241D987}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Sdk", "src\Workload\Microsoft.Maui.Sdk\Microsoft.Maui.Sdk.csproj", "{C5C434A7-4E1F-456F-A23A-F2566C98301A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Maui.Manifest", "src\Workload\Microsoft.NET.Sdk.Maui.Manifest\Microsoft.NET.Sdk.Maui.Manifest.csproj", "{081EE5E5-69D4-493C-9EB4-47423C4728AB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners", "src\TestUtils\src\DeviceTests.Runners\TestUtils.DeviceTests.Runners.csproj", "{316C0861-069B-4572-879F-F01E568F33A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners.SourceGen", "src\TestUtils\src\DeviceTests.Runners.SourceGen\TestUtils.DeviceTests.Runners.SourceGen.csproj", "{E87D865B-4EA8-4A30-B6C1-572D2061D707}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C60B92DA-96F2-41EF-8594-864164A82C6A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Sample", "src\TestUtils\samples\DeviceTests.Sample\TestUtils.DeviceTests.Sample.csproj", "{B8E69BF7-0F57-4959-867B-441E0428D169}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Benchmarks", "src\Core\tests\Benchmarks\Core.Benchmarks.csproj", "{33B599D2-B231-4D17-8957-397E24B0FE33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests", "src\Core\tests\DeviceTests\Core.DeviceTests.csproj", "{A9D5F998-78D3-4DEE-883F-510A7C3AA587}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A1D83459-24AC-4124-AE5F-09F0318AF0EB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{420BC8CC-EE70-49A1-964A-CB63414A882D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.DeviceTests", "src\Essentials\test\DeviceTests\Essentials.DeviceTests.csproj", "{66528BE6-FF53-4A3B-8675-46C0B929C83B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.UnitTests", "src\Essentials\test\UnitTests\Essentials.UnitTests.csproj", "{A9BAB840-A53E-405A-9458-CA0E02319FB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Maps", "src\Controls\Maps\src\Controls.Maps.csproj", "{5C40FA00-7D48-4F54-898C-01C8942E451D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{25D0D27A-C5FE-443D-8B65-D6C987F4A80E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.UnitTests", "src\Controls\tests\Core.UnitTests\Controls.Core.UnitTests.csproj", "{094FB109-1CBC-4B84-8CFB-072E7B3EC637}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests", "src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests.csproj", "{F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.CustomAttributes", "src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj", "{F7B6C73A-6019-4EAE-9258-E08C0C57829F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Profiling", "src\Controls\samples\Controls.Sample.Profiling\Maui.Controls.Sample.Profiling.csproj", "{75DB635C-0035-46E7-9A33-857D38082503}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{95BF8553-3D9D-4831-ACDD-A3E697BC08A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample", "src\Essentials\samples\Samples\Essentials.Sample.csproj", "{C677BF3D-B234-491D-BA48-D9742DB564F8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample.Server.WebAuthenticator", "src\Essentials\samples\Sample.Server.WebAuthenticator\Essentials.Sample.Server.WebAuthenticator.csproj", "{F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWinFormsApp", "src\BlazorWebView\samples\BlazorWinFormsApp\BlazorWinFormsApp.csproj", "{7A10CA08-6394-43D3-AFAA-4D696EA111C9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWpfApp", "src\BlazorWebView\samples\BlazorWpfApp\BlazorWpfApp.csproj", "{3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{ED7F28E0-D0AF-417D-983D-3D874EEE8554}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.WindowsForms", "src\BlazorWebView\src\WindowsForms\Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj", "{D8BF12AC-AFCF-496B-BD34-2A52F7488066}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Wpf", "src\BlazorWebView\src\Wpf\Microsoft.AspNetCore.Components.WebView.Wpf.csproj", "{7032668B-F5F4-450B-B007-14A46E9AE234}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "src\TestUtils\src\DeviceTests\TestUtils.DeviceTests.csproj", "{F28E8899-98D2-4915-8D48-D101D4837AB9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.DeviceTests", "src\Controls\tests\DeviceTests\Controls.DeviceTests.csproj", "{C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Sandbox", "src\Controls\samples\Controls.Sample.Sandbox\Maui.Controls.Sample.Sandbox.csproj", "{532ACF23-381B-4F54-AEA9-25B5485F9148}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Foldable", "src\Controls\Foldable\src\Controls.Foldable.csproj", "{71FFE8BF-EBE4-4078-8484-86C6EA685D14}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A9C514B9-1EE2-4A12-8E8A-CE16D87545C3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiBlazorWebView.DeviceTests", "src\BlazorWebView\tests\MauiDeviceTests\MauiBlazorWebView.DeviceTests.csproj", "{5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedSource", "SharedSource", "{4F2926C8-43AB-4328-A735-D9EAD699F81D}" + ProjectSection(SolutionItems) = preProject + src\BlazorWebView\src\SharedSource\AutoCloseOnReadCompleteStream.cs = src\BlazorWebView\src\SharedSource\AutoCloseOnReadCompleteStream.cs + src\BlazorWebView\src\SharedSource\HostAddressHelper.cs = src\BlazorWebView\src\SharedSource\HostAddressHelper.cs + src\BlazorWebView\src\SharedSource\QueryStringHelper.cs = src\BlazorWebView\src\SharedSource\QueryStringHelper.cs + src\BlazorWebView\src\SharedSource\UrlLoadingEventArgs.cs = src\BlazorWebView\src\SharedSource\UrlLoadingEventArgs.cs + src\BlazorWebView\src\SharedSource\UrlLoadingStrategy.cs = src\BlazorWebView\src\SharedSource\UrlLoadingStrategy.cs + src\BlazorWebView\src\SharedSource\WebView2WebViewManager.cs = src\BlazorWebView\src\SharedSource\WebView2WebViewManager.cs + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmarks.Droid", "src\Core\tests\Benchmarks.Droid\Benchmarks.Droid.csproj", "{5B56A734-D53C-4635-A53E-F889FCFCDD66}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maps", "src\Core\maps\src\Maps.csproj", "{E8728693-3537-4007-A4DB-9F9634548755}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Graphics", "Graphics", "{E4884871-4A1B-43BC-814F-E3D6E52B1673}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{42AB9AE1-631D-4AD4-85B7-910FF0940BDB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{1BA0121E-0B83-4C8F-81BE-C293E7E35DCE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{936C47A9-A7EA-4FBD-8733-CED1D4100E69}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics", "src\Graphics\src\Graphics\Graphics.csproj", "{CF056C95-51C4-4366-9D06-41D2B15EFEE4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Skia", "src\Graphics\src\Graphics.Skia\Graphics.Skia.csproj", "{918B7EE9-055B-4F5A-8F62-BB88913159B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Win2D", "src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj", "{291F634A-2D8D-48B6-A1A0-BB9BC265D6E4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Text.Markdig", "src\Graphics\src\Text.Markdig\Graphics.Text.Markdig.csproj", "{375B22F5-9D79-4D17-B759-F8220DFB8B70}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Tests", "src\Graphics\tests\Graphics.Tests\Graphics.Tests.csproj", "{56BBFDBD-254F-42B6-9984-46E19C53FB00}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Benchmarks", "src\Graphics\tests\Graphics.Benchmarks\Graphics.Benchmarks.csproj", "{56DF52FC-A48C-4757-8130-A412050CEBB8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Android", "src\Graphics\samples\GraphicsTester.Android\GraphicsTester.Android.csproj", "{2B02595C-BB82-44F2-8FB7-423EF2DE3A73}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.iOS", "src\Graphics\samples\GraphicsTester.iOS\GraphicsTester.iOS.csproj", "{0F1BC26B-5041-4D64-B533-2959287D8197}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Mac", "src\Graphics\samples\GraphicsTester.Mac\GraphicsTester.Mac.csproj", "{0A44978B-81FD-4565-9997-3E7218C66596}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.MacCatalyst", "src\Graphics\samples\GraphicsTester.MacCatalyst\GraphicsTester.MacCatalyst.csproj", "{B3DD0741-2EC3-4A54-82B7-73923DE4CF48}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Portable", "src\Graphics\samples\GraphicsTester.Portable\GraphicsTester.Portable.csproj", "{546614BB-07AA-4E8E-B6AE-EBDC183C4DAB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Skia.Console", "src\Graphics\samples\GraphicsTester.Skia.Console\GraphicsTester.Skia.Console.csproj", "{EF6ACA06-D4DF-4C21-9F65-FBFEC6325094}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Skia.Mac", "src\Graphics\samples\GraphicsTester.Skia.Mac\GraphicsTester.Skia.Mac.csproj", "{5E8D70F3-990D-4B40-8B13-AA818F21E8A0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Skia.Windows", "src\Graphics\samples\GraphicsTester.Skia.Windows\GraphicsTester.Skia.Windows.csproj", "{8441FA70-9041-4727-91B9-2F39881CC0EE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.WinUI.Desktop", "src\Graphics\samples\GraphicsTester.WinUI.Desktop\GraphicsTester.WinUI.Desktop.csproj", "{4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Skia.GtkSharp", "src\Graphics\src\Graphics.Skia.GtkSharp\Graphics.Skia.GtkSharp.csproj", "{AFD9D653-08C4-456C-AA1B-F5C9F621D655}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.Skia.WPF", "src\Graphics\src\Graphics.Skia.WPF\Graphics.Skia.WPF.csproj", "{F26D31D3-CE4C-4F32-A77F-E2905C948674}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphicsTester.Skia.Gtk", "src\Graphics\samples\GraphicsTester.Skia.Gtk\GraphicsTester.Skia.Gtk.csproj", "{F351A992-18E4-473C-8ADD-2BA0BAA7B5A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.Design.UnitTests", "src\Controls\tests\Core.Design.UnitTests\Controls.Core.Design.UnitTests.csproj", "{F68932B0-81A2-4CC3-A4F7-28091EE91B23}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.NuGet", "src\Controls\src\NuGet\Controls.NuGet.csproj", "{4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests.Shared", "src\Core\tests\DeviceTests.Shared\Core.DeviceTests.Shared.csproj", "{66CC98E3-6A1A-4C44-A23C-B575E82106EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.DeviceTests", "src\Graphics\tests\DeviceTests\Graphics.DeviceTests.csproj", "{34969E49-FA6E-41BB-9813-5689BB14021E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.ExternalAssembly", "src\Controls\tests\Xaml.UnitTests.ExternalAssembly\Controls.Xaml.UnitTests.ExternalAssembly.csproj", "{B5F38A9E-1949-4779-8739-D682B09E0CB3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsVisibleAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsVisibleAssembly\Controls.Xaml.UnitTests.InternalsVisibleAssembly.csproj", "{B5F38A9E-1949-4779-6666-D682B09E0CB3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{07C26A25-08C2-4C52-9574-1C33EC8E7919}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationTests", "src\TestUtils\src\Microsoft.Maui.IntegrationTests\Microsoft.Maui.IntegrationTests.csproj", "{A6976D43-B3A4-47AF-89D9-FA388B56B52B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compatibility", "Compatibility", "{0AF0E771-4E09-4F05-B187-B43A2B9F62B0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{DA908446-C6A1-473C-BF5C-83E600F5C69E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9B37E707-EE0B-480E-AEB9-0176784879BE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CBC63DBF-892C-4F03-890E-D48F25509CC6}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.ControlGallery.Issues.Shared", "src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.shproj", "{AE2513CB-4E5E-4E5C-8237-88954D4C9433}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core.csproj", "{7A28BAB3-4396-415F-8473-2700027E57A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android", "src\Compatibility\ControlGallery\src\Android\Compatibility.ControlGallery.Android.csproj", "{36664529-91C2-49A5-BFDA-7D663FB19BC5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS", "src\Compatibility\ControlGallery\src\iOS\Compatibility.ControlGallery.iOS.csproj", "{137B044D-31C4-4CF2-AB66-97C516AB8393}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.WinUI", "src\Compatibility\ControlGallery\src\WinUI\Compatibility.ControlGallery.WinUI.csproj", "{0BECADBB-8EE4-4C73-8341-30B041CFD4B8}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.UITests.Shared", "src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.Shared.shproj", "{E175485B-3C8C-47D7-8DD5-F7FED627EB25}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android.UITests", "src\Compatibility\ControlGallery\test\Android.UITests\Compatibility.ControlGallery.Android.UITests.csproj", "{2E41CBBF-999A-40F1-BF65-EA68585CA070}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS.UITests", "src\Compatibility\ControlGallery\test\iOS.UITests\Compatibility.ControlGallery.iOS.UITests.csproj", "{306C0B6E-B797-40A0-994C-4F923E91F31B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinUI.UITests", "src\Compatibility\ControlGallery\test\WinUI.UITests\WinUI.UITests.csproj", "{B111C308-8B8B-4679-A229-39F80013D51E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{8F7B825D-24A8-4E09-AC5B-9117926B7BF3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{26379D0E-4D4D-48CA-94B1-A2C1972AB335}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{A307B624-48D4-494E-A70D-5B3CDF6620CF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGen.UnitTests", "src\Controls\tests\SourceGen.UnitTests\SourceGen.UnitTests.csproj", "{06747B55-91DB-47F5-B7A2-56526C28A0D3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{054C5BAC-3671-4F76-B32E-47CF4E64BB39}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Core.UnitTests", "src\Compatibility\Core\tests\Compatibility.UnitTests\Compatibility.Core.UnitTests.csproj", "{1D950CD3-6778-4729-B6D9-446088093F34}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Shared.Tests", "src\Controls\tests\TestCases.Shared.Tests\Controls.TestCases.Shared.Tests.csproj", "{C450F8F4-C40F-4C15-978F-F43BA7DEA29D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Android.Tests", "src\Controls\tests\TestCases.Android.Tests\Controls.TestCases.Android.Tests.csproj", "{7042E8FF-472F-4CB5-8AAE-DAD87BA32207}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.iOS.Tests", "src\Controls\tests\TestCases.iOS.Tests\Controls.TestCases.iOS.Tests.csproj", "{5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Mac.Tests", "src\Controls\tests\TestCases.Mac.Tests\Controls.TestCases.Mac.Tests.csproj", "{6E1ADE49-680E-4CA3-8FEA-6450802F8250}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.WinUI.Tests", "src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj", "{A3E22F99-F380-4005-8483-3ACA6C104220}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen", "src\Controls\src\BindingSourceGen\Controls.BindingSourceGen.csproj", "{9538341F-8A00-4356-A2B2-5C2959979F22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen.UnitTests", "src\Controls\tests\BindingSourceGen.UnitTests\Controls.BindingSourceGen.UnitTests.csproj", "{23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Analyzers", "src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj", "{55905937-1399-46DB-BA38-E426801CB759}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Embedding", "src\Controls\samples\Controls.Sample.Embedding\Maui.Controls.Sample.Embedding.csproj", "{4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {95BA42B5-B00E-4986-B9B5-517140378452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95BA42B5-B00E-4986-B9B5-517140378452}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95BA42B5-B00E-4986-B9B5-517140378452}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95BA42B5-B00E-4986-B9B5-517140378452}.Release|Any CPU.Build.0 = Release|Any CPU + {AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|Any CPU.Build.0 = Release|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|Any CPU.Build.0 = Release|Any CPU + {B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|Any CPU.Build.0 = Release|Any CPU + {39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|Any CPU.Build.0 = Release|Any CPU + {9909F93F-C085-4F76-B92A-5D8C516BF47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9909F93F-C085-4F76-B92A-5D8C516BF47D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9909F93F-C085-4F76-B92A-5D8C516BF47D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9909F93F-C085-4F76-B92A-5D8C516BF47D}.Release|Any CPU.Build.0 = Release|Any CPU + {CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|Any CPU.Build.0 = Release|Any CPU + {DAAC2822-63B6-4DE0-83AE-04873CD2F364}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DAAC2822-63B6-4DE0-83AE-04873CD2F364}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DAAC2822-63B6-4DE0-83AE-04873CD2F364}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DAAC2822-63B6-4DE0-83AE-04873CD2F364}.Release|Any CPU.Build.0 = Release|Any CPU + {FBB3270F-1924-4A72-845E-A6DF39C402F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBB3270F-1924-4A72-845E-A6DF39C402F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBB3270F-1924-4A72-845E-A6DF39C402F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBB3270F-1924-4A72-845E-A6DF39C402F6}.Release|Any CPU.Build.0 = Release|Any CPU + {92644F6F-5946-48FC-A21A-A3D6EE24E8B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92644F6F-5946-48FC-A21A-A3D6EE24E8B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92644F6F-5946-48FC-A21A-A3D6EE24E8B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92644F6F-5946-48FC-A21A-A3D6EE24E8B3}.Release|Any CPU.Build.0 = Release|Any CPU + {F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}.Release|Any CPU.Build.0 = Release|Any CPU + {F2A419ED-B18E-4075-9969-536C2EC67F82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2A419ED-B18E-4075-9969-536C2EC67F82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2A419ED-B18E-4075-9969-536C2EC67F82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2A419ED-B18E-4075-9969-536C2EC67F82}.Release|Any CPU.Build.0 = Release|Any CPU + {F9AEE4C0-9E67-4B87-932E-26EDF0FC932A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9AEE4C0-9E67-4B87-932E-26EDF0FC932A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9AEE4C0-9E67-4B87-932E-26EDF0FC932A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9AEE4C0-9E67-4B87-932E-26EDF0FC932A}.Release|Any CPU.Build.0 = Release|Any CPU + {4515DAA4-9801-401D-A7A0-38D019B3B19F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4515DAA4-9801-401D-A7A0-38D019B3B19F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4515DAA4-9801-401D-A7A0-38D019B3B19F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4515DAA4-9801-401D-A7A0-38D019B3B19F}.Release|Any CPU.Build.0 = Release|Any CPU + {22C17254-2CB4-4AE7-A558-E3208E1D19D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22C17254-2CB4-4AE7-A558-E3208E1D19D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22C17254-2CB4-4AE7-A558-E3208E1D19D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22C17254-2CB4-4AE7-A558-E3208E1D19D3}.Release|Any CPU.Build.0 = Release|Any CPU + {05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}.Release|Any CPU.Build.0 = Release|Any CPU + {9F1E0CE0-BF56-433F-8238-6C2B880EEF18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F1E0CE0-BF56-433F-8238-6C2B880EEF18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F1E0CE0-BF56-433F-8238-6C2B880EEF18}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F1E0CE0-BF56-433F-8238-6C2B880EEF18}.Release|Any CPU.Build.0 = Release|Any CPU + {C5C434A7-4E1F-456F-A23A-F2566C98301A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5C434A7-4E1F-456F-A23A-F2566C98301A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5C434A7-4E1F-456F-A23A-F2566C98301A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5C434A7-4E1F-456F-A23A-F2566C98301A}.Release|Any CPU.Build.0 = Release|Any CPU + {081EE5E5-69D4-493C-9EB4-47423C4728AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {081EE5E5-69D4-493C-9EB4-47423C4728AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {081EE5E5-69D4-493C-9EB4-47423C4728AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {081EE5E5-69D4-493C-9EB4-47423C4728AB}.Release|Any CPU.Build.0 = Release|Any CPU + {316C0861-069B-4572-879F-F01E568F33A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {316C0861-069B-4572-879F-F01E568F33A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {316C0861-069B-4572-879F-F01E568F33A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {316C0861-069B-4572-879F-F01E568F33A2}.Release|Any CPU.Build.0 = Release|Any CPU + {E87D865B-4EA8-4A30-B6C1-572D2061D707}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E87D865B-4EA8-4A30-B6C1-572D2061D707}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E87D865B-4EA8-4A30-B6C1-572D2061D707}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E87D865B-4EA8-4A30-B6C1-572D2061D707}.Release|Any CPU.Build.0 = Release|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Release|Any CPU.Build.0 = Release|Any CPU + {B8E69BF7-0F57-4959-867B-441E0428D169}.Release|Any CPU.Deploy.0 = Release|Any CPU + {33B599D2-B231-4D17-8957-397E24B0FE33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33B599D2-B231-4D17-8957-397E24B0FE33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33B599D2-B231-4D17-8957-397E24B0FE33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33B599D2-B231-4D17-8957-397E24B0FE33}.Release|Any CPU.Build.0 = Release|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Release|Any CPU.Build.0 = Release|Any CPU + {A9D5F998-78D3-4DEE-883F-510A7C3AA587}.Release|Any CPU.Deploy.0 = Release|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Release|Any CPU.Build.0 = Release|Any CPU + {66528BE6-FF53-4A3B-8675-46C0B929C83B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A9BAB840-A53E-405A-9458-CA0E02319FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9BAB840-A53E-405A-9458-CA0E02319FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9BAB840-A53E-405A-9458-CA0E02319FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9BAB840-A53E-405A-9458-CA0E02319FB4}.Release|Any CPU.Build.0 = Release|Any CPU + {5C40FA00-7D48-4F54-898C-01C8942E451D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C40FA00-7D48-4F54-898C-01C8942E451D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C40FA00-7D48-4F54-898C-01C8942E451D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C40FA00-7D48-4F54-898C-01C8942E451D}.Release|Any CPU.Build.0 = Release|Any CPU + {094FB109-1CBC-4B84-8CFB-072E7B3EC637}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {094FB109-1CBC-4B84-8CFB-072E7B3EC637}.Debug|Any CPU.Build.0 = Debug|Any CPU + {094FB109-1CBC-4B84-8CFB-072E7B3EC637}.Release|Any CPU.ActiveCfg = Release|Any CPU + {094FB109-1CBC-4B84-8CFB-072E7B3EC637}.Release|Any CPU.Build.0 = Release|Any CPU + {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED}.Release|Any CPU.Build.0 = Release|Any CPU + {F7B6C73A-6019-4EAE-9258-E08C0C57829F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7B6C73A-6019-4EAE-9258-E08C0C57829F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7B6C73A-6019-4EAE-9258-E08C0C57829F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7B6C73A-6019-4EAE-9258-E08C0C57829F}.Release|Any CPU.Build.0 = Release|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.Build.0 = Release|Any CPU + {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Release|Any CPU.Build.0 = Release|Any CPU + {C677BF3D-B234-491D-BA48-D9742DB564F8}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC}.Release|Any CPU.Build.0 = Release|Any CPU + {7A10CA08-6394-43D3-AFAA-4D696EA111C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A10CA08-6394-43D3-AFAA-4D696EA111C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A10CA08-6394-43D3-AFAA-4D696EA111C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A10CA08-6394-43D3-AFAA-4D696EA111C9}.Release|Any CPU.Build.0 = Release|Any CPU + {3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D}.Release|Any CPU.Build.0 = Release|Any CPU + {D8BF12AC-AFCF-496B-BD34-2A52F7488066}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8BF12AC-AFCF-496B-BD34-2A52F7488066}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8BF12AC-AFCF-496B-BD34-2A52F7488066}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8BF12AC-AFCF-496B-BD34-2A52F7488066}.Release|Any CPU.Build.0 = Release|Any CPU + {7032668B-F5F4-450B-B007-14A46E9AE234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7032668B-F5F4-450B-B007-14A46E9AE234}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7032668B-F5F4-450B-B007-14A46E9AE234}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7032668B-F5F4-450B-B007-14A46E9AE234}.Release|Any CPU.Build.0 = Release|Any CPU + {F28E8899-98D2-4915-8D48-D101D4837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F28E8899-98D2-4915-8D48-D101D4837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F28E8899-98D2-4915-8D48-D101D4837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F28E8899-98D2-4915-8D48-D101D4837AB9}.Release|Any CPU.Build.0 = Release|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Release|Any CPU.Build.0 = Release|Any CPU + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}.Release|Any CPU.Deploy.0 = Release|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Debug|Any CPU.Build.0 = Debug|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Release|Any CPU.ActiveCfg = Release|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Release|Any CPU.Build.0 = Release|Any CPU + {532ACF23-381B-4F54-AEA9-25B5485F9148}.Release|Any CPU.Deploy.0 = Release|Any CPU + {71FFE8BF-EBE4-4078-8484-86C6EA685D14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71FFE8BF-EBE4-4078-8484-86C6EA685D14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71FFE8BF-EBE4-4078-8484-86C6EA685D14}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71FFE8BF-EBE4-4078-8484-86C6EA685D14}.Release|Any CPU.Build.0 = Release|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Release|Any CPU.Build.0 = Release|Any CPU + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Release|Any CPU.Build.0 = Release|Any CPU + {5B56A734-D53C-4635-A53E-F889FCFCDD66}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E8728693-3537-4007-A4DB-9F9634548755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E8728693-3537-4007-A4DB-9F9634548755}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8728693-3537-4007-A4DB-9F9634548755}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E8728693-3537-4007-A4DB-9F9634548755}.Release|Any CPU.Build.0 = Release|Any CPU + {CF056C95-51C4-4366-9D06-41D2B15EFEE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF056C95-51C4-4366-9D06-41D2B15EFEE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF056C95-51C4-4366-9D06-41D2B15EFEE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF056C95-51C4-4366-9D06-41D2B15EFEE4}.Release|Any CPU.Build.0 = Release|Any CPU + {918B7EE9-055B-4F5A-8F62-BB88913159B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {918B7EE9-055B-4F5A-8F62-BB88913159B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {918B7EE9-055B-4F5A-8F62-BB88913159B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {918B7EE9-055B-4F5A-8F62-BB88913159B1}.Release|Any CPU.Build.0 = Release|Any CPU + {291F634A-2D8D-48B6-A1A0-BB9BC265D6E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {291F634A-2D8D-48B6-A1A0-BB9BC265D6E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {291F634A-2D8D-48B6-A1A0-BB9BC265D6E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {291F634A-2D8D-48B6-A1A0-BB9BC265D6E4}.Release|Any CPU.Build.0 = Release|Any CPU + {375B22F5-9D79-4D17-B759-F8220DFB8B70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {375B22F5-9D79-4D17-B759-F8220DFB8B70}.Debug|Any CPU.Build.0 = Debug|Any CPU + {375B22F5-9D79-4D17-B759-F8220DFB8B70}.Release|Any CPU.ActiveCfg = Release|Any CPU + {375B22F5-9D79-4D17-B759-F8220DFB8B70}.Release|Any CPU.Build.0 = Release|Any CPU + {56BBFDBD-254F-42B6-9984-46E19C53FB00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56BBFDBD-254F-42B6-9984-46E19C53FB00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56BBFDBD-254F-42B6-9984-46E19C53FB00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56BBFDBD-254F-42B6-9984-46E19C53FB00}.Release|Any CPU.Build.0 = Release|Any CPU + {56DF52FC-A48C-4757-8130-A412050CEBB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56DF52FC-A48C-4757-8130-A412050CEBB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56DF52FC-A48C-4757-8130-A412050CEBB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56DF52FC-A48C-4757-8130-A412050CEBB8}.Release|Any CPU.Build.0 = Release|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Release|Any CPU.Build.0 = Release|Any CPU + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Release|Any CPU.Build.0 = Release|Any CPU + {0F1BC26B-5041-4D64-B533-2959287D8197}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0A44978B-81FD-4565-9997-3E7218C66596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A44978B-81FD-4565-9997-3E7218C66596}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A44978B-81FD-4565-9997-3E7218C66596}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A44978B-81FD-4565-9997-3E7218C66596}.Release|Any CPU.Build.0 = Release|Any CPU + {B3DD0741-2EC3-4A54-82B7-73923DE4CF48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3DD0741-2EC3-4A54-82B7-73923DE4CF48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3DD0741-2EC3-4A54-82B7-73923DE4CF48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3DD0741-2EC3-4A54-82B7-73923DE4CF48}.Release|Any CPU.Build.0 = Release|Any CPU + {546614BB-07AA-4E8E-B6AE-EBDC183C4DAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {546614BB-07AA-4E8E-B6AE-EBDC183C4DAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {546614BB-07AA-4E8E-B6AE-EBDC183C4DAB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {546614BB-07AA-4E8E-B6AE-EBDC183C4DAB}.Release|Any CPU.Build.0 = Release|Any CPU + {EF6ACA06-D4DF-4C21-9F65-FBFEC6325094}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF6ACA06-D4DF-4C21-9F65-FBFEC6325094}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF6ACA06-D4DF-4C21-9F65-FBFEC6325094}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF6ACA06-D4DF-4C21-9F65-FBFEC6325094}.Release|Any CPU.Build.0 = Release|Any CPU + {5E8D70F3-990D-4B40-8B13-AA818F21E8A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E8D70F3-990D-4B40-8B13-AA818F21E8A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E8D70F3-990D-4B40-8B13-AA818F21E8A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E8D70F3-990D-4B40-8B13-AA818F21E8A0}.Release|Any CPU.Build.0 = Release|Any CPU + {8441FA70-9041-4727-91B9-2F39881CC0EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8441FA70-9041-4727-91B9-2F39881CC0EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8441FA70-9041-4727-91B9-2F39881CC0EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8441FA70-9041-4727-91B9-2F39881CC0EE}.Release|Any CPU.Build.0 = Release|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Release|Any CPU.Build.0 = Release|Any CPU + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5}.Release|Any CPU.Deploy.0 = Release|Any CPU + {AFD9D653-08C4-456C-AA1B-F5C9F621D655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFD9D653-08C4-456C-AA1B-F5C9F621D655}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFD9D653-08C4-456C-AA1B-F5C9F621D655}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFD9D653-08C4-456C-AA1B-F5C9F621D655}.Release|Any CPU.Build.0 = Release|Any CPU + {F26D31D3-CE4C-4F32-A77F-E2905C948674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F26D31D3-CE4C-4F32-A77F-E2905C948674}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F26D31D3-CE4C-4F32-A77F-E2905C948674}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F26D31D3-CE4C-4F32-A77F-E2905C948674}.Release|Any CPU.Build.0 = Release|Any CPU + {F351A992-18E4-473C-8ADD-2BA0BAA7B5A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F351A992-18E4-473C-8ADD-2BA0BAA7B5A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F351A992-18E4-473C-8ADD-2BA0BAA7B5A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F351A992-18E4-473C-8ADD-2BA0BAA7B5A2}.Release|Any CPU.Build.0 = Release|Any CPU + {F68932B0-81A2-4CC3-A4F7-28091EE91B23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F68932B0-81A2-4CC3-A4F7-28091EE91B23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F68932B0-81A2-4CC3-A4F7-28091EE91B23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F68932B0-81A2-4CC3-A4F7-28091EE91B23}.Release|Any CPU.Build.0 = Release|Any CPU + {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7}.Release|Any CPU.Build.0 = Release|Any CPU + {66CC98E3-6A1A-4C44-A23C-B575E82106EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66CC98E3-6A1A-4C44-A23C-B575E82106EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66CC98E3-6A1A-4C44-A23C-B575E82106EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66CC98E3-6A1A-4C44-A23C-B575E82106EC}.Release|Any CPU.Build.0 = Release|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.Build.0 = Release|Any CPU + {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B5F38A9E-1949-4779-8739-D682B09E0CB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5F38A9E-1949-4779-8739-D682B09E0CB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5F38A9E-1949-4779-8739-D682B09E0CB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5F38A9E-1949-4779-8739-D682B09E0CB3}.Release|Any CPU.Build.0 = Release|Any CPU + {B5F38A9E-1949-4779-6666-D682B09E0CB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5F38A9E-1949-4779-6666-D682B09E0CB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5F38A9E-1949-4779-6666-D682B09E0CB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5F38A9E-1949-4779-6666-D682B09E0CB3}.Release|Any CPU.Build.0 = Release|Any CPU + {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB39FACE-BAF2-4F97-A249-E45BA63D77FE}.Release|Any CPU.Build.0 = Release|Any CPU + {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07C26A25-08C2-4C52-9574-1C33EC8E7919}.Release|Any CPU.Build.0 = Release|Any CPU + {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6976D43-B3A4-47AF-89D9-FA388B56B52B}.Release|Any CPU.Build.0 = Release|Any CPU + {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A28BAB3-4396-415F-8473-2700027E57A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A28BAB3-4396-415F-8473-2700027E57A7}.Release|Any CPU.Build.0 = Release|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Build.0 = Release|Any CPU + {36664529-91C2-49A5-BFDA-7D663FB19BC5}.Release|Any CPU.Deploy.0 = Release|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Build.0 = Debug|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.ActiveCfg = Release|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Build.0 = Release|Any CPU + {137B044D-31C4-4CF2-AB66-97C516AB8393}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.Build.0 = Release|Any CPU + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E41CBBF-999A-40F1-BF65-EA68585CA070}.Release|Any CPU.Build.0 = Release|Any CPU + {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {306C0B6E-B797-40A0-994C-4F923E91F31B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {306C0B6E-B797-40A0-994C-4F923E91F31B}.Release|Any CPU.Build.0 = Release|Any CPU + {B111C308-8B8B-4679-A229-39F80013D51E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B111C308-8B8B-4679-A229-39F80013D51E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B111C308-8B8B-4679-A229-39F80013D51E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B111C308-8B8B-4679-A229-39F80013D51E}.Release|Any CPU.Build.0 = Release|Any CPU + {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F7B825D-24A8-4E09-AC5B-9117926B7BF3}.Release|Any CPU.Build.0 = Release|Any CPU + {26379D0E-4D4D-48CA-94B1-A2C1972AB335}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26379D0E-4D4D-48CA-94B1-A2C1972AB335}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26379D0E-4D4D-48CA-94B1-A2C1972AB335}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26379D0E-4D4D-48CA-94B1-A2C1972AB335}.Release|Any CPU.Build.0 = Release|Any CPU + {A307B624-48D4-494E-A70D-5B3CDF6620CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A307B624-48D4-494E-A70D-5B3CDF6620CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A307B624-48D4-494E-A70D-5B3CDF6620CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A307B624-48D4-494E-A70D-5B3CDF6620CF}.Release|Any CPU.Build.0 = Release|Any CPU + {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06747B55-91DB-47F5-B7A2-56526C28A0D3}.Release|Any CPU.Build.0 = Release|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D950CD3-6778-4729-B6D9-446088093F34}.Release|Any CPU.Build.0 = Release|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D}.Release|Any CPU.Build.0 = Release|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207}.Release|Any CPU.Build.0 = Release|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA}.Release|Any CPU.Build.0 = Release|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E1ADE49-680E-4CA3-8FEA-6450802F8250}.Release|Any CPU.Build.0 = Release|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3E22F99-F380-4005-8483-3ACA6C104220}.Release|Any CPU.Build.0 = Release|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9538341F-8A00-4356-A2B2-5C2959979F22}.Release|Any CPU.Build.0 = Release|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47}.Release|Any CPU.Build.0 = Release|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55905937-1399-46DB-BA38-E426801CB759}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {95BA42B5-B00E-4986-B9B5-517140378452} = {E8AD265B-3C67-4640-AC58-A522F9FB3361} + {AF64451F-E2BD-41C2-B083-F60C26AE2A9F} = {50C758FE-4E10-409A-94F5-A75480960864} + {E1082E26-D700-4127-9329-66D673FD2D55} = {459BF674-83CB-46F6-881F-A2D2117DBF4D} + {B8DC1324-977C-46F1-B697-9064ADE6099A} = {E1082E26-D700-4127-9329-66D673FD2D55} + {75C380E0-CE53-4C01-B89F-CF685331DE18} = {50C758FE-4E10-409A-94F5-A75480960864} + {39B47A3C-21CA-4B28-9250-14FD957EB0FC} = {A1D83459-24AC-4124-AE5F-09F0318AF0EB} + {9909F93F-C085-4F76-B92A-5D8C516BF47D} = {F3FFE2E4-E89E-46A9-A180-FDA8908BA21D} + {CC3D4667-D94E-4276-9311-6439BFD075E4} = {50C758FE-4E10-409A-94F5-A75480960864} + {DAAC2822-63B6-4DE0-83AE-04873CD2F364} = {72397ADB-40A8-4B8E-8E08-2DBE2803C845} + {FBB3270F-1924-4A72-845E-A6DF39C402F6} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {92644F6F-5946-48FC-A21A-A3D6EE24E8B3} = {C564DDD6-DE79-45CD-88EA-3F690481572A} + {E8AD265B-3C67-4640-AC58-A522F9FB3361} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB} + {C564DDD6-DE79-45CD-88EA-3F690481572A} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB} + {50C758FE-4E10-409A-94F5-A75480960864} = {459BF674-83CB-46F6-881F-A2D2117DBF4D} + {F7F2B379-52CE-4802-9EC9-0D7967B6BFB7} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} + {F2A419ED-B18E-4075-9969-536C2EC67F82} = {50C758FE-4E10-409A-94F5-A75480960864} + {F9AEE4C0-9E67-4B87-932E-26EDF0FC932A} = {50C758FE-4E10-409A-94F5-A75480960864} + {4515DAA4-9801-401D-A7A0-38D019B3B19F} = {A8E9400E-70DD-421F-8609-1C2FA4AE8E71} + {22C17254-2CB4-4AE7-A558-E3208E1D19D3} = {50C758FE-4E10-409A-94F5-A75480960864} + {F3FFE2E4-E89E-46A9-A180-FDA8908BA21D} = {D5478E0A-5D9C-4C1F-980C-7A9FC71F925E} + {E25E7929-2423-4C8A-9B03-DC4C8B19A2E5} = {D5478E0A-5D9C-4C1F-980C-7A9FC71F925E} + {05DB57B8-D0A5-499B-AD35-7093C2E9C9D7} = {E25E7929-2423-4C8A-9B03-DC4C8B19A2E5} + {A8E9400E-70DD-421F-8609-1C2FA4AE8E71} = {1614D1A4-5C3D-4D5B-8C89-426E37A564EF} + {9F1E0CE0-BF56-433F-8238-6C2B880EEF18} = {A8E9400E-70DD-421F-8609-1C2FA4AE8E71} + {C5C434A7-4E1F-456F-A23A-F2566C98301A} = {EC63FD88-5E12-46D7-B440-68F70241D987} + {081EE5E5-69D4-493C-9EB4-47423C4728AB} = {EC63FD88-5E12-46D7-B440-68F70241D987} + {316C0861-069B-4572-879F-F01E568F33A2} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {E87D865B-4EA8-4A30-B6C1-572D2061D707} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {C60B92DA-96F2-41EF-8594-864164A82C6A} = {6998CAA1-11D4-46B2-B80F-0AC882F58124} + {B8E69BF7-0F57-4959-867B-441E0428D169} = {C60B92DA-96F2-41EF-8594-864164A82C6A} + {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} = {6998CAA1-11D4-46B2-B80F-0AC882F58124} + {33B599D2-B231-4D17-8957-397E24B0FE33} = {C564DDD6-DE79-45CD-88EA-3F690481572A} + {A9D5F998-78D3-4DEE-883F-510A7C3AA587} = {C564DDD6-DE79-45CD-88EA-3F690481572A} + {A1D83459-24AC-4124-AE5F-09F0318AF0EB} = {94F3C036-A5F4-4ACC-A028-8506802ADB88} + {420BC8CC-EE70-49A1-964A-CB63414A882D} = {94F3C036-A5F4-4ACC-A028-8506802ADB88} + {66528BE6-FF53-4A3B-8675-46C0B929C83B} = {420BC8CC-EE70-49A1-964A-CB63414A882D} + {A9BAB840-A53E-405A-9458-CA0E02319FB4} = {420BC8CC-EE70-49A1-964A-CB63414A882D} + {5C40FA00-7D48-4F54-898C-01C8942E451D} = {50C758FE-4E10-409A-94F5-A75480960864} + {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} = {459BF674-83CB-46F6-881F-A2D2117DBF4D} + {094FB109-1CBC-4B84-8CFB-072E7B3EC637} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {F7B6C73A-6019-4EAE-9258-E08C0C57829F} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {75DB635C-0035-46E7-9A33-857D38082503} = {E1082E26-D700-4127-9329-66D673FD2D55} + {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} = {94F3C036-A5F4-4ACC-A028-8506802ADB88} + {C677BF3D-B234-491D-BA48-D9742DB564F8} = {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} + {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC} = {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} + {7A10CA08-6394-43D3-AFAA-4D696EA111C9} = {A8E9400E-70DD-421F-8609-1C2FA4AE8E71} + {3C0ACFD6-9FBE-46C2-B4A5-3C1839476A1D} = {A8E9400E-70DD-421F-8609-1C2FA4AE8E71} + {ED7F28E0-D0AF-417D-983D-3D874EEE8554} = {1614D1A4-5C3D-4D5B-8C89-426E37A564EF} + {D8BF12AC-AFCF-496B-BD34-2A52F7488066} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} + {7032668B-F5F4-450B-B007-14A46E9AE234} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} + {F28E8899-98D2-4915-8D48-D101D4837AB9} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {532ACF23-381B-4F54-AEA9-25B5485F9148} = {E1082E26-D700-4127-9329-66D673FD2D55} + {71FFE8BF-EBE4-4078-8484-86C6EA685D14} = {50C758FE-4E10-409A-94F5-A75480960864} + {A9C514B9-1EE2-4A12-8E8A-CE16D87545C3} = {1614D1A4-5C3D-4D5B-8C89-426E37A564EF} + {5FEA7500-0ACE-4C26-9A7B-2EB3958CBBC6} = {A9C514B9-1EE2-4A12-8E8A-CE16D87545C3} + {4F2926C8-43AB-4328-A735-D9EAD699F81D} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} + {5B56A734-D53C-4635-A53E-F889FCFCDD66} = {C564DDD6-DE79-45CD-88EA-3F690481572A} + {E8728693-3537-4007-A4DB-9F9634548755} = {E8AD265B-3C67-4640-AC58-A522F9FB3361} + {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} = {E4884871-4A1B-43BC-814F-E3D6E52B1673} + {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} = {E4884871-4A1B-43BC-814F-E3D6E52B1673} + {936C47A9-A7EA-4FBD-8733-CED1D4100E69} = {E4884871-4A1B-43BC-814F-E3D6E52B1673} + {CF056C95-51C4-4366-9D06-41D2B15EFEE4} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {918B7EE9-055B-4F5A-8F62-BB88913159B1} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {291F634A-2D8D-48B6-A1A0-BB9BC265D6E4} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {375B22F5-9D79-4D17-B759-F8220DFB8B70} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {56BBFDBD-254F-42B6-9984-46E19C53FB00} = {936C47A9-A7EA-4FBD-8733-CED1D4100E69} + {56DF52FC-A48C-4757-8130-A412050CEBB8} = {936C47A9-A7EA-4FBD-8733-CED1D4100E69} + {2B02595C-BB82-44F2-8FB7-423EF2DE3A73} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {0F1BC26B-5041-4D64-B533-2959287D8197} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {0A44978B-81FD-4565-9997-3E7218C66596} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {B3DD0741-2EC3-4A54-82B7-73923DE4CF48} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {546614BB-07AA-4E8E-B6AE-EBDC183C4DAB} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {EF6ACA06-D4DF-4C21-9F65-FBFEC6325094} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {5E8D70F3-990D-4B40-8B13-AA818F21E8A0} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {8441FA70-9041-4727-91B9-2F39881CC0EE} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {4BF0AF30-6E18-47D8-B90C-E99C1917BEF5} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {AFD9D653-08C4-456C-AA1B-F5C9F621D655} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {F26D31D3-CE4C-4F32-A77F-E2905C948674} = {42AB9AE1-631D-4AD4-85B7-910FF0940BDB} + {F351A992-18E4-473C-8ADD-2BA0BAA7B5A2} = {1BA0121E-0B83-4C8F-81BE-C293E7E35DCE} + {F68932B0-81A2-4CC3-A4F7-28091EE91B23} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7} = {50C758FE-4E10-409A-94F5-A75480960864} + {66CC98E3-6A1A-4C44-A23C-B575E82106EC} = {C564DDD6-DE79-45CD-88EA-3F690481572A} + {34969E49-FA6E-41BB-9813-5689BB14021E} = {936C47A9-A7EA-4FBD-8733-CED1D4100E69} + {B5F38A9E-1949-4779-8739-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {B5F38A9E-1949-4779-6666-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {FB39FACE-BAF2-4F97-A249-E45BA63D77FE} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {07C26A25-08C2-4C52-9574-1C33EC8E7919} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {A6976D43-B3A4-47AF-89D9-FA388B56B52B} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {DA908446-C6A1-473C-BF5C-83E600F5C69E} = {0AF0E771-4E09-4F05-B187-B43A2B9F62B0} + {9B37E707-EE0B-480E-AEB9-0176784879BE} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} + {CBC63DBF-892C-4F03-890E-D48F25509CC6} = {DA908446-C6A1-473C-BF5C-83E600F5C69E} + {AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {9B37E707-EE0B-480E-AEB9-0176784879BE} + {7A28BAB3-4396-415F-8473-2700027E57A7} = {9B37E707-EE0B-480E-AEB9-0176784879BE} + {36664529-91C2-49A5-BFDA-7D663FB19BC5} = {9B37E707-EE0B-480E-AEB9-0176784879BE} + {137B044D-31C4-4CF2-AB66-97C516AB8393} = {9B37E707-EE0B-480E-AEB9-0176784879BE} + {0BECADBB-8EE4-4C73-8341-30B041CFD4B8} = {9B37E707-EE0B-480E-AEB9-0176784879BE} + {E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} + {2E41CBBF-999A-40F1-BF65-EA68585CA070} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} + {306C0B6E-B797-40A0-994C-4F923E91F31B} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} + {B111C308-8B8B-4679-A229-39F80013D51E} = {CBC63DBF-892C-4F03-890E-D48F25509CC6} + {8F7B825D-24A8-4E09-AC5B-9117926B7BF3} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {26379D0E-4D4D-48CA-94B1-A2C1972AB335} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {A307B624-48D4-494E-A70D-5B3CDF6620CF} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {06747B55-91DB-47F5-B7A2-56526C28A0D3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {054C5BAC-3671-4F76-B32E-47CF4E64BB39} = {0AF0E771-4E09-4F05-B187-B43A2B9F62B0} + {1D950CD3-6778-4729-B6D9-446088093F34} = {054C5BAC-3671-4F76-B32E-47CF4E64BB39} + {C450F8F4-C40F-4C15-978F-F43BA7DEA29D} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {7042E8FF-472F-4CB5-8AAE-DAD87BA32207} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {5DDA6439-CDE0-4BFE-8BF9-77962BC69ACA} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {6E1ADE49-680E-4CA3-8FEA-6450802F8250} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {A3E22F99-F380-4005-8483-3ACA6C104220} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {9538341F-8A00-4356-A2B2-5C2959979F22} = {50C758FE-4E10-409A-94F5-A75480960864} + {23FEFC89-5D2F-491C-BBE0-0E73AFD8BA47} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {55905937-1399-46DB-BA38-E426801CB759} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9} = {E1082E26-D700-4127-9329-66D673FD2D55} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50} + EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{2e41cbbf-999a-40f1-bf65-ea68585ca070}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{306c0b6e-b797-40a0-994c-4f923e91f31b}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{7a28bab3-4396-415f-8473-2700027e57a7}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{ae2513cb-4e5e-4e5c-8237-88954d4c9433}*SharedItemsImports = 13 + src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{b111c308-8b8b-4679-a229-39f80013d51e}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{b111c308-8b8b-4679-a229-39f80013d51e}*SharedItemsImports = 5 + src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{e175485b-3c8c-47d7-8dd5-f7fed627eb25}*SharedItemsImports = 13 + EndGlobalSection +EndGlobal diff --git a/Microsoft.Maui.LegacyControlGallery.slnf b/Microsoft.Maui.LegacyControlGallery.slnf deleted file mode 100644 index 9298a4ee57bf..000000000000 --- a/Microsoft.Maui.LegacyControlGallery.slnf +++ /dev/null @@ -1,67 +0,0 @@ -{ - "solution": { - "path": "Microsoft.Maui-dev.sln", - "projects": [ - "src\\BlazorWebView\\samples\\MauiRazorClassLibrarySample\\MauiRazorClassLibrarySample.csproj", - "src\\BlazorWebView\\src\\Maui\\Microsoft.AspNetCore.Components.WebView.Maui.csproj", - "src\\Compatibility\\ControlGallery\\src\\Android\\Compatibility.ControlGallery.Android.csproj", - "src\\Compatibility\\ControlGallery\\src\\Core\\Compatibility.ControlGallery.Core.csproj", - "src\\Compatibility\\ControlGallery\\src\\Issues.Shared\\Compatibility.ControlGallery.Issues.Shared.shproj", - "src\\Compatibility\\ControlGallery\\src\\UITests.Shared\\Compatibility.UITests.Shared.shproj", - "src\\Compatibility\\ControlGallery\\src\\WinUI\\Compatibility.ControlGallery.WinUI.csproj", - "src\\Compatibility\\ControlGallery\\src\\iOS\\Compatibility.ControlGallery.iOS.csproj", - "src\\Compatibility\\ControlGallery\\test\\Android.UITests\\Compatibility.ControlGallery.Android.UITests.csproj", - "src\\Compatibility\\ControlGallery\\test\\WinUI.UITests\\WinUI.UITests.csproj", - "src\\Compatibility\\ControlGallery\\test\\iOS.UITests\\Compatibility.ControlGallery.iOS.UITests.csproj", - "src\\Controls\\Foldable\\src\\Controls.Foldable.csproj", - "src\\Controls\\Maps\\src\\Controls.Maps.csproj", - "src\\Controls\\samples\\Controls.Sample.Profiling\\Maui.Controls.Sample.Profiling.csproj", - "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\samples\\Controls.Sample.UITests\\Controls.Sample.UITests.csproj", - "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj", - "src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks.csproj", - "src\\Controls\\src\\Core.Design\\Controls.Core.Design.csproj", - "src\\Controls\\src\\Core\\Controls.Core.csproj", - "src\\Controls\\src\\NuGet\\Controls.NuGet.csproj", - "src\\Controls\\src\\SourceGen\\Controls.SourceGen.csproj", - "src\\Controls\\src\\Xaml.Design\\Controls.Xaml.Design.csproj", - "src\\Controls\\src\\Xaml\\Controls.Xaml.csproj", - "src\\Controls\\tests\\Core.Design.UnitTests\\Controls.Core.Design.UnitTests.csproj", - "src\\Controls\\tests\\Core.UnitTests\\Controls.Core.UnitTests.csproj", - "src\\Controls\\tests\\CustomAttributes\\Controls.CustomAttributes.csproj", - "src\\Controls\\tests\\DeviceTests\\Controls.DeviceTests.csproj", - "src\\Controls\\tests\\UITests\\Controls.AppiumTests.csproj", - "src\\Controls\\tests\\Xaml.UnitTests.ExternalAssembly\\Controls.Xaml.UnitTests.ExternalAssembly.csproj", - "src\\Controls\\tests\\Xaml.UnitTests.InternalsHiddenAssembly\\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", - "src\\Controls\\tests\\Xaml.UnitTests.InternalsVisibleAssembly\\Controls.Xaml.UnitTests.InternalsVisibleAssembly.csproj", - "src\\Controls\\tests\\Xaml.UnitTests\\Controls.Xaml.UnitTests.csproj", - "src\\Core\\maps\\src\\Maps.csproj", - "src\\Core\\src\\Core.csproj", - "src\\Core\\tests\\Benchmarks.Droid\\Benchmarks.Droid.csproj", - "src\\Core\\tests\\Benchmarks\\Core.Benchmarks.csproj", - "src\\Core\\tests\\DeviceTests.Shared\\Core.DeviceTests.Shared.csproj", - "src\\Core\\tests\\DeviceTests\\Core.DeviceTests.csproj", - "src\\Core\\tests\\UnitTests\\Core.UnitTests.csproj", - "src\\Essentials\\samples\\Sample.Server.WebAuthenticator\\Essentials.Sample.Server.WebAuthenticator.csproj", - "src\\Essentials\\samples\\Samples\\Essentials.Sample.csproj", - "src\\Essentials\\src\\Essentials.csproj", - "src\\Essentials\\test\\DeviceTests\\Essentials.DeviceTests.csproj", - "src\\Essentials\\test\\UnitTests\\Essentials.UnitTests.csproj", - "src\\Graphics\\src\\Graphics.Skia.GtkSharp\\Graphics.Skia.GtkSharp.csproj", - "src\\Graphics\\src\\Graphics.Skia.WPF\\Graphics.Skia.WPF.csproj", - "src\\Graphics\\src\\Graphics.Skia\\Graphics.Skia.csproj", - "src\\Graphics\\src\\Graphics.Win2D\\Graphics.Win2D.csproj", - "src\\Graphics\\src\\Graphics\\Graphics.csproj", - "src\\Graphics\\src\\Text.Markdig\\Graphics.Text.Markdig.csproj", - "src\\Graphics\\tests\\DeviceTests\\Graphics.DeviceTests.csproj", - "src\\Graphics\\tests\\Graphics.Benchmarks\\Graphics.Benchmarks.csproj", - "src\\Graphics\\tests\\Graphics.Tests\\Graphics.Tests.csproj", - "src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj", - "src\\TestUtils\\src\\DeviceTests.Runners.SourceGen\\TestUtils.DeviceTests.Runners.SourceGen.csproj", - "src\\TestUtils\\src\\DeviceTests.Runners\\TestUtils.DeviceTests.Runners.csproj", - "src\\TestUtils\\src\\DeviceTests\\TestUtils.DeviceTests.csproj", - "src\\TestUtils\\src\\Microsoft.Maui.IntegrationTests\\Microsoft.Maui.IntegrationTests.csproj", - "src\\TestUtils\\src\\TestUtils\\TestUtils.csproj" - ] - } -} \ No newline at end of file diff --git a/Microsoft.Maui.Samples.slnf b/Microsoft.Maui.Samples.slnf deleted file mode 100644 index 1b03fe735ac9..000000000000 --- a/Microsoft.Maui.Samples.slnf +++ /dev/null @@ -1,11 +0,0 @@ -{ - "solution": { - "path": "Microsoft.Maui.sln", - "projects": [ - "src\\BlazorWebView\\samples\\MauiRazorClassLibrarySample\\MauiRazorClassLibrarySample.csproj", - "src\\Controls\\samples\\Controls.Sample.Sandbox\\Maui.Controls.Sample.Sandbox.csproj", - "src\\Controls\\samples\\Controls.Sample.UITests\\Controls.Sample.UITests.csproj", - "src\\Controls\\samples\\Controls.Sample\\Maui.Controls.Sample.csproj" - ] - } -} \ No newline at end of file diff --git a/Microsoft.Maui.sln b/Microsoft.Maui.sln index 3ae8942ce0ec..37120883248f 100644 --- a/Microsoft.Maui.sln +++ b/Microsoft.Maui.sln @@ -110,34 +110,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.CustomAttributes", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Profiling", "src\Controls\samples\Controls.Sample.Profiling\Maui.Controls.Sample.Profiling.csproj", "{75DB635C-0035-46E7-9A33-857D38082503}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{FA181CD5-95AF-46B7-95D2-852F2398833C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core.csproj", "{772E2531-2270-429A-9AFB-4AA0104AEF27}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.ControlGallery.Issues.Shared", "src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.shproj", "{AE2513CB-4E5E-4E5C-8237-88954D4C9433}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Android.AppLinks", "src\Compatibility\Android.AppLinks\src\Compatibility.Android.AppLinks.csproj", "{742AB9F4-B2A3-464F-9584-7D07E28D0716}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Maps.Android", "src\Compatibility\Maps\src\Android\Compatibility.Maps.Android.csproj", "{B2859A87-D1C2-4F34-B2C7-C19317CD5872}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Maps.iOS", "src\Compatibility\Maps\src\iOS\Compatibility.Maps.iOS.csproj", "{ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maps", "Maps", "{05D8C6AD-A954-4A36-A8EE-4148A6FB88C9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FF1F68E5-3474-4456-B67B-08526E51934E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{DDBA9144-36FC-429E-99E1-2A64825434C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android", "src\Compatibility\ControlGallery\src\Android\Compatibility.ControlGallery.Android.csproj", "{BB933AF2-9498-4C4E-9F76-AF66A550BED3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS", "src\Compatibility\ControlGallery\src\iOS\Compatibility.ControlGallery.iOS.csproj", "{C7131F14-274F-4B55-ACA9-E81731AD012F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Android.UITests", "src\Compatibility\ControlGallery\test\Android.UITests\Compatibility.ControlGallery.Android.UITests.csproj", "{A34EBE01-25BF-4E69-A2DC-2288DC625541}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.iOS.UITests", "src\Compatibility\ControlGallery\test\iOS.UITests\Compatibility.ControlGallery.iOS.UITests.csproj", "{EADD8100-B3AE-4A31-92C4-267A64A1C6EB}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.UITests.Shared", "src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.Shared.shproj", "{E175485B-3C8C-47D7-8DD5-F7FED627EB25}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{95BF8553-3D9D-4831-ACDD-A3E697BC08A6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample", "src\Essentials\samples\Samples\Essentials.Sample.csproj", "{C677BF3D-B234-491D-BA48-D9742DB564F8}" @@ -154,10 +128,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Compon EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Wpf", "src\BlazorWebView\src\Wpf\Microsoft.AspNetCore.Components.WebView.Wpf.csproj", "{7032668B-F5F4-450B-B007-14A46E9AE234}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.WinUI", "src\Compatibility\ControlGallery\src\WinUI\Compatibility.ControlGallery.WinUI.csproj", "{7F8688A8-748E-4A04-826D-24F4535BF839}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinUI.UITests", "src\Compatibility\ControlGallery\test\WinUI.UITests\WinUI.UITests.csproj", "{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "src\TestUtils\src\DeviceTests\TestUtils.DeviceTests.csproj", "{F28E8899-98D2-4915-8D48-D101D4837AB9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.DeviceTests", "src\Controls\tests\DeviceTests\Controls.DeviceTests.csproj", "{C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36}" @@ -237,8 +207,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests.Shared", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.DeviceTests", "src\Graphics\tests\DeviceTests\Graphics.DeviceTests.csproj", "{34969E49-FA6E-41BB-9813-5689BB14021E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.AppiumTests", "src\Controls\tests\UITests\Controls.AppiumTests.csproj", "{A23B108A-AB56-4692-B9DA-0E23602E3955}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.ExternalAssembly", "src\Controls\tests\Xaml.UnitTests.ExternalAssembly\Controls.Xaml.UnitTests.ExternalAssembly.csproj", "{F2ADA552-6328-4B2D-8D48-FCDD32C4AF60}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsVisibleAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsVisibleAssembly\Controls.Xaml.UnitTests.InternalsVisibleAssembly.csproj", "{B5F38A9E-1949-4779-6666-D682B09E0CB3}" @@ -247,13 +215,37 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.IntegrationT EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests.InternalsHiddenAssembly", "src\Controls\tests\Xaml.UnitTests.InternalsHiddenAssembly\Controls.Xaml.UnitTests.InternalsHiddenAssembly.csproj", "{FB39FACE-BAF2-4F97-A249-E45BA63D77FE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Sample.UITests", "src\Controls\samples\Controls.Sample.UITests\Controls.Sample.UITests.csproj", "{F39F75DC-671B-4649-8005-1929797B3217}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.HostApp", "src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj", "{F39F75DC-671B-4649-8005-1929797B3217}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{352C2381-1DEC-4487-819D-340D1EA98FBE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{8C8CD467-11F9-4A14-8AF3-047B2CFD19A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{8050448A-E08F-4972-9B47-16042A5DFE82}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{6730CE13-8567-4DC8-B2AF-B12C39818825}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Core.UnitTests", "src\Compatibility\Core\tests\Compatibility.UnitTests\Compatibility.Core.UnitTests.csproj", "{9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SourceGen.UnitTests", "src\Controls\tests\SourceGen.UnitTests\SourceGen.UnitTests.csproj", "{199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Core", "src\TestUtils\src\UITest.Core\UITest.Core.csproj", "{352C2381-1DEC-4487-819D-340D1EA98FBE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Shared.Tests", "src\Controls\tests\TestCases.Shared.Tests\Controls.TestCases.Shared.Tests.csproj", "{759A73E9-0F51-4A44-BA03-9B2AE4524423}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Appium", "src\TestUtils\src\UITest.Appium\UITest.Appium.csproj", "{8C8CD467-11F9-4A14-8AF3-047B2CFD19A7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Android.Tests", "src\Controls\tests\TestCases.Android.Tests\Controls.TestCases.Android.Tests.csproj", "{6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.NUnit", "src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj", "{8050448A-E08F-4972-9B47-16042A5DFE82}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.iOS.Tests", "src\Controls\tests\TestCases.iOS.Tests\Controls.TestCases.iOS.Tests.csproj", "{29115330-6854-4715-B382-18EA3A8A8731}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.Mac.Tests", "src\Controls\tests\TestCases.Mac.Tests\Controls.TestCases.Mac.Tests.csproj", "{E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.TestCases.WinUI.Tests", "src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj", "{A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen", "src\Controls\src\BindingSourceGen\Controls.BindingSourceGen.csproj", "{83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls.BindingSourceGen.UnitTests", "src\Controls\tests\BindingSourceGen.UnitTests\Controls.BindingSourceGen.UnitTests.csproj", "{6AEE83CC-08CA-466A-BA86-774BE88A541B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Analyzers", "src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj", "{F1BC506B-3A9E-4779-994E-339AFB21C9B9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.Embedding", "src\Controls\samples\Controls.Sample.Embedding\Maui.Controls.Sample.Embedding.csproj", "{4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -399,42 +391,10 @@ Global {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.ActiveCfg = Release|Any CPU {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.Build.0 = Release|Any CPU {75DB635C-0035-46E7-9A33-857D38082503}.Release|Any CPU.Deploy.0 = Release|Any CPU - {772E2531-2270-429A-9AFB-4AA0104AEF27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {772E2531-2270-429A-9AFB-4AA0104AEF27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {772E2531-2270-429A-9AFB-4AA0104AEF27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {772E2531-2270-429A-9AFB-4AA0104AEF27}.Release|Any CPU.Build.0 = Release|Any CPU {742AB9F4-B2A3-464F-9584-7D07E28D0716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {742AB9F4-B2A3-464F-9584-7D07E28D0716}.Debug|Any CPU.Build.0 = Debug|Any CPU {742AB9F4-B2A3-464F-9584-7D07E28D0716}.Release|Any CPU.ActiveCfg = Release|Any CPU {742AB9F4-B2A3-464F-9584-7D07E28D0716}.Release|Any CPU.Build.0 = Release|Any CPU - {B2859A87-D1C2-4F34-B2C7-C19317CD5872}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2859A87-D1C2-4F34-B2C7-C19317CD5872}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2859A87-D1C2-4F34-B2C7-C19317CD5872}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2859A87-D1C2-4F34-B2C7-C19317CD5872}.Release|Any CPU.Build.0 = Release|Any CPU - {ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}.Release|Any CPU.Build.0 = Release|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Release|Any CPU.Build.0 = Release|Any CPU - {BB933AF2-9498-4C4E-9F76-AF66A550BED3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Release|Any CPU.Build.0 = Release|Any CPU - {C7131F14-274F-4B55-ACA9-E81731AD012F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A34EBE01-25BF-4E69-A2DC-2288DC625541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A34EBE01-25BF-4E69-A2DC-2288DC625541}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A34EBE01-25BF-4E69-A2DC-2288DC625541}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A34EBE01-25BF-4E69-A2DC-2288DC625541}.Release|Any CPU.Build.0 = Release|Any CPU - {EADD8100-B3AE-4A31-92C4-267A64A1C6EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EADD8100-B3AE-4A31-92C4-267A64A1C6EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EADD8100-B3AE-4A31-92C4-267A64A1C6EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EADD8100-B3AE-4A31-92C4-267A64A1C6EB}.Release|Any CPU.Build.0 = Release|Any CPU {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {C677BF3D-B234-491D-BA48-D9742DB564F8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -461,16 +421,6 @@ Global {7032668B-F5F4-450B-B007-14A46E9AE234}.Debug|Any CPU.Build.0 = Debug|Any CPU {7032668B-F5F4-450B-B007-14A46E9AE234}.Release|Any CPU.ActiveCfg = Release|Any CPU {7032668B-F5F4-450B-B007-14A46E9AE234}.Release|Any CPU.Build.0 = Release|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Release|Any CPU.Build.0 = Release|Any CPU - {7F8688A8-748E-4A04-826D-24F4535BF839}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|Any CPU.Build.0 = Release|Any CPU {F28E8899-98D2-4915-8D48-D101D4837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F28E8899-98D2-4915-8D48-D101D4837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU {F28E8899-98D2-4915-8D48-D101D4837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -607,10 +557,6 @@ Global {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.ActiveCfg = Release|Any CPU {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.Build.0 = Release|Any CPU {34969E49-FA6E-41BB-9813-5689BB14021E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A23B108A-AB56-4692-B9DA-0E23602E3955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A23B108A-AB56-4692-B9DA-0E23602E3955}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A23B108A-AB56-4692-B9DA-0E23602E3955}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A23B108A-AB56-4692-B9DA-0E23602E3955}.Release|Any CPU.Build.0 = Release|Any CPU {F2ADA552-6328-4B2D-8D48-FCDD32C4AF60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2ADA552-6328-4B2D-8D48-FCDD32C4AF60}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2ADA552-6328-4B2D-8D48-FCDD32C4AF60}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -644,6 +590,52 @@ Global {8050448A-E08F-4972-9B47-16042A5DFE82}.Debug|Any CPU.Build.0 = Debug|Any CPU {8050448A-E08F-4972-9B47-16042A5DFE82}.Release|Any CPU.ActiveCfg = Release|Any CPU {8050448A-E08F-4972-9B47-16042A5DFE82}.Release|Any CPU.Build.0 = Release|Any CPU + {9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7}.Release|Any CPU.Build.0 = Release|Any CPU + {199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B}.Release|Any CPU.Build.0 = Release|Any CPU + {759A73E9-0F51-4A44-BA03-9B2AE4524423}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {759A73E9-0F51-4A44-BA03-9B2AE4524423}.Debug|Any CPU.Build.0 = Debug|Any CPU + {759A73E9-0F51-4A44-BA03-9B2AE4524423}.Release|Any CPU.ActiveCfg = Release|Any CPU + {759A73E9-0F51-4A44-BA03-9B2AE4524423}.Release|Any CPU.Build.0 = Release|Any CPU + {6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7}.Release|Any CPU.Build.0 = Release|Any CPU + {29115330-6854-4715-B382-18EA3A8A8731}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29115330-6854-4715-B382-18EA3A8A8731}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29115330-6854-4715-B382-18EA3A8A8731}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29115330-6854-4715-B382-18EA3A8A8731}.Release|Any CPU.Build.0 = Release|Any CPU + {E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4}.Release|Any CPU.Build.0 = Release|Any CPU + {A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02}.Release|Any CPU.Build.0 = Release|Any CPU + {83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5}.Release|Any CPU.Build.0 = Release|Any CPU + {6AEE83CC-08CA-466A-BA86-774BE88A541B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AEE83CC-08CA-466A-BA86-774BE88A541B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AEE83CC-08CA-466A-BA86-774BE88A541B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AEE83CC-08CA-466A-BA86-774BE88A541B}.Release|Any CPU.Build.0 = Release|Any CPU + {F1BC506B-3A9E-4779-994E-339AFB21C9B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1BC506B-3A9E-4779-994E-339AFB21C9B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1BC506B-3A9E-4779-994E-339AFB21C9B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1BC506B-3A9E-4779-994E-339AFB21C9B9}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -694,20 +686,7 @@ Global {F7A258F6-F4CB-4209-9E63-AECDB2E1F4ED} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {F7B6C73A-6019-4EAE-9258-E08C0C57829F} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {75DB635C-0035-46E7-9A33-857D38082503} = {E1082E26-D700-4127-9329-66D673FD2D55} - {FA181CD5-95AF-46B7-95D2-852F2398833C} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2} - {772E2531-2270-429A-9AFB-4AA0104AEF27} = {FF1F68E5-3474-4456-B67B-08526E51934E} - {AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {FF1F68E5-3474-4456-B67B-08526E51934E} {742AB9F4-B2A3-464F-9584-7D07E28D0716} = {446EB407-57EB-441D-9ADB-1A006CBF672A} - {B2859A87-D1C2-4F34-B2C7-C19317CD5872} = {05D8C6AD-A954-4A36-A8EE-4148A6FB88C9} - {ABA078C4-F9BB-4924-8B2B-10FE0D2F5491} = {05D8C6AD-A954-4A36-A8EE-4148A6FB88C9} - {05D8C6AD-A954-4A36-A8EE-4148A6FB88C9} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2} - {FF1F68E5-3474-4456-B67B-08526E51934E} = {FA181CD5-95AF-46B7-95D2-852F2398833C} - {DDBA9144-36FC-429E-99E1-2A64825434C1} = {FA181CD5-95AF-46B7-95D2-852F2398833C} - {BB933AF2-9498-4C4E-9F76-AF66A550BED3} = {FF1F68E5-3474-4456-B67B-08526E51934E} - {C7131F14-274F-4B55-ACA9-E81731AD012F} = {FF1F68E5-3474-4456-B67B-08526E51934E} - {A34EBE01-25BF-4E69-A2DC-2288DC625541} = {DDBA9144-36FC-429E-99E1-2A64825434C1} - {EADD8100-B3AE-4A31-92C4-267A64A1C6EB} = {DDBA9144-36FC-429E-99E1-2A64825434C1} - {E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {DDBA9144-36FC-429E-99E1-2A64825434C1} {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} = {94F3C036-A5F4-4ACC-A028-8506802ADB88} {C677BF3D-B234-491D-BA48-D9742DB564F8} = {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} {F7DB0CB3-D244-403A-8C3B-B1ED5E5838EC} = {95BF8553-3D9D-4831-ACDD-A3E697BC08A6} @@ -716,8 +695,6 @@ Global {ED7F28E0-D0AF-417D-983D-3D874EEE8554} = {1614D1A4-5C3D-4D5B-8C89-426E37A564EF} {D8BF12AC-AFCF-496B-BD34-2A52F7488066} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} {7032668B-F5F4-450B-B007-14A46E9AE234} = {ED7F28E0-D0AF-417D-983D-3D874EEE8554} - {7F8688A8-748E-4A04-826D-24F4535BF839} = {FF1F68E5-3474-4456-B67B-08526E51934E} - {0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF} = {DDBA9144-36FC-429E-99E1-2A64825434C1} {F28E8899-98D2-4915-8D48-D101D4837AB9} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {C8B3C3B3-1CDA-41A2-BF20-A7FE33D6BB36} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {532ACF23-381B-4F54-AEA9-25B5485F9148} = {E1082E26-D700-4127-9329-66D673FD2D55} @@ -753,28 +730,28 @@ Global {4A6930AE-B67C-4D29-B1A8-ED9EB7F923A7} = {50C758FE-4E10-409A-94F5-A75480960864} {66CC98E3-6A1A-4C44-A23C-B575E82106EC} = {C564DDD6-DE79-45CD-88EA-3F690481572A} {34969E49-FA6E-41BB-9813-5689BB14021E} = {936C47A9-A7EA-4FBD-8733-CED1D4100E69} - {A23B108A-AB56-4692-B9DA-0E23602E3955} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {F2ADA552-6328-4B2D-8D48-FCDD32C4AF60} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {B5F38A9E-1949-4779-6666-D682B09E0CB3} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {1C899C94-8744-4E2A-8E23-1660393236FD} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {FB39FACE-BAF2-4F97-A249-E45BA63D77FE} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} - {F39F75DC-671B-4649-8005-1929797B3217} = {E1082E26-D700-4127-9329-66D673FD2D55} + {F39F75DC-671B-4649-8005-1929797B3217} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} {352C2381-1DEC-4487-819D-340D1EA98FBE} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {8C8CD467-11F9-4A14-8AF3-047B2CFD19A7} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} {8050448A-E08F-4972-9B47-16042A5DFE82} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {6730CE13-8567-4DC8-B2AF-B12C39818825} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2} + {9F3DD0E7-8A71-4BA8-A3E6-690DC5A9F3D7} = {6730CE13-8567-4DC8-B2AF-B12C39818825} + {199777D4-0EA9-4AAB-82A0-0B53D4BA9E4B} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {759A73E9-0F51-4A44-BA03-9B2AE4524423} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {6A6AA47E-4913-46B3-84A8-A0C9CF3EB4F7} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {29115330-6854-4715-B382-18EA3A8A8731} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {E8CAE2B6-62B3-431C-A76D-1CCD961A1FB4} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {A1D6B9E5-D8FF-436A-9ACF-703CA5E4BD02} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {83C5E677-A9C8-4E46-B72C-CAF04DC5D3D5} = {50C758FE-4E10-409A-94F5-A75480960864} + {6AEE83CC-08CA-466A-BA86-774BE88A541B} = {25D0D27A-C5FE-443D-8B65-D6C987F4A80E} + {F1BC506B-3A9E-4779-994E-339AFB21C9B9} = {7AC28763-9C68-4BF9-A1BA-25CBFFD2D15C} + {4ADCBA87-30DB-44F5-85E9-94A4F4132FD9} = {E1082E26-D700-4127-9329-66D673FD2D55} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50} EndGlobalSection - GlobalSection(SharedMSBuildProjectFiles) = preSolution - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{772e2531-2270-429a-9afb-4aa0104aef27}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{a34ebe01-25bf-4e69-a2dc-2288dc625541}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{a34ebe01-25bf-4e69-a2dc-2288dc625541}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{ae2513cb-4e5e-4e5c-8237-88954d4c9433}*SharedItemsImports = 13 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{e175485b-3c8c-47d7-8dd5-f7fed627eb25}*SharedItemsImports = 13 - src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{eadd8100-b3ae-4a31-92c4-267a64a1c6eb}*SharedItemsImports = 5 - src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{eadd8100-b3ae-4a31-92c4-267a64a1c6eb}*SharedItemsImports = 5 - EndGlobalSection EndGlobal diff --git a/NuGet.config b/NuGet.config index 7c8de06d63f3..12cb64845ac2 100644 --- a/NuGet.config +++ b/NuGet.config @@ -1,14 +1,26 @@ + + - + + + + + + + + - + + + + diff --git a/README.md b/README.md index ef1b7e4c8e97..6a07d025e7b3 100644 --- a/README.md +++ b/README.md @@ -13,18 +13,20 @@ ## Overview -.NET Multi-platform App UI (.NET MAUI) is the evolution of Xamarin.Forms that expands capabilities beyond mobile Android and iOS into desktop apps for Windows and macOS. With .NET MAUI, you can build apps that perform great for any device that runs Windows, macOS, Android, & iOS from a single codebase. Coupled with Visual Studio productivity tools and emulators, .NET and Visual Studio significantly speed up the development process for building apps that target the widest possible set of devices. Use a single development stack that supports the best of breed solutions for all modern workloads with a unified SDK, base class libraries, and toolchain. [Read More](https://docs.microsoft.com/dotnet/maui/what-is-maui) +.NET Multi-platform App UI (.NET MAUI) is the evolution of Xamarin.Forms that expand capabilities beyond mobile Android and iOS into desktop apps for Windows and macOS. With .NET MAUI, you can build apps that perform great on any device that runs Windows, macOS, Android, & iOS from a single codebase. Coupled with Visual Studio productivity tools and emulators, .NET and Visual Studio significantly speed up the development process for building apps that target the widest possible set of devices. Use a single development stack that supports the best-of-breed solutions for all modern workloads with a unified SDK, base class libraries, and a toolchain. [Read More](https://docs.microsoft.com/dotnet/maui/what-is-maui) ![.NET MAUI Weather App on all platforms](Assets/maui-weather-hero-sm.png) ## Current News -* November 14, 2023 - [Announcing .NET MAUI in .NET 8](https://devblogs.microsoft.com/dotnet/announcing-dotnet-maui-in-dotnet-8/) +* November 13, 2024 - [What's new in .NET MAUI for .NET 9](https://learn.microsoft.com/dotnet/maui/whats-new/dotnet-9) +* November 12, 2024 - [Announcing .NET 9](https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/#.net-maui-–-enhancing-multi-platform-app-development) +* October 22, 2024 - [.NET MAUI Welcomes Syncfusion Open-source Contributions](https://devblogs.microsoft.com/dotnet/dotnet-maui-welcomes-syncfusion-open-source-contributions/) Follow the [.NET MAUI Blog](https://devblogs.microsoft.com/dotnet/category/net-maui/) and visit the [News](https://github.com/dotnet/maui/wiki/News) wiki page for more news and updates. ## FAQs -Do you have questions? Do not worry, we have prepared a complete [FAQ](https://github.com/dotnet/maui/wiki/FAQs) answering the most common questions. +Do you have questions? Do not worry; we have prepared a complete [FAQ](https://github.com/dotnet/maui/wiki/FAQs) answering the most common questions. ## How to Engage, Contribute, and Give Feedback diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index db7e81c4b916..000000000000 --- a/SECURITY.md +++ /dev/null @@ -1,37 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [many more](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [definition](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** Instead, please report them to the Microsoft Security Response Center at [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://technet.microsoft.com/en-us/security/dn606155). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -Reports via MSRC may qualify for the .NET Core Bug Bounty. Details of the .NET Core Bug Bounty including terms and conditions are at https://aka.ms/corebounty. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). - - diff --git a/THIRD-PARTY-NOTICES.TXT b/THIRD-PARTY-NOTICES.TXT index b93840c3b5c2..3ea5936c902a 100644 --- a/THIRD-PARTY-NOTICES.TXT +++ b/THIRD-PARTY-NOTICES.TXT @@ -521,3 +521,63 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= + + +License notice for .NET Community Toolkit +========================================= + +(https://github.com/CommunityToolkit/dotnet/blob/main/License.md) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= + + +License notice for BenchmarkDotNet +========================================= + +(https://github.com/dotnet/BenchmarkDotNet/blob/master/LICENSE.md) + +The MIT License (MIT) + +Copyright (c) 2013–2024 .NET Foundation and contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= diff --git a/build.cake b/build.cake index a6aeb0eaed16..ac9ef9687a5e 100644 --- a/build.cake +++ b/build.cake @@ -27,9 +27,9 @@ PowerShell: ////////////////////////////////////////////////////////////////////// // TOOLS ////////////////////////////////////////////////////////////////////// -#tool "nuget:?package=NUnit.ConsoleRunner&version=3.16.3" #tool "nuget:?package=nuget.commandline&version=6.6.1" + ////////////////////////////////////////////////////////////////////// // ARGUMENTS ////////////////////////////////////////////////////////////////////// diff --git a/build.cmd b/build.cmd index 4dded3f9274a..c70d2b3757e4 100644 --- a/build.cmd +++ b/build.cmd @@ -1,6 +1,9 @@ -@ECHO OFF -SETLOCAL -PowerShell -NoProfile -NoLogo -ExecutionPolicy Bypass -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = ''; try { & '%~dp0build.ps1' %*; exit $LASTEXITCODE } catch { write-host $_; exit 1 }" -SET exit_code=%ERRORLEVEL% -ECHO build.cmd completed -EXIT /b %exit_code% \ No newline at end of file +@echo off +setlocal + +set _args=%* +if "%~1"=="-?" set _args=-help +if "%~1"=="/?" set _args=-help + +powershell -ExecutionPolicy ByPass -NoProfile -Command "& '%~dp0eng\build.ps1'" %_args% +exit /b %ERRORLEVEL% \ No newline at end of file diff --git a/build.ps1 b/build.ps1 old mode 100644 new mode 100755 index 251cde9f9f05..92bfb4d8444c --- a/build.ps1 +++ b/build.ps1 @@ -9,11 +9,11 @@ Param( ) # Restore Cake tool -& dotnet tool restore -# $tools = Get-Content ".config/dotnet-tools.json" | ConvertFrom-Json -# foreach ($tool in $tools.tools.PsObject.Properties) { -# & dotnet tool install $tool.Name --version $tool.Value.version -# } +$tools = Get-Content ".config/dotnet-tools.json" | ConvertFrom-Json +foreach ($tool in $tools.tools.PsObject.Properties) { + & dotnet tool install $tool.Name --version $tool.Value.version +} + # Build Cake arguments $cakeArguments = @("$Script"); @@ -21,4 +21,4 @@ if ($Target) { $cakeArguments += "--target=$Target" } $cakeArguments += $ScriptArgs & dotnet tool run dotnet-cake -- $cakeArguments -exit $LASTEXITCODE +exit $LASTEXITCODE \ No newline at end of file diff --git a/build.sh b/build.sh index 6dbd8964f81b..a5e46e950a35 100755 --- a/build.sh +++ b/build.sh @@ -1,30 +1,16 @@ #!/usr/bin/env bash -# script inspired by https://andrewlock.net/simplifying-the-cake-global-tool-bootstrapper-scripts-in-netcore3-with-local-tools/ +source="${BASH_SOURCE[0]}" -# Define default arguments. -SCRIPT="build.cake" -CAKE_ARGUMENTS=() +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" -# Parse arguments. -for i in "$@"; do - case $1 in - -s|--script) SCRIPT="$2"; shift ;; - --) shift; CAKE_ARGUMENTS+=("$@"); break ;; - *) CAKE_ARGUMENTS+=("$1") ;; - esac - shift + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" done -# Restore Cake tool -dotnet tool restore - -if [ $? -ne 0 ]; then - echo "An error occurred while installing Cake." - exit 1 -fi - -echo "${CAKE_ARGUMENTS[@]}" - -# Start Cake -dotnet tool run dotnet-cake "$SCRIPT" "${CAKE_ARGUMENTS[@]}" +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" +"$scriptroot/eng/build.sh" $@ \ No newline at end of file diff --git a/docs/CgManifest.md b/docs/CgManifest.md new file mode 100644 index 000000000000..3c03653c4ed0 --- /dev/null +++ b/docs/CgManifest.md @@ -0,0 +1,125 @@ +# Component Governance Manifest (cgmanifest.json) + +This document explains how to manage, update, and include the `cgmanifest.json` file in the MAUI project. + +## What is cgmanifest.json? + +The Component Governance Manifest (`cgmanifest.json`) is a file that lists all the third-party components used in the project. It helps with tracking dependencies and their versions for security and compliance purposes. + +## Automatic Generation + +The project includes scripts to automatically generate and update the `cgmanifest.json` file with package versions from the `Versions.props` file. + +### Using Cake Build Script + +Run the `GenerateCgManifest` task: + +```bash +dotnet tool resotre +dotnet cake --target=GenerateCgManifest --workloads=global +``` + +### Using Scripts Directly + +You can also run the PowerShell script directly (works on both Windows and macOS/Linux): + +```bash +# On all platforms (Windows/macOS/Linux) +pwsh -ExecutionPolicy Bypass -File ./eng/scripts/update-cgmanifest.ps1 +``` + +### MSBuild Integration + +The `CgManifest.targets` file provides MSBuild integration. + +#### Default Behavior + +By default, the cgmanifest.json file is **always generated** during build, but it is **not included** in the NuGet package. This ensures the manifest is always up-to-date without affecting package contents. + +#### Manual Generation + +You can explicitly generate the manifest file: + +```bash +dotnet build -t:GenerateCgManifest +``` + +#### Disabling Generation + +If needed, you can temporarily disable the automatic generation: + +```bash +dotnet build -p:UpdateCgManifestBeforeBuild=false +``` + +## Including CG Manifest in CI Builds + +For CI builds where you want to include the cgmanifest.json in the package: + +```bash +dotnet build -p:GenerateCgManifest=true +``` +OR +```bash +dotnet pack -p:GenerateCgManifest=true +``` + +This will: +1. Generate the cgmanifest.json file (happens by default) +2. Include it in the package (for Template projects) + +### Azure DevOps Pipeline + +Add the following step to your YAML pipeline to include the cgmanifest.json file in the package: + +```yaml +- task: DotNetCoreCLI@2 + displayName: 'Pack with CG Manifest' + inputs: + command: 'pack' + packagesToPack: 'src/Templates/src/Microsoft.Maui.Templates.csproj' + packDirectory: '$(Build.ArtifactStagingDirectory)/nuget' + arguments: '-p:GenerateCgManifest=true' +``` + +### GitHub Actions + +For GitHub Actions workflows, add this step: + +```yaml +- name: Pack with CG Manifest + run: dotnet pack src/Templates/src/Microsoft.Maui.Templates.csproj -p:GenerateCgManifest=true -o $GITHUB_WORKSPACE/artifacts/nuget +``` + +## Customizing Package Mappings + +To add or modify package mappings, edit the PowerShell script: `eng/scripts/update-cgmanifest.ps1` (look for `$packageVersionMappings` hashtable). + +## Special Handling for Multiple Versions + +The script has special handling for packages that need multiple versions to be included in the manifest: + +- **CommunityToolkit.Maui**: Both the current version (`CommunityToolkitMauiPackageVersion`) and previous version (`CommunityToolkitMauiPreviousPackageVersion`) from `Versions.props` are included. + +To add similar handling for other packages, modify the script to add special case handling like that implemented for CommunityToolkit.Maui. + +## Manual Updates + +If you need to manually add packages that aren't in `Versions.props`, you can edit the `cgmanifest.json` file directly. The update scripts preserve manually added entries and only update versions for packages it knows about. + +## Verifying the Package + +To verify that the cgmanifest.json file is included in the package: + +```bash +# On macOS/Linux +find ./artifacts/packages -name "Microsoft.Maui.Templates*.nupkg" | xargs -I{} unzip -l {} | grep cgmanifest.json + +# On Windows +foreach ($pkg in (Get-ChildItem -Path ./artifacts/packages -Filter "Microsoft.Maui.Templates*.nupkg")) { + Add-Type -AssemblyName System.IO.Compression.FileSystem + $zip = [System.IO.Compression.ZipFile]::OpenRead($pkg.FullName) + $zip.Entries | Where-Object { $_.Name -eq "cgmanifest.json" -or $_.FullName -like "*cgmanifest.json" } + $zip.Dispose() +} +``` diff --git a/docs/CodeDocumentationGuidelines.md b/docs/CodeDocumentationGuidelines.md index bebff90cf51a..b849b8452023 100644 --- a/docs/CodeDocumentationGuidelines.md +++ b/docs/CodeDocumentationGuidelines.md @@ -1,36 +1,36 @@ # Code Documentation Guidelines -In this document you will find the guidelines for adding XML comments to our codebase. By adding consistent and well-formatted comments to our code we benefit on all fronts: the online API docs are a useful reference for people looking up our APIs, the IntelliSense inside of Visual Studio will help developers understand our product better, and contributors and maintainers of this repository will have all the documentation at hand. +In this document you will find the guidelines for adding XML comments to our codebase. By adding consistent and well-formatted comments to our code, we benefit on all fronts: the online API docs are a useful reference for people looking up our APIs, the IntelliSense inside of Visual Studio will help developers understand our product better, and contributors and maintainers of this repository will have all the documentation at hand. ## Guidelines -For what kind of comments to our code we mainly follow the [recommended XML tags documentation](https://learn.microsoft.com/dotnet/csharp/language-reference/xmldoc/recommended-tags) by Microsoft. This is also what is best supported by Visual Studio. As a rule of thumb: complete your code first and just start typing a triple slash (`///`) above your code. That will suggest all the attributes that we want to see. Which attributes will show up is inferred from your code. +For comments on our code, we primarily follow the [recommended XML tags documentation](https://learn.microsoft.com/dotnet/csharp/language-reference/xmldoc/recommended-tags) by Microsoft. These tags are also best supported by Visual Studio. As a rule of thumb, complete your code first and just start typing a triple slash (`///`) above your code. This will suggest all the attributes we expect to see. The attributes that appear are inferred from your code. -If you're unsure about how to document a certain element, have a look the [.NET API docs wiki](https://github.com/dotnet/dotnet-api-docs/wiki) which has a very extensive description on what kind of comment to add on which element in the code. We would highly recommend going through that and applying the same style of comments everywhere. +If you're unsure about how to document a certain element, have a look at the [.NET API docs wiki](https://github.com/dotnet/dotnet-api-docs/wiki) which has a very extensive description of what kind of comment to add on which element in the code. We would highly recommend going through that and applying the same style of comments everywhere. These are the tags that we would like to see when applicable: ``, ``, ``, ``, ``, ``, ``, ``. * All public members should have at the very least a `` * Add "This is a bindable property." to the end of the summary of the regular C# properties that are bindable properties. * Keep the descriptions short and concise - * 1-2 lines typically, no screenshots or long code-blocks (those belong in the conceptual docs) + * 1-2 lines typically, no screenshots or long code blocks (those belong in the conceptual docs) * Make sure the spelling is correct -* Add the descriptions at the highest base class/interface level. On an implementing type add `` on each member - * If the implemented member differs too much you can choose to override the comments; typically this shouldn't be necessary +* Add the descriptions at the highest base class/interface level. On an implementing type, add `` on each member + * If the implemented member differs too much, you can choose to override the comments; typically this shouldn't be necessary * When adding `` on a class where you want to inherit the comments from an interface, you will have to be explicit about which interface to inherit from. Even if the class only implements one interface. For example: `` will inherit the comments from the `IEntry` interface. - * Do **not** add `` to overridden members, this will potentially cause issues in the online API docs system and doesn't add any value. The documentation is inherited implicitly. -* Where applicable make references to other types and parameters with the appropriate tags (`` and `` respectively). This will create links in IntelliSense and online API docs -* Reference all C# keywords with a `` tag. For example for `true`: `` -* If you do want to add a minimal amount of code in your comment, use the `` tags which formats it as code + * Do **not** add `` to overridden members; this will potentially cause issues in the online API docs system and doesn't add any value. The documentation is inherited implicitly. +* Where applicable, make references to other types and parameters with the appropriate tags (`` and `` respectively). This will create links in IntelliSense and online API docs +* Reference all C# keywords with a `` tag. For example, for `true`: `` +* If you do want to add a minimal amount of code in your comment, use the `` tags, which format it as code * Think of things you'd like to know as a developer/future-you maintainer: * default values that are not obvious * in which scale a value should be (seconds or milliseconds, 0.0 is nothing 1.0 is everything) - * what exceptions can you expect and what triggers them + * what exceptions can you expect, and what triggers them? -If you are looking for examples, browse through the codebase, searching for the `` tag or `///` should give you all kinds of examples. +If you are looking for examples, browsing through the codebase, searching for the `` tag or `///` should give you all kinds of examples. ## "Testing" the documentation -You can "test" the docs by simply hovering over the type in Visual Studio. The IntelliSense updates should be instantaneous when you have edited something. See image below for an example. +You can "test" the docs by simply hovering over the type in Visual Studio. The IntelliSense updates should be instantaneous when you have edited something. See the image below for an example. ![Partial screenshot of the Visual Studio text editor showing comments being edited and changes immediately showing up in the tooltip of the relevant type.](assets/EditingDocumentationVisualStudio.png) diff --git a/docs/DevelopmentTips.md b/docs/DevelopmentTips.md new file mode 100644 index 000000000000..71a06c29c5f8 --- /dev/null +++ b/docs/DevelopmentTips.md @@ -0,0 +1,172 @@ +### Reproducing an Issue/Debugging .NET MAUI Code +Open the .NET MAUI [workspace](https://code.visualstudio.com/docs/editor/workspaces) in VS Code by simply opening the root of your locally cloned .NET MAUI repository folder. VS Code will detect the workspace automatically and suggest that you open it. + +In VS Code, select the device that you will be testing on. Using the Command Palette (CTRL + Shift + P or on macOS Command + Shift + P) type `pick device` and you will be presented with a set of choices for your target device (Android, iOS, etc.). First select the option that describes the platform you want to run the project on, and then select the device that is available for that platform in the next menu. + +![VS Code Command Palette to pick a target device](https://github.com/dotnet/maui/assets/939291/d008102f-0295-4034-a60a-8c2b58f86641) + +There is a sample project in `src/Controls/samples/Controls.Sample.Sandbox`. This is an empty project, which directly references the .NET MAUI code. In this project you can add your code to reproduce an issue while allowing you to set breakpoints in .NET MAUI source code and debug through it easily. + +To let VS Code know this is the project you want to run, select the Sandbox project by going to the Command Palette (CTRL + Shift + P or on macOS Command + Shift + P) and start typing `pick startup` and select ".NET MAUI: Pick Startup Project" and then select the Sandbox project. + +![VS Code Command Palette to pick the startup project](https://github.com/dotnet/maui/assets/939291/eae00559-4811-4034-95ae-b6fd1ea6d1b7) + +Before using the Command Palette for the first time, you may have to wait a minute +for IntelliSense and other tasks to initialize. If the project hasn't 'settled' yet, you will see an error "Pick Startup Project has resulted in an error." + +*Note:* When you are committing your PR, do not include your changes to the Sandbox project. + + +### Cake Commands + +The below parameters can be used with the `dotnet cake` command in the root of your locally cloned .NET MAUI repository folder. + +#### Clean +`--clean` +- Occasionally, when switching branches or syncing with the main branch, incremental builds may stop working. A common fix for this is to use git clean -xdf to delete all locally cached build information. However, the issue with git clean -xdf is that it will also wipe out any uncommitted changes. Using --clean to recursively delete the local obj/bin folders should hopefully resolve the issue while preserving your changes. + +#### Target a specific platform +`--android` +`--ios` +`--windows` +`--catalyst` + +```bash +dotnet cake --target=VS --workloads=global --android --ios +``` + +*Note* you will have to `git clean -xdf` your project if you change or add platforms. + +### Blazor Hybrid + +To build and run Blazor Desktop samples, check out the [Blazor Desktop](https://github.com/dotnet/maui/wiki/Blazor-Desktop) wiki topic. + +# Advanced Scenarios + +### Compile using a local `bin\dotnet` via `dotnet-local.*` + +This method will use the .NET and workload versions that are specific to the branch you are on. There may be occasions when your global installation of .NET is not compatible with a particular branch. In such cases, this method will create a local folder containing all the .NET versions specific to that branch. + +Use `dotnet-local.cmd` on Windows or `dotnet-local.sh` on Unix to ensure that `PATH` is set consistently. + +#### Cake + +You can run a `Cake` target to bootstrap .NET SDK in `bin\dotnet` and launch Visual Studio: + +```dotnetcli +dotnet tool restore +dotnet cake --target=VS +``` + +There is also a `VSCode` target for launching Visual Studio Code. + +```dotnetcli +dotnet tool restore +dotnet cake --target=VSCode +``` + +#### Testing branch against your project +`--sln=` +- This will pack .NET and then open a VS instance using the local pack. This is useful if you want to check to see if the changes in a branch will address your particular issues. Pack only runs the first time, so you will need to explicitly add the `--pack` flag if you make changes and need to repack. + +```dotnetcli +dotnet tool restore +dotnet cake --sln="\MauiApp2\MauiApp2.sln" --target=VS +``` + +#### Pack +`--pack` +- This creates .NET MAUI packs inside the local dotnet install. This lets you use the CLI commands with the local dotnet to create/deploy with any changes that have been made on that branch (including template changes). + +```dotnetcli +dotnet tool restore +dotnet cake --target=VS --pack --sln="\MauiApp2\MauiApp2.sln" +``` + +Create a new .NET MAUI app using your new packs +```dotnetcli +dotnet tool restore +dotnet cake --pack +mkdir MyMauiApp +cd MyMauiApp +..\bin\dotnet\dotnet new maui +..\bin\dotnet\dotnet build -t:Run -f net[current_sdk_version]-android +``` + +You can also run commands individually: +```dotnetcli +# install local tools required to build (cake, pwsh, etc..) +dotnet tool restore +# Provision .NET SDK in bin\dotnet +dotnet build src\DotNet\DotNet.csproj +# Builds Maui MSBuild tasks +.\bin\dotnet\dotnet build Microsoft.Maui.BuildTasks.slnf +# Builds the rest of Maui +.\bin\dotnet\dotnet build Microsoft.Maui.sln +# Launch Visual Studio +dotnet cake --target=VS +``` + +## Debugging MSBuild Tasks using VS/VSCode + +One thing that is very useful is the ability to debug your Tasks while +they are being run on a build process. This is possible thanks to the +`MSBUILDDEBUGONSTART` environment variable. When set to `2` this will +force MSBuild to wait for a debugger connection before continuing. +You will see the following prompt. + + +```dotnetcli +Waiting for debugger to attach (dotnet PID 13001). Press enter to continue... +``` + +You can then use VS or VSCode to attach to this process and debug your tasks. +You can start your test app with the `dotnet-local` script (so it uses your MAUI build). + +### [MacOS](#tab/macos) + +```dotnetcli +MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 +``` + +### [Linux](#tab/linux) + +```dotnetcli +MSBUILDDEBUGONSTART=2 ~//dotnet-local.sh build -m:1 +``` + +### [Windows](#tab/windows) + +```dotnetcli +set MSBUILDDEBUGONSTART=2 +~//dotnet-local.cmd build -m:1 +``` + +--- + +Note: the `-m:1` is important as it restricts MSBuild to 1 node. + +Once MSBuild starts, it will print the following + +```dotnetcli +Waiting for debugger to attach (dotnet PID xxxx). Press enter to continue... +``` + +You need to copy the PID value so we can use this in the IDE. For Visual Studio, you can use the `Attach to Process` menu option while you have the Microsoft.Maui.sln solution open. For VSCode, open the workspace, then use the `Attach to Process` Run and Debug option. You will be prompted for the PID and it will then connect. + +Once connected, go back to your command prompt and press ENTER so that the MSBuild process can continue. + +You will be able to set breakpoints in Tasks (but not Targets) and step through code from this point on. + +If you want to test in-tree in VSCode, the `Build Platform Sample` command will ask you if you want to debug MSBuild tasks and fill in the `MSBUILDDEBUGONSTART` for you. The PID text will appear in the `Terminal` window in VSCode. You can then use the `Attach to Process` Run and Debug option to attach to the process. + + +### Integration Tests + +The Integration test project under `src/TestUtils/src/Microsoft.Maui.IntegrationTests` contains tests that build and/or run MAUI templates or other projects. + +These tests can be run using the Test Explorer in VS, or from the command line with `dotnet test`. Here's how to run an individual test with parameters from command line: + +```bash +dotnet test src/TestUtils/src/Microsoft.Maui.IntegrationTests --logger "console;verbosity=diagnostic" --filter "Name=Build\(%22maui%22,%22net7.0%22,%22Debug%22,False\)" +``` diff --git a/docs/IssueManagementPolicies.md b/docs/IssueManagementPolicies.md index 5755fe520af5..a83fde2f3b6d 100644 --- a/docs/IssueManagementPolicies.md +++ b/docs/IssueManagementPolicies.md @@ -12,16 +12,16 @@ In general, we recommend you open a new issue if you have a bug, feature request If a contributor reviews an issue and determines that more information is needed from the author, they will post a comment requesting that information and apply the `s/needs-info` label. This label indicates that the author needs to post a response in order for us to continue investigating the issue. -If the author does not post a response within **7 days**, the issue will be automatically closed. If the author responds within **7 days** after the issue is closed, the issue will be automatically re-opened. We recognize that you may not be able to respond immediately to our requests, we're happy to hear from you whenever you're able to provide the new information. +If the author does not post a response within **7 days**, the issue will be automatically closed. If the author responds within **7 days** after the issue is closed, the issue will be automatically re-opened. We recognize that you may not be able to respond immediately to our requests; we're happy to hear from you whenever you're able to provide the new information. ### PR: pending author input -Similar to the `Needs Author Feedback` process above, PRs also require author input from time to time. When a member of our team asks for some follow-up changes from the author, we mark these PRs with `s/pr-needs-author-input` label. After doing so, we expect the author to respond within 14 days. +Similar to the `Needs Author Feedback` process above, PRs also require author input from time to time. When a member of our team asks for some follow-up changes from the author, we mark these PRs with the `s/pr-needs-author-input` label. After doing so, we expect the author to respond within 14 days. If the author does not post a response or updates the PR within **14 days**, the PR will be automatically closed. If the author responds within **7 days** after the PR is closed, the PR will be automatically re-opened. We recognize that you may not be able to respond immediately to our requests, we're happy to hear from you whenever you're able to provide the new information. ## Duplicate issues -If we determine that the issue is a duplicate of another, we will close the issue and comment with the issue we believe is a duplicate one. Note that we might close an issue as duplicate which is not the one that has been reported the earliest. We might close an issue that has been reported earlier because the later issue has more relevant information and/or discussion. +If we determine that the issue is a duplicate of another, we will close the issue and comment with the issue we believe is the duplicate one. Note that we might close an issue as duplicate which is not the one that has been reported the earliest. We might close an issue that has been reported earlier because the later issue has more relevant information and/or discussion. ## Locking closed issues -After an issue has been closed and had no activity for **30 days** it will be automatically locked as *resolved*. This is done in order to reduce confusion as to where to post new comments. If you are still encountering the problem reported in an issue, or have a related question or bug report, feel free to open a *new issue* and link to the original (now locked) issue! \ No newline at end of file +After an issue has been closed and had no activity for **30 days** it will be automatically locked as *resolved*. This is done in order to reduce confusion as to where to post new comments. If you are still encountering the problem reported in an issue or have a related question or bug report, feel free to open a *new issue* and link to the original (now locked) issue! \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 7d384c29dd03..22fc15184845 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,8 @@ The table below outlines the different docs in this folder and what they are hel | Documentation | What is it about? | Who is it for? | |----------------------|---------------------|---------------------| +| [CG Manifest](CgManifest.md) | Guide to Component Governance manifest generation and management | Contributors who need to manage third-party dependencies or include CG manifest in packages | | [Code Documentation Guidelines](CodeDocumentationGuidelines.md) | Overview of the guidelines for the inline code documentation | Community members and collaborators looking to understand how to add good inline code comments that fuel our IntelliSense and online API docs | -| [Issue management](IssueManagementPolicies.md) | Overview of policies in place to manage issues| Community members and collaborators looking to understand how we handle closed issues, issues that need author feedback, etc | +| [Issue management](IssueManagementPolicies.md) | Overview of policies in place to manage issues| Community members and collaborators looking to understand how we handle closed issues, issues that need author feedback, etc. | | [Release Schedule](ReleaseSchedule.md) | Overview of .NET MAUI version releases | Anyone who is interested in .NET MAUI versions and release dates | | [Triage process](TriageProcess.md)| Overview of the issue triage process used in the repo | Anyone looking to understand the triage process on the repo | diff --git a/docs/ReleasePlanning.md b/docs/ReleasePlanning.md index 51f2880889b1..4dafd6ff1591 100644 --- a/docs/ReleasePlanning.md +++ b/docs/ReleasePlanning.md @@ -1,47 +1,3 @@ -Throughout the year we add issues to the `Backlog` milestone as is pointed out in our [Triage Process](TriageProcess.md). -We review all the issues in that milestone once a year, after the work on an upcoming major release is complete. -Given the large number of issues, it takes multiple sessions for teams to review and identify candidates for consideration for the next major release. -This document details the process we use for identifying candidate issues for the next release. +# .NET MAUI Roadmap -## Phases -The process for identifying candidates for the next major release consists of multiple phases. In each phase, we filter issues out of the release by either moving them to the `Backlog`, or closing the issue. -- Filtering & Individual prioritization -- Rough costing -- Team review & Priority adjustment -- Capacity planning -- Define the cut line - -### Filtering -At this stage all the issues are distributed to engineers by feature areas. Each engineer reviews all the issues within their feature area, and returns to the next meeting with individual priority labels assigned - fl-p1, fl-p2, fl-p3, where `fl` are their initials. - -All the issues which the engineer believes are lower than `Priority-3` - remain in the backlog. We also agree to approximately balance the distribution of the 3 priority labels on the issues that will be brought back by each engineer, so that it forces real prioritization exercise. -The issues which engineers think are good candidates and fit in the above listed requirements are moved to the `.NET V Planning` milestone, where `V` is the upcoming version number. - -### Rough costing -At this phase engineers apply rough cost estimates to the final list of issues that they have moved to the `.NET V Planning` milestone, by applying one of the `Cost: X` labels below, where `X` is the size: - -| **Label** | **Description** | -|--------------|---------------------------------------------------| -| **Cost: S** | Work that requires one engineer up to 1 week | -| **Cost: M** | Work that requires one engineer up to 2 weeks | -| **Cost: L** | Work that requires one engineer up to 4 weeks | -| **Cost: XL** | Work that requires one engineer more than 4 weeks | - -This will be used later during the planning process. - -For issues which don't have a clear description of the associated work, it's important to drop a comment summarizing the work involved. This will help at a later time, in case a question about the cost will be raised. - -**Note**: while costing issues, it's important to reevaluate costs for those, which already have cost labels applied. Those are most probably from the past and may be outdated, not properly representing the cost any more. - -### Team Review & Priority adjustment -Now, that all the issues are in the `.NET V planning` milestone, the team reviews each issue one at a time starting from the highest priority ones (Priority: 1). -We discuss the issues and agree on the priority at this point. Sometimes we make adjustments to the suggested individual priorities. After discussing each issue the `Priority: X` label is applied to each issue. -Each `Priority: 1` issue is then moved to the project board, which will be used by each team for tracking the work for the upcoming release throughout the year. The issues start off in the `Triage` column. At this point we bring only the top priority issues to the board. - -### Capacity Planning -We usually reserve only 50% of the team capacity for this work. The reason is that we will be getting a lot of incoming feedback throughout the year and we need to allocate time for handling this feedback throughout the year. -So we calculate the capacity of the team in weeks for the upcoming year and use half of the final number later in this process. - -### Define the cut line -At this point we have all the candidate issues that we think are worth considering for the upcoming release. This number is quite large, so the teams usually won't have enough capacity to handle all this. -We start stack ranking issues so the most important work remains on the top of the list. We then draw the cut line and that defines the rough list of things the team will work on during the upcoming release. +[Roadmap](https://github.com/dotnet/maui/wiki/Roadmap) \ No newline at end of file diff --git a/docs/ReleaseSchedule.md b/docs/ReleaseSchedule.md index a249e3aaa6e8..3938456635d5 100644 --- a/docs/ReleaseSchedule.md +++ b/docs/ReleaseSchedule.md @@ -1,18 +1,3 @@ # .NET MAUI Release Schedule Information -Versions of .NET MAUI are being released in sync with new .NET versions. More information on the .NET release policy can be found [here](https://dotnet.microsoft.com/platform/support/policy/dotnet-core). - -## Past .NET MAUI Releases - -Below you can find a list of all the previous releases of .NET MAUI, excluding pre-releases. -For a full list, including release notes, please refer to our [Releases page](https://github.com/dotnet/maui/releases). - -| Version | Release Date | -|---------|--------------| -| [6.0.536 (Service Release 4.1)](https://github.com/dotnet/maui/releases/tag/6.0.536) | 2022/09/14 | -| [6.0.486 (Service Release 4)](https://github.com/dotnet/maui/releases/tag/6.0.486) | 2022/08/09 | -| [6.0.424 (Service Release 3.1)](https://github.com/dotnet/maui/releases/tag/6.0.424) | 2022/08/01 | -| [6.0.419 (Service Release 3)](https://github.com/dotnet/maui/releases/tag/6.0.419) | 2022/07/20 | -| [6.0.408 (Service Release 2)](https://github.com/dotnet/maui/releases/tag/6.0.408) | 2022/07/12 | -| [6.0.400](https://github.com/dotnet/maui/releases/tag/6.0.400) | 2022/06/14 | -| [6.0.312](https://github.com/dotnet/maui/releases/tag/6.0.312) | 2022/05/23 | +[Release Versions](https://github.com/dotnet/maui/wiki/Release-Versions) \ No newline at end of file diff --git a/docs/TriageProcess.md b/docs/TriageProcess.md index 2316df5d3445..108932e52cd8 100644 --- a/docs/TriageProcess.md +++ b/docs/TriageProcess.md @@ -17,61 +17,61 @@ The goals of these rules are listed below in priority order: ## Triage Process Details -The feature teams should be able look through every single issue filed against this repository and be able to make a quick call regarding the nature of the issue. +The feature teams should be able to look through every single issue filed against this repository and be able to make a quick call regarding the nature of the issue. We will first categorize the issues and further handle these depending on the category the issue is in. The subsections below represent these categories and the rules we apply for them during our triage meeting. ### Information Gathering -In this phase we instruct the user on how to collect the appropriate diagnostics and see if they are able to address the issue with that additional information. When we need user input we will mark the issue with `s/needs-info` label. Issues in this phase may be closed automatically if we do not receive timely responses, they often do not provide enough information for us to investigate further. +In this phase we instruct the user on how to collect the appropriate diagnostics and see if they are able to address the issue with that additional information. When we need user input, we will mark the issue with the `s/needs-info` label. Issues in this phase may be closed automatically if we do not receive timely responses; they often do not provide enough information for us to investigate further. We'll try to respond quickly to such issues (within days). If a user has collected all of the relevant diagnostics and the issue is still not apparent, then we will consider it for further [investigation](#investigations) by the team. ### Feature requests -As soon as we identify an issue represents an ask for a new feature, we will label the issue with the `t/enhancement ☀️` label. +As soon as we identify an issue that represents an ask for a new feature, we will label the issue with the `t/enhancement ☀️` label. Most of the time, we will automatically move these issues into the `.NET V Planning` (where V is the .NET version we're planning this for) milestone for further review during one of our [sprint planning meetings](#milestone-planning). If we think the feature request is not aligned with our goals, we may choose to close it immediately. In some situations, however, we may choose to collect more feedback before acting on the issue. In these situations we will move the issue in the `Backlog` so that we can review it during the [release planning](#release-planning). ### Bug reports -If it's immediately clear, that the issue is related to a bug in the framework, we will apply the `bug` label to the issue. +If it's immediately clear that the issue is related to a bug in the framework, we will apply the `bug` label to the issue. -At this point, we will try to make a call regarding it's impact and severity. If the issue is critical, we may choose to include it in our current milestone for immediate handling or potentially patching. +At this point, we will try to make a call regarding its impact and severity. If the issue is critical, we may choose to include it in our current milestone for immediate handling or potentially patching. If the bug is relatively high impact, we will move the issue into the `.NET V Planning` (where V is the .NET version we're planning this for) milestone to review during our [sprint planning](#milestone-planning) meeting. -If the impact is unclear or the is a very corner case scenario, we may move it to a next `.NET V Planning` or `Backlog` milestone to further evaluate the impact by reviewing customer up-votes / comments at a later time. +If the impact is unclear or there is a very corner case scenario, we may move it to the next `.NET V Planning` or `Backlog` milestone to further evaluate the impact by reviewing customer up-votes/comments at a later time. ### Investigations -In many situations it's not immediately clear whether a specific issue reported is a bug or not. To be certain, the team will need to spend time to investigate it before making a call regarding the faith of the issue. In these situations we will apply the `investigate` label to the issue. -In many situations, these issues turn out to be a result of some kind of misconfiguration in the user code. -In some rare situations, however, these turn out to be caused by very impactful issues. So we will make a call during the triage whether we need to immediately investigate certain issues or not. -If not, we will move the investigation to the `.NET V Planning` (where V is the .NET version we're planning this for) to review during one of the upcoming [sprint planning meetings](#milestone-planning). +In many situations, it's not immediately clear whether a specific issue reported is a bug or not. To be certain, the team will need to spend time investigating it before making a decision about the fate of the issue. In these situations we will apply the `investigate` label to the issue. +Often, these issues turn out to be a result of some kind of misconfiguration in the user code. +However, in rare cases, they are caused by highly impactful problems. During triage, we will decide whether certain issues require immediate investigation. +If not, we will move the investigation to the `.NET V Planning` (where V represents the .NET version we're planning this for) to review during one of the upcoming [sprint planning meetings](#milestone-planning). ### Documentation requests Some issues turn out to indicate user confusion around how to configure different aspects of the framework. When we determine such issues, we will mark these with the `Docs` label and move them into the `.NET V Planning` (where V is the .NET version we're planning this for) milestone to handle at a later time. The goal here will be to fill in the gaps or clarify our documentation, so that customers can be successful by using the guidance provided in the documentation. -If we identify a documentation issue which too many customers are having trouble with, we may choose to address that in current milestone. +If we identify a documentation issue that too many customers are having trouble with, we may choose to address that in the current milestone. ## Milestone Planning Our milestones are usually a month long. -Before each milestone we have one or more planning meetings, where we look through all the accumulated issues in the `.NET V Planning` (where V is the .NET version we're planning this for) milestone and choose the most important and impactful ones to handle during the next milestone. This will be a mixture of feature requests, bug fixes, documentation issues as well as some investigations. +Before each milestone, we have one or more planning meetings, where we look through all the accumulated issues in the `.NET V Planning` (where V is the .NET version we're planning this for) milestone and choose the most important and impactful ones to handle during the next milestone. This will be a mixture of feature requests, bug fixes, documentation issues, as well as some investigations. -Note, that we will investigate only issues, which have accumulated more than certain number of up-votes and/or comments, which will indicate that there is some wider impact associated with it. -We may not investigate issues which haven't received many votes/comments and choose to close these. The reason is that the impact is very scoped and potentially something is wrong in the user code. Consider asking these questions on StackOverflow, or if a bug is super important to you, please consider contributing to our project yourself. +Note that we will investigate only issues that have accumulated more than a certain number of up-votes and/or comments, which will indicate that there is some wider impact associated with it. +We may not investigate issues that haven't received many votes/comments and choose to close these. The reason is that the impact is very scoped, and potentially something is wrong in the user code. Consider asking these questions on StackOverflow, or if a bug is super important to you, please consider contributing to our project yourself. -For some feature requests and bug reports, depending on the user involvement, we may choose to move these to the backlog at this point. What this means, is that they will not be looked at again up until the next major release planning. +For some feature requests and bug reports, depending on the user involvement, we may choose to move these to the backlog at this point. What this means is that they will not be looked at again up until the next major release planning. ## Release Planning -Once we approach to the end of the release cycle (.NET Core 3, .NET 5) we will look through the accumulated issues in the `Backlog` milestone. This is a long process as the amount of issues accumulated in this milestone is quite large. +Once we approach the end of the release cycle (.NET 8, .NET 9), we will look through the accumulated issues in the `Backlog` milestone. This is a long process, as the amount of issues accumulated in this milestone is quite large. -We will try to prioritize issues with most community requests / up-votes assuming these are aligned with our goals. -Issues, which we will think are candidates for the upcoming release, will be moved to the `.NET V Planning` (where V is the .NET version we're planning this for) milestone. This process is documented in more details in the [Release Planning](ReleasePlanning.md) document. +We will try to prioritize issues with the most community requests/up-votes assuming these are aligned with our goals. +Issues, which we will think are candidates for the upcoming release, will be moved to the `.NET V Planning` (where V is the .NET version we're planning this for) milestone. This process is documented in more detail in the [Release Planning](ReleasePlanning.md) document. ## Cleanup -As we go through all the issues in the Backlog milestone as part of our release planning process, we will also cleanup the milestone by closing low priority issues, which have stayed in the backlog for more than 2 releases. While some of these issues may seem reasonable, the fact that those haven't been addressed for such prolonged period of time indicate that they're not as important for the product as they may seem to be. +As we go through all the issues in the Backlog milestone as part of our release planning process, we will also clean up the milestone by closing low-priority issues, which have stayed in the backlog for more than 2 releases. While some of these issues may seem reasonable, the fact that they haven't been addressed for such a prolonged period of time indicates that they're not as important for the product as they may seem to be. ## Process Visualization @@ -94,4 +94,4 @@ graph TD ## References -We rely on some automation to help us with this process. You can learn more about some of these by reading our [Issue Management Policies](IssueManagementPolicies.md) document. \ No newline at end of file +We rely on some automation to help us with this process. You can learn more about some of these by reading our [Issue Management Policies](IssueManagementPolicies.md) document. diff --git a/docs/assets/FailedTestScreenshot.png b/docs/assets/FailedTestScreenshot.png new file mode 100644 index 000000000000..c4f2f26ff82c Binary files /dev/null and b/docs/assets/FailedTestScreenshot.png differ diff --git a/docs/assets/SnapshotsFolder.png b/docs/assets/SnapshotsFolder.png new file mode 100644 index 000000000000..4ea9ecc1a062 Binary files /dev/null and b/docs/assets/SnapshotsFolder.png differ diff --git a/docs/assets/VerifyScreenshotsPart1.png b/docs/assets/VerifyScreenshotsPart1.png new file mode 100644 index 000000000000..de0dfa918232 Binary files /dev/null and b/docs/assets/VerifyScreenshotsPart1.png differ diff --git a/docs/assets/VerifyScreenshotsPart2.png b/docs/assets/VerifyScreenshotsPart2.png new file mode 100644 index 000000000000..4afb826c2603 Binary files /dev/null and b/docs/assets/VerifyScreenshotsPart2.png differ diff --git a/docs/assets/VerifyScreenshotsPart3.png b/docs/assets/VerifyScreenshotsPart3.png new file mode 100644 index 000000000000..4aba99cbed1d Binary files /dev/null and b/docs/assets/VerifyScreenshotsPart3.png differ diff --git a/docs/assets/VerifyScreenshotsPart4.png b/docs/assets/VerifyScreenshotsPart4.png new file mode 100644 index 000000000000..1f1a557e6f68 Binary files /dev/null and b/docs/assets/VerifyScreenshotsPart4.png differ diff --git a/docs/assets/VerifyScreenshotsPart5.png b/docs/assets/VerifyScreenshotsPart5.png new file mode 100644 index 000000000000..81f2626a2980 Binary files /dev/null and b/docs/assets/VerifyScreenshotsPart5.png differ diff --git a/docs/design/FeatureSwitches.md b/docs/design/FeatureSwitches.md new file mode 100644 index 000000000000..1a43d8627fe7 --- /dev/null +++ b/docs/design/FeatureSwitches.md @@ -0,0 +1,78 @@ +# Feature Switches + +Certain features of MAUI can be enabled or disabled using feature switches. The easiest way to control the features is by putting the corresponding MSBuild property into the app's project file. Disabling unnecessary features can help reducing the app size when combined with the [`full` trimming mode](https://learn.microsoft.com/dotnet/core/deploying/trimming/trimming-options). + +The following switches are toggled for applications running on Mono for `TrimMode=full` as well as NativeAOT. + +| MSBuild Property Name | AppContext Setting | Description | +|-|-|-| +| MauiEnableIVisualAssemblyScanning | Microsoft.Maui.RuntimeFeature.IsIVisualAssemblyScanningEnabled | When enabled, MAUI will scan assemblies for types implementing `IVisual` and for `[assembly: Visual(...)]` attributes and register these types. | +| MauiShellSearchResultsRendererDisplayMemberNameSupported | Microsoft.Maui.RuntimeFeature.IsShellSearchResultsRendererDisplayMemberNameSupported | When disabled, it is necessary to always set `ItemTemplate` of any `SearchHandler`. Displaying search results through `DisplayMemberName` will not work. | +| MauiQueryPropertyAttributeSupport | Microsoft.Maui.RuntimeFeature.IsQueryPropertyAttributeSupported | When disabled, the `[QueryProperty(...)]` attributes won't be used to set values to properties when navigating. | +| MauiImplicitCastOperatorsUsageViaReflectionSupport | Microsoft.Maui.RuntimeFeature.IsImplicitCastOperatorsUsageViaReflectionSupported | When disabled, MAUI won't look for implicit cast operators when converting values from one type to another. This feature is not trim-compatible. | +| _MauiBindingInterceptorsSupport | Microsoft.Maui.RuntimeFeature.AreBindingInterceptorsSupported | When disabled, MAUI won't intercept any calls to `SetBinding` methods and try to compile them. Enabled by default. | +| MauiEnableXamlCBindingWithSourceCompilation | Microsoft.Maui.RuntimeFeature.XamlCBindingWithSourceCompilationEnabled | When enabled, MAUI will compile all bindings, including those where the `Source` property is used. | +| MauiHybridWebViewSupported | Microsoft.Maui.RuntimeFeature.IsHybridWebViewSupported | Enables HybridWebView, which makes use of dynamic System.Text.Json serialization features | + +## MauiEnableIVisualAssemblyScanning + +When this feature is not enabled, custom and third party `IVisual` types will not be automatically discovered and registered. + +## MauiShellSearchResultsRendererDisplayMemberNameSupported + +When this feature is disabled, any value set to [`SearchHandler.DisplayMemberName`](https://learn.microsoft.com/dotnet/api/microsoft.maui.controls.searchhandler.displaymembername) will be ignored. Consider implementing a custom `ItemTemplate` to define the appearance of search results (see [Shell search documentation](https://learn.microsoft.com/dotnet/maui/fundamentals/shell/search#define-search-results-item-appearance)). + +## MauiQueryPropertyAttributeSupport + +When disabled, the `[QueryProperty(...)]` attributes won't be used to set values to properties when navigating. Instead, implement the [`IQueryAttributable`](https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/shell/navigation#process-navigation-data-using-a-single-method) interface whenever you need to accept query parameters. + +## MauiImplicitCastOperatorsUsageViaReflectionSupport + +When disabled, MAUI won't look for implicit cast operators when converting values from one type to another. This can affect the following scenarios: +- bindings between properties with different types, +- setting a property value of a bindable object with a value of different type. + +If your library or your app defines an implicit operator on a type that can be used in one of the previous scenarios, you should define a custom `TypeConverter` for your type and attach it to the type using the `[TypeConverter(typeof(MyTypeConverter))]` attribute. + +_Note: Prefer using the `TypeConverterAttribute` as it can help the trimmer achieve better binary size in certain scenarios._ + +## _MauiBindingInterceptorsSupport + +When enabled, MAUI will enable a source generator which will identify calls to the `SetBinding(this BindableObject target, BindableProperty property, Func getter, ...)` methods and generate optimized bindings based on the lambda expression passed as the `getter` parameter. + +This feature is a counterpart of [XAML Compiled bindings](https://learn.microsoft.com/dotnet/maui/fundamentals/data-binding/compiled-bindings). + +It is necessary to use this feature instead of the string-based bindings in NativeAOT apps and in apps with full trimming enabled. + +## MauiHybridWebViewSupported + +When this feature is disabled, `HybridWebView` will not be available. This is the default for projects using `TrimMode=full` or `PublishAot=true`. + +### Example use-case + +String-based binding in code: +```c# +label.BindingContext = new PageViewModel { Customer = new CustomerViewModel { Name = "John" } }; +label.SetBinding(Label.TextProperty, "Customer.Name"); +``` + +Compiled binding in code: +```csharp +label.SetBinding(Label.TextProperty, static vm => vm.Customer.Name); +// or with type inference: +label.SetBinding(Label.TextProperty, static (PageViewModel vm) => vm.Customer.Name); +``` + +Compiled binding in XAML: +```xml + public partial class BlazorWebView : View, IBlazorWebView { - internal const string AppHostAddress = "0.0.0.0"; + internal static string AppHostAddress { get; } = HostAddressHelper.GetAppHostAddress(); private readonly JSComponentConfigurationStore _jSComponents = new(); diff --git a/src/BlazorWebView/src/Maui/BlazorWebViewHandler.cs b/src/BlazorWebView/src/Maui/BlazorWebViewHandler.cs index 055c52a411d4..d8d4f11f78da 100644 --- a/src/BlazorWebView/src/Maui/BlazorWebViewHandler.cs +++ b/src/BlazorWebView/src/Maui/BlazorWebViewHandler.cs @@ -13,6 +13,11 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui #endif public partial class BlazorWebViewHandler { + private const string UseBlockingDisposalSwitch = "BlazorWebView.UseBlockingDisposal"; + + private static bool IsBlockingDisposalEnabled => + AppContext.TryGetSwitch(UseBlockingDisposalSwitch, out var enabled) && enabled; + /// /// This field is part of MAUI infrastructure and is not intended for use by application code. /// diff --git a/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj b/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj index 71e06b830a2e..5a530b48d967 100644 --- a/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj +++ b/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj @@ -2,17 +2,24 @@ $(_MauiDotNetTfm);$(MauiPlatforms) + $(TargetFrameworks);$(_MauiPreviousDotNetTfm);$(MauiPreviousPlatforms) enable $(DefineConstants);WEBVIEW2_MAUI true + + true + true + true + + true Microsoft.AspNetCore.Components.WebView.Maui $(DefaultPackageTags);blazor;webview;aspnet - $(MauiRootDirectory)Assets\aspnet-icon.png + $(MauiRootDirectory)Assets\aspnet-icon.png Build .NET Multi-platform App UI (.NET MAUI) apps with Blazor web UI in the BlazorWebView control. diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Shipped.txt index c225d279f618..7a9267addeb4 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Shipped.txt @@ -11,6 +11,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -22,6 +24,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -52,4 +56,7 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-android/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Shipped.txt index db7dfd050e9e..c2a93eaf59e6 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Shipped.txt @@ -13,6 +13,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -24,6 +26,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -54,4 +58,7 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-ios/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Shipped.txt index db7dfd050e9e..c2a93eaf59e6 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Shipped.txt @@ -13,6 +13,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -24,6 +26,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -54,4 +58,7 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Shipped.txt index fe6f212f5803..7e051f66bc57 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Shipped.txt @@ -11,6 +11,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -22,6 +24,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -57,4 +61,7 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-tizen/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Shipped.txt index 00935c6a7efd..687d91bdf4aa 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Shipped.txt @@ -17,6 +17,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -28,6 +30,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -60,4 +64,7 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net-windows/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Shipped.txt index f1b2d2d54f80..afa8d8e1ac81 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Shipped.txt @@ -10,6 +10,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitiali Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void @@ -21,6 +23,8 @@ Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(s Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string? Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! @@ -50,5 +54,8 @@ static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHost static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder! +static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Unshipped.txt index 7260e8e97b5f..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Maui/PublicAPI/net/PublicAPI.Unshipped.txt @@ -1,8 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPath.set -> void -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.StartPathProperty -> Microsoft.Maui.Controls.BindableProperty! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! -virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Maui/Windows/BlazorWebViewHandler.Windows.cs b/src/BlazorWebView/src/Maui/Windows/BlazorWebViewHandler.Windows.cs index 9b57a71f428f..17839d87cf49 100644 --- a/src/BlazorWebView/src/Maui/Windows/BlazorWebViewHandler.Windows.cs +++ b/src/BlazorWebView/src/Maui/Windows/BlazorWebViewHandler.Windows.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Maui; using Microsoft.Maui.Dispatching; using Microsoft.Maui.Handlers; using WebView2Control = Microsoft.UI.Xaml.Controls.WebView2; @@ -30,13 +31,24 @@ protected override void DisconnectHandler(WebView2Control platformView) { if (_webviewManager != null) { - // Dispose this component's contents and block on completion so that user-written disposal logic and - // Blazor disposal logic will complete. - _webviewManager? + // Start the disposal... + var disposalTask = _webviewManager? .DisposeAsync() - .AsTask() - .GetAwaiter() - .GetResult(); + .AsTask()!; + + if (IsBlockingDisposalEnabled) + { + // If the app is configured to block on dispose via an AppContext switch, + // we'll synchronously wait for the disposal to complete. This can cause a deadlock. + disposalTask + .GetAwaiter() + .GetResult(); + } + else + { + // Otherwise, by default, we'll fire-and-forget the disposal task. + disposalTask.FireAndForget(); + } _webviewManager = null; } diff --git a/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs b/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs index 1645d8a8e145..8df03fd31281 100644 --- a/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs +++ b/src/BlazorWebView/src/Maui/iOS/BlazorWebViewHandler.iOS.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Maui; using Microsoft.Maui.Dispatching; using Microsoft.Maui.Handlers; using UIKit; @@ -23,8 +24,8 @@ public partial class BlazorWebViewHandler : ViewHandler() is null) { @@ -105,7 +105,6 @@ public WebViewUIDelegate(BlazorWebViewHandler webView) _webView = webView ?? throw new ArgumentNullException(nameof(webView)); } - public override void RunJavaScriptAlertPanel(WKWebView webView, string message, WKFrameInfo frame, Action completionHandler) { PresentAlertController( @@ -246,9 +245,13 @@ public override void DecidePolicy(WKWebView webView, WKNavigationAction navigati { _webView.Logger.LaunchExternalBrowser(uri); -#pragma warning disable CA1416, CA1422 // TODO: OpenUrl(...) has [UnsupportedOSPlatform("ios10.0")] - UIApplication.SharedApplication.OpenUrl(requestUrl); -#pragma warning restore CA1416, CA1422 + UIApplication.SharedApplication.OpenUrl(requestUrl, new UIApplicationOpenUrlOptions(), (success) => + { + if (!success) + { + _webView.Logger.LogError($"There was an error trying to open URL: {requestUrl}"); + } + }); } if (strategy != UrlLoadingStrategy.OpenInWebView) diff --git a/src/BlazorWebView/src/SharedSource/HostAddressHelper.cs b/src/BlazorWebView/src/SharedSource/HostAddressHelper.cs new file mode 100644 index 000000000000..1ae50ab20a2e --- /dev/null +++ b/src/BlazorWebView/src/SharedSource/HostAddressHelper.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Components.WebView; + +internal static class HostAddressHelper +{ + private const string AppHostAddressAlways0000Switch = "BlazorWebView.AppHostAddressAlways0000"; + + private static bool IsAppHostAddressAlways0000Enabled => + AppContext.TryGetSwitch(AppHostAddressAlways0000Switch, out var enabled) && enabled; + + public static string GetAppHostAddress() + => IsAppHostAddressAlways0000Enabled + ? "0.0.0.0" + : "0.0.0.1"; +} diff --git a/src/BlazorWebView/src/SharedSource/StaticContentHotReloadManager.cs b/src/BlazorWebView/src/SharedSource/StaticContentHotReloadManager.cs index a2a7d81776f3..69d33457d036 100644 --- a/src/BlazorWebView/src/SharedSource/StaticContentHotReloadManager.cs +++ b/src/BlazorWebView/src/SharedSource/StaticContentHotReloadManager.cs @@ -24,14 +24,21 @@ internal static class StaticContentHotReloadManager private static string ApplicationAssemblyName { get; } = Assembly.GetEntryAssembly()?.GetName().Name ?? "__application_assembly__"; + private const string NotifyCssUpdatedScript = +@"export function notifyCssUpdated(matchPathSuffix) { + const allLinkElems = Array.from(document.querySelectorAll('link[rel=stylesheet]')); + allLinkElems.forEach(elem => { + const url = new URL(elem.href); + if (url.pathname.endsWith(matchPathSuffix)) { + url.searchParams.set('reload_version', Date.now()); + elem.href = url.toString(); + } + }); +}"; + private static readonly Dictionary<(string AssemblyName, string RelativePath), (string? ContentType, byte[] Content)> _updatedContent = new() { - { (ApplicationAssemblyName, "_framework/static-content-hot-reload.js"), ("text/javascript", Encoding.UTF8.GetBytes(@" - export function notifyCssUpdated() { - const allLinkElems = Array.from(document.querySelectorAll('link[rel=stylesheet]')); - allLinkElems.forEach(elem => elem.href += ''); - } -")) } + { (ApplicationAssemblyName, "_framework/static-content-hot-reload.js"), ("text/javascript", Encoding.UTF8.GetBytes(NotifyCssUpdatedScript)) } }; /// @@ -86,10 +93,21 @@ private static (string AssemblyName, string RelativePath) GetAssemblyNameAndRela var requestPath = new Uri(requestAbsoluteUri).AbsolutePath.Substring(1); if (ContentUrlRegex.Match(requestPath) is { Success: true } match) { + var assemblyName = match.Groups["AssemblyName"].Value; + var relativePath = match.Groups["RelativePath"].Value; + + // Remove the fingerprint from scoped CSS bundles, since CSS hot reload will send new content without the fingerprint. + // The relative path for *.bundle.scp.css is just the file name, since they are always directly in the assembly's content directory. + // Example: LibraryName..bundle.scp.css -> LibraryName.bundle.scp.css + if (relativePath.StartsWith($"{assemblyName}.", StringComparison.Ordinal) && relativePath.EndsWith(".bundle.scp.css", StringComparison.Ordinal)) + { + relativePath = $"{assemblyName}.bundle.scp.css"; + } + // For RCLs (i.e., URLs of the form _content/assembly/path), we assume the content root within the // RCL to be "wwwroot" since we have no other information. If this is not the case, content within // that RCL will not be hot-reloadable. - return (match.Groups["AssemblyName"].Value, $"wwwroot/{match.Groups["RelativePath"].Value}"); + return (assemblyName, $"wwwroot/{relativePath}"); } else if (requestPath.StartsWith("_framework/", StringComparison.Ordinal)) { @@ -142,8 +160,18 @@ private async Task NotifyContentUpdatedAsync(string assemblyName, string relativ // We could try to supply the URL of the modified file, so the JS-side logic could only update the affected // stylesheet. This would reduce flicker. However, this involves hardcoding further details about URL conventions // (e.g., _content/AssemblyName/Path) and accounting for configurable content roots. To reduce the chances of - // CSS hot reload being broken by customizations, we'll have the JS-side code refresh all stylesheets. - await module.InvokeVoidAsync("notifyCssUpdated"); + // CSS hot reload being broken by customizations, we'll have the JS-side refresh stylesheets with a matching filename. + // Most of the time this will only reload a single stylesheet. + + string matchPathSuffix = "/" + Path.GetFileName(relativePath); + if (matchPathSuffix.EndsWith(".bundle.scp.css")) + { + // Bundles from class libraries are imported in the .styles.css file, + // so match that file instead of the bundle. + matchPathSuffix = ".styles.css"; + } + + await module.InvokeVoidAsync("notifyCssUpdated", matchPathSuffix); } } catch (Exception ex) diff --git a/src/BlazorWebView/src/SharedSource/WebView2WebViewManager.cs b/src/BlazorWebView/src/SharedSource/WebView2WebViewManager.cs index 6f7c1dd01674..4ff3a97195e1 100644 --- a/src/BlazorWebView/src/SharedSource/WebView2WebViewManager.cs +++ b/src/BlazorWebView/src/SharedSource/WebView2WebViewManager.cs @@ -49,10 +49,10 @@ internal class WebView2WebViewManager : WebViewManager // Using an IP address means that WebView2 doesn't wait for any DNS resolution, // making it substantially faster. Note that this isn't real HTTP traffic, since // we intercept all the requests within this origin. - internal static readonly string AppHostAddress = "0.0.0.0"; + internal static readonly string AppHostAddress = HostAddressHelper.GetAppHostAddress(); /// - /// Gets the application's base URI. Defaults to https://0.0.0.0/ + /// Gets the application's base URI. Defaults to https://0.0.0.1/. /// protected static readonly string AppOrigin = $"https://{AppHostAddress}/"; diff --git a/src/BlazorWebView/src/WindowsForms/BlazorWebView.cs b/src/BlazorWebView/src/WindowsForms/BlazorWebView.cs index 0af5f6fc0198..061e96cd3857 100644 --- a/src/BlazorWebView/src/WindowsForms/BlazorWebView.cs +++ b/src/BlazorWebView/src/WindowsForms/BlazorWebView.cs @@ -71,6 +71,7 @@ protected override void OnCreateControl() /// This property must be set to a valid value for the Razor components to start. /// [Category("Behavior")] + [DefaultValue(null)] [Description(@"Path to the host page within the application's static files. Example: wwwroot\index.html.")] public string? HostPage { @@ -86,6 +87,7 @@ public string? HostPage /// Path for initial Blazor navigation when the Blazor component is finished loading. /// [Category("Behavior")] + [DefaultValue("/")] [Description(@"Path for initial Blazor navigation when the Blazor component is finished loading.")] public string StartPath { get; set; } = "/"; @@ -170,14 +172,16 @@ private void StartWebViewCoreIfPossible() // We assume the host page is always in the root of the content directory, because it's // unclear there's any other use case. We can add more options later if so. string appRootDir; +#pragma warning disable IL3000 // 'System.Reflection.Assembly.Location.get' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'. var entryAssemblyLocation = Assembly.GetEntryAssembly()?.Location; +#pragma warning restore IL3000 if (!string.IsNullOrEmpty(entryAssemblyLocation)) { appRootDir = Path.GetDirectoryName(entryAssemblyLocation)!; } else { - appRootDir = Environment.CurrentDirectory; + appRootDir = AppContext.BaseDirectory; } var hostPageFullPath = Path.GetFullPath(Path.Combine(appRootDir, HostPage!)); // HostPage is nonnull because RequiredStartupPropertiesSet is checked above var contentRootDirFullPath = Path.GetDirectoryName(hostPageFullPath)!; diff --git a/src/BlazorWebView/src/WindowsForms/Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj b/src/BlazorWebView/src/WindowsForms/Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj index 679fc335bcbc..3877c5eaa307 100644 --- a/src/BlazorWebView/src/WindowsForms/Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj +++ b/src/BlazorWebView/src/WindowsForms/Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj @@ -12,11 +12,17 @@ true + + true + true + true + + true Microsoft.AspNetCore.Components.WebView.WindowsForms - $(MauiRootDirectory)Assets\aspnet-icon.png + $(MauiRootDirectory)Assets\aspnet-icon.png blazor;webview;aspnet;winforms Build Windows Forms apps with Blazor and WebView2. diff --git a/src/BlazorWebView/src/WindowsForms/PublicAPI.Shipped.txt b/src/BlazorWebView/src/WindowsForms/PublicAPI.Shipped.txt index ed6cd7ffe987..d55402f68fda 100644 --- a/src/BlazorWebView/src/WindowsForms/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/WindowsForms/PublicAPI.Shipped.txt @@ -27,6 +27,8 @@ Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.HostPage.set Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.WindowsForms.RootComponentsCollection! Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.Services.get -> System.IServiceProvider! Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.Services.set -> void +Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.UrlLoading -> System.EventHandler? Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.WebView.get -> Microsoft.Web.WebView2.WinForms.WebView2! Microsoft.AspNetCore.Components.WebView.WindowsForms.IWindowsFormsBlazorWebViewBuilder @@ -49,3 +51,4 @@ static Microsoft.AspNetCore.Components.WebView.WindowsForms.RootComponentCollect static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddWindowsFormsBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.WindowsForms.IWindowsFormsBlazorWebViewBuilder! virtual Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! +virtual Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/WindowsForms/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/WindowsForms/PublicAPI.Unshipped.txt index 6b5ef9b567be..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/WindowsForms/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/WindowsForms/PublicAPI.Unshipped.txt @@ -1,4 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.StartPath.set -> void -virtual Microsoft.AspNetCore.Components.WebView.WindowsForms.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Wpf/BlazorWebView.cs b/src/BlazorWebView/src/Wpf/BlazorWebView.cs index 98d6a68ca62f..bebcc9ce6ff5 100644 --- a/src/BlazorWebView/src/Wpf/BlazorWebView.cs +++ b/src/BlazorWebView/src/Wpf/BlazorWebView.cs @@ -255,14 +255,16 @@ private void StartWebViewCoreIfPossible() // We assume the host page is always in the root of the content directory, because it's // unclear there's any other use case. We can add more options later if so. string appRootDir; +#pragma warning disable IL3000 // 'System.Reflection.Assembly.Location.get' always returns an empty string for assemblies embedded in a single-file app. If the path to the app directory is needed, consider calling 'System.AppContext.BaseDirectory'. var entryAssemblyLocation = Assembly.GetEntryAssembly()?.Location; +#pragma warning restore IL3000 if (!string.IsNullOrEmpty(entryAssemblyLocation)) { appRootDir = Path.GetDirectoryName(entryAssemblyLocation)!; } else { - appRootDir = Environment.CurrentDirectory; + appRootDir = AppContext.BaseDirectory; } var hostPageFullPath = Path.GetFullPath(Path.Combine(appRootDir, HostPage)); var contentRootDirFullPath = Path.GetDirectoryName(hostPageFullPath)!; diff --git a/src/BlazorWebView/src/Wpf/Microsoft.AspNetCore.Components.WebView.Wpf.csproj b/src/BlazorWebView/src/Wpf/Microsoft.AspNetCore.Components.WebView.Wpf.csproj index a4b722ce6ab3..85901e18a68f 100644 --- a/src/BlazorWebView/src/Wpf/Microsoft.AspNetCore.Components.WebView.Wpf.csproj +++ b/src/BlazorWebView/src/Wpf/Microsoft.AspNetCore.Components.WebView.Wpf.csproj @@ -12,11 +12,17 @@ true + + true + true + true + + true Microsoft.AspNetCore.Components.WebView.Wpf - $(MauiRootDirectory)Assets\aspnet-icon.png + $(MauiRootDirectory)Assets\aspnet-icon.png blazor;webview;aspnet;wpf Build WPF apps with Blazor and WebView2. diff --git a/src/BlazorWebView/src/Wpf/PublicAPI.Shipped.txt b/src/BlazorWebView/src/Wpf/PublicAPI.Shipped.txt index d09f1f6eaaff..c51ccb3b38d1 100644 --- a/src/BlazorWebView/src/Wpf/PublicAPI.Shipped.txt +++ b/src/BlazorWebView/src/Wpf/PublicAPI.Shipped.txt @@ -30,6 +30,8 @@ Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.HostPage.set -> void Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Wpf.RootComponentsCollection! Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.Services.get -> System.IServiceProvider! Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.Services.set -> void +Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPath.get -> string! +Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPath.set -> void Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.UrlLoading.get -> System.EventHandler! Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.UrlLoading.set -> void Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.WebView.get -> Microsoft.Web.WebView2.Wpf.WebView2! @@ -56,6 +58,8 @@ static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.Blazor static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.HostPageProperty -> System.Windows.DependencyProperty! static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.RootComponentsProperty -> System.Windows.DependencyProperty! static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.ServicesProperty -> System.Windows.DependencyProperty! +static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPathProperty -> System.Windows.DependencyProperty! static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.UrlLoadingProperty -> System.Windows.DependencyProperty! virtual Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider! virtual Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.DisposeAsyncCore() -> System.Threading.Tasks.ValueTask +virtual Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/src/Wpf/PublicAPI.Unshipped.txt b/src/BlazorWebView/src/Wpf/PublicAPI.Unshipped.txt index 0b0bc217cf26..7dc5c58110bf 100644 --- a/src/BlazorWebView/src/Wpf/PublicAPI.Unshipped.txt +++ b/src/BlazorWebView/src/Wpf/PublicAPI.Unshipped.txt @@ -1,5 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPath.get -> string! -Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPath.set -> void -static readonly Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.StartPathProperty -> System.Windows.DependencyProperty! -virtual Microsoft.AspNetCore.Components.WebView.Wpf.BlazorWebView.TryDispatchAsync(System.Action! workItem) -> System.Threading.Tasks.Task! diff --git a/src/BlazorWebView/tests/MauiDeviceTests/MauiAppNewWindowStub.Windows.cs b/src/BlazorWebView/tests/MauiDeviceTests/MauiAppNewWindowStub.Windows.cs index f0fb73bf4516..34ed68addcd1 100644 --- a/src/BlazorWebView/tests/MauiDeviceTests/MauiAppNewWindowStub.Windows.cs +++ b/src/BlazorWebView/tests/MauiDeviceTests/MauiAppNewWindowStub.Windows.cs @@ -106,6 +106,11 @@ public void OpenWindow(IWindow window) throw new NotImplementedException(); } + public void ActivateWindow(IWindow window) + { + throw new NotImplementedException(); + } + public void ThemeChanged() { throw new NotImplementedException(); diff --git a/src/BlazorWebView/tests/MauiDeviceTests/MauiBlazorWebView.DeviceTests.csproj b/src/BlazorWebView/tests/MauiDeviceTests/MauiBlazorWebView.DeviceTests.csproj index 3de22bdf30a8..5d8604a547c8 100644 --- a/src/BlazorWebView/tests/MauiDeviceTests/MauiBlazorWebView.DeviceTests.csproj +++ b/src/BlazorWebView/tests/MauiDeviceTests/MauiBlazorWebView.DeviceTests.csproj @@ -9,7 +9,7 @@ Microsoft.Maui.MauiBlazorWebView.DeviceTests Microsoft.Maui.MauiBlazorWebView.DeviceTests $(NoWarn),CA1416 - true + false maccatalyst-x64 maccatalyst-arm64 diff --git a/src/Compatibility/Android.AppLinks/src/Compatibility.Android.AppLinks.csproj b/src/Compatibility/Android.AppLinks/src/Compatibility.Android.AppLinks.csproj index 6291f18b2528..a167595dacca 100644 --- a/src/Compatibility/Android.AppLinks/src/Compatibility.Android.AppLinks.csproj +++ b/src/Compatibility/Android.AppLinks/src/Compatibility.Android.AppLinks.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/src/Compatibility/ControlGallery/src/Android/Activity1.cs b/src/Compatibility/ControlGallery/src/Android/Activity1.cs deleted file mode 100644 index 0018b5a0e39d..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Activity1.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Diagnostics; -using System.Globalization; -using Android.App; -using Android.Content; -using Android.Content.PM; -using Android.Content.Res; -using Android.OS; -using Android.Views; -using Android.Widget; -using Java.Interop; -using Microsoft.Maui.Controls; -using Microsoft.Maui.Controls.Compatibility; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Controls.ControlGallery; -using Microsoft.Maui.Controls.ControlGallery.Android; -using Microsoft.Maui.Controls.ControlGallery.Issues; -using Microsoft.Maui.Graphics; -using Microsoft.Maui.Platform; -using AColor = Android.Graphics.Color; - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public partial class Activity1 - { - [Export("NavigateToTest")] - public bool NavigateToTest(string test) - { - return App.NavigateToTestPage(test); - } - - [Export("Reset")] - public void Reset() - { - App.Reset(); - } - - void SetUpForceRestartTest() - { - // Listen for messages from the app restart test - MessagingCenter.Subscribe(this, RestartAppTest.ForceRestart, (e) => - { - // We can force a restart by making a configuration change; in this case, we'll enter - // Car Mode. (The easy way to do this is to change the orientation, but ControlGallery - // handles orientation changes so they don't cause a restart.) - - var uiModeManager = UiModeManager.FromContext(this); - - if (uiModeManager.CurrentModeType == UiMode.TypeCar) - { - // If for some reason we're already in car mode, disable it - uiModeManager.DisableCarMode(DisableCarModeFlags.None); - } - - uiModeManager.EnableCarMode(EnableCarModeFlags.None); - - // And put things back to normal so we can keep running tests - uiModeManager.DisableCarMode(DisableCarModeFlags.None); - - ((App)Microsoft.Maui.Controls.Application.Current).Reset(); - }); - } - } -} - diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/WebImages/XamarinLogo.png b/src/Compatibility/ControlGallery/src/Android/Assets/WebImages/XamarinLogo.png deleted file mode 100644 index 361e27822993..000000000000 Binary files a/src/Compatibility/ControlGallery/src/Android/Assets/WebImages/XamarinLogo.png and /dev/null differ diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/default.css b/src/Compatibility/ControlGallery/src/Android/Assets/default.css deleted file mode 100644 index 9e32b419bda2..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Assets/default.css +++ /dev/null @@ -1,2 +0,0 @@ -html,body{margin:0;padding:10} -body,p,h1{font-family:Chalkduster;font-style: italic;} \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/fonts/icons.xml b/src/Compatibility/ControlGallery/src/Android/Assets/fonts/icons.xml deleted file mode 100644 index 1311b1049909..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Assets/fonts/icons.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/googlemap.html b/src/Compatibility/ControlGallery/src/Android/Assets/googlemap.html deleted file mode 100644 index 165e4e90c659..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Assets/googlemap.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - Google Maps - - - - -
map
- - diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/googlemapsearch.html b/src/Compatibility/ControlGallery/src/Android/Assets/googlemapsearch.html deleted file mode 100644 index a31af760957c..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Assets/googlemapsearch.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - Place Searches - - - - - - -
- - - \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/Assets/local.html b/src/Compatibility/ControlGallery/src/Android/Assets/local.html deleted file mode 100644 index ccc9bec3a73a..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Assets/local.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -

Xamarin.Forms

-

This is a local iOS Html page

-Go to Google - - \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/AttachedStateEffectRenderer.cs b/src/Compatibility/ControlGallery/src/Android/AttachedStateEffectRenderer.cs deleted file mode 100644 index 2bdb39658219..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/AttachedStateEffectRenderer.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Linq; -using Microsoft.Maui.Controls; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Controls.ControlGallery.Android; -using Microsoft.Maui.Controls.ControlGallery.Effects; -using Microsoft.Maui.Controls.Platform; - -[assembly: ExportEffect(typeof(AttachedStateEffectRenderer), AttachedStateEffect.EffectName)] -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public class AttachedStateEffectRenderer : PlatformEffect - { - public AttachedStateEffect MyEffect { get; private set; } - - protected override void OnAttached() - { - MyEffect = Element.Effects.OfType().First(); - MyEffect.Attached(Element); - } - - protected override void OnDetached() - { - MyEffect.Detached(Element); - } - } -} \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/BorderEffect.cs b/src/Compatibility/ControlGallery/src/Android/BorderEffect.cs deleted file mode 100644 index e98b4142ad35..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/BorderEffect.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Controls.Platform; - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public class BorderEffect : PlatformEffect - { - protected override void OnAttached() - { - Control.SetBackgroundColor(global::Android.Graphics.Color.Aqua); - - var childLabel = (Element as ScrollView)?.Content as Label; - if (childLabel != null) - childLabel.Text = "Success"; - } - - protected override void OnDetached() - { - Control.SetBackgroundColor(global::Android.Graphics.Color.Beige); - } - } -} \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/BrokenNativeControl.cs b/src/Compatibility/ControlGallery/src/Android/BrokenNativeControl.cs deleted file mode 100644 index 8cbc7a3aeec0..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/BrokenNativeControl.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using Android.Content; -using Android.Graphics; -using Android.Runtime; -using Android.Util; -using Android.Views; -using Android.Widget; - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - /// - /// This is a custom Android control which deliberately does some incorrect measuring - /// - internal class BrokenNativeControl : TextView - { - bool _on; - - public BrokenNativeControl(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) - { - } - - public BrokenNativeControl(Context context) : base(context) - { - } - - public BrokenNativeControl(Context context, IAttributeSet attrs) : base(context, attrs) - { - } - - public BrokenNativeControl(Context context, IAttributeSet attrs, int defStyleAttr) - : base(context, attrs, defStyleAttr) - { - } - - public BrokenNativeControl(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) - : base(context, attrs, defStyleAttr, defStyleRes) - { - } - - public override bool OnTouchEvent(MotionEvent e) - { - _on = !_on; - - SetTypeface(null, _on ? TypefaceStyle.Bold : TypefaceStyle.Normal); - - return base.OnTouchEvent(e); - } - - protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) - { - int width = MeasureSpec.GetSize(widthMeasureSpec); - - // Force the width to 1/2 of what's being requested. This is deliberately wrong so we can demo - // giving the LayoutExtensions an override to fix it with - int widthSpec = MeasureSpec.MakeMeasureSpec(width / 2, MeasureSpec.GetMode(widthMeasureSpec)); - - base.OnMeasure(widthSpec, heightMeasureSpec); - } - } -} \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/CacheService.cs b/src/Compatibility/ControlGallery/src/Android/CacheService.cs deleted file mode 100644 index db721de4819f..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/CacheService.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Microsoft.Maui.Controls.ControlGallery; -using IOPath = System.IO.Path; - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public class CacheService : ICacheService - { - public void ClearImageCache() - { - throw new NotImplementedException("TODO: CACHING https://github.com/dotnet/runtime/issues/52332"); - } - } -} \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/ColorPicker.cs b/src/Compatibility/ControlGallery/src/Android/ColorPicker.cs deleted file mode 100644 index 9e031815958f..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/ColorPicker.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System; -using System.ComponentModel; -using Android.Content; -using Android.Views; -using Android.Widget; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Graphics; -using Microsoft.Maui.Platform; -using Droid = Android; - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public class ColorPickerView : ViewGroup - //, INotifyPropertyChanged - { - static readonly int[] COLORS = new[] { - new Droid.Graphics.Color(255,0,0,255).ToArgb(), new Droid.Graphics.Color(255,0,255,255).ToArgb(), new Droid.Graphics.Color(0,0,255,255).ToArgb(), - new Droid.Graphics.Color(0,255,255,255).ToArgb(), new Droid.Graphics.Color(0,255,0,255).ToArgb(), new Droid.Graphics.Color(255,255,0,255).ToArgb(), - new Droid.Graphics.Color(255,0,0,255).ToArgb() - }; - Droid.Graphics.Point currentPoint; - ColorPointer colorPointer; - ImageView imageViewSelectedColor; - ImageView imageViewPallete; - Droid.Graphics.Color selectedColor; - Droid.Graphics.Color previewColor; - - //public event PropertyChangedEventHandler PropertyChanged; - public event EventHandler ColorPicked; - - public ColorPickerView(Context context, int minWidth, int minHeight) : base(context) - { - SelectedColor = Colors.Black.ToPlatform(); - - SetMinimumHeight(minHeight); - SetMinimumWidth(minWidth); - - imageViewPallete = new ImageView(context); - imageViewPallete.Background = new Droid.Graphics.Drawables.GradientDrawable(Droid.Graphics.Drawables.GradientDrawable.Orientation.LeftRight, COLORS); - - imageViewPallete.Touch += (object sender, TouchEventArgs e) => - { - if (e.Event.Action == MotionEventActions.Down || e.Event.Action == MotionEventActions.Move) - { - using (Droid.Graphics.Bitmap bitmap = Droid.Graphics.Bitmap.CreateBitmap(imageViewPallete.Width, imageViewPallete.Height, Droid.Graphics.Bitmap.Config.Argb8888)) - { - Droid.Graphics.Canvas canvas = new Droid.Graphics.Canvas(bitmap); - imageViewPallete.Background.Draw(canvas); - - currentPoint = new Droid.Graphics.Point((int)e.Event.GetX(), (int)e.Event.GetY()); - previewColor = GetCurrentColor(bitmap, (int)e.Event.GetX(), (int)e.Event.GetY()); - } - } - if (e.Event.Action == MotionEventActions.Up) - { - SelectedColor = previewColor; - } - }; - - imageViewSelectedColor = new ImageView(context); - colorPointer = new ColorPointer(context); - - AddView(imageViewPallete); - AddView(imageViewSelectedColor); - AddView(colorPointer); - } - - public Droid.Graphics.Color SelectedColor - { - get - { - return selectedColor; - } - - set - { - if (selectedColor == value) - return; - - selectedColor = value; - UpdateUi(); - OnPropertyChanged(); - OnColorPicked(); - } - } - - protected override void OnLayout(bool changed, int left, int top, int right, int bottom) - { - var half = (bottom - top) / 2; - var margin = 20; - - var palleteY = top + half; - - imageViewSelectedColor.Layout(left, top, right, bottom - half - margin); - imageViewPallete.Layout(left, palleteY, right, bottom); - colorPointer.Layout(left, palleteY, right, bottom); - } - - void UpdateUi() - { - imageViewSelectedColor?.SetBackgroundColor(selectedColor); - colorPointer?.UpdatePoint(currentPoint); - } - - Droid.Graphics.Color GetCurrentColor(Droid.Graphics.Bitmap bitmap, int x, int y) - { - if (bitmap == null) - return new Droid.Graphics.Color(255, 255, 255, 255); - - if (x < 0) - x = 0; - if (y < 0) - y = 0; - if (x >= bitmap.Width) - x = bitmap.Width - 1; - if (y >= bitmap.Height) - y = bitmap.Height - 1; - - int color = bitmap.GetPixel(x, y); - return new Droid.Graphics.Color(color); - } - - void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = null) - { - //PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - - void OnColorPicked() - { - ColorPicked?.Invoke(this, new EventArgs()); - } - } - - public class ColorPointer : Droid.Views.View - { - Droid.Graphics.Paint colorPointerPaint; - Droid.Graphics.Point currentPoint; - Droid.Graphics.Point nextPoint; - - public ColorPointer(Context context) : base(context) - { - - colorPointerPaint = new Droid.Graphics.Paint(); - colorPointerPaint.SetStyle(Droid.Graphics.Paint.Style.Stroke); - colorPointerPaint.StrokeWidth = 5f; - colorPointerPaint.SetARGB(255, 0, 0, 0); - - } - - public void UpdatePoint(Droid.Graphics.Point p) - { - if (p == null) - return; - - if (currentPoint == null) - currentPoint = nextPoint; - - nextPoint = p; - } - - protected override void OnDraw(Droid.Graphics.Canvas canvas) - { - base.OnDraw(canvas); - } - } -} diff --git a/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj b/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj deleted file mode 100644 index d8db09f905c4..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Compatibility.ControlGallery.Android.csproj +++ /dev/null @@ -1,74 +0,0 @@ - - - - $(_MauiDotNetTfm)-android - 21 - Exe - Microsoft.Maui.Controls.Compatibility.ControlGallery.Android - Microsoft.Maui.Controls.Compatibility.ControlGallery.Android - false - disable - - IL2036;0618;0612 - - - - - $(DefineConstants);LEGACY_RENDERERS - $(DefineConstants);ANDROID - - - - $(DefineConstants);ENABLE_TEST_CLOUD - True - $(MSBuildThisFileDirectory)../../../../../eng/debug.keystore - android - androiddebugkey - android - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Compatibility/ControlGallery/src/Android/Compatibility/Activity1.cs b/src/Compatibility/ControlGallery/src/Android/Compatibility/Activity1.cs deleted file mode 100644 index 716cf7e4751a..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Compatibility/Activity1.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System; -using System.Diagnostics; -using System.Globalization; -using Android.App; -using Android.Content; -using Android.Content.PM; -using Android.Content.Res; -using Android.OS; -using Android.Views; -using Android.Widget; -using Java.Interop; -using Microsoft.Maui.Controls; -using Microsoft.Maui.Controls.Compatibility; -using Microsoft.Maui.Controls.ControlGallery; -using Microsoft.Maui.Controls.ControlGallery.Android; -using Microsoft.Maui.Controls.ControlGallery.Issues; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Controls.Compatibility.Platform.Android.AppLinks; -using Microsoft.Maui.Graphics; -using Microsoft.Maui.Platform; -using AColor = Android.Graphics.Color; - -[assembly: Dependency(typeof(CacheService))] -[assembly: Dependency(typeof(TestCloudService))] -[assembly: ExportRenderer(typeof(DisposePage), typeof(DisposePageRenderer))] -[assembly: ExportRenderer(typeof(DisposeLabel), typeof(DisposeLabelRenderer))] -[assembly: ExportEffect(typeof(BorderEffect), "BorderEffect")] - -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public partial class Activity1 - { - void AddNativeControls(NestedNativeControlGalleryPage page) - { - if (page.NativeControlsAdded) - { - return; - } - - StackLayout sl = page.Layout; - - // Create and add a native TextView - var textView = new TextView(this) { Text = "I am a native TextView", TextSize = 14 }; - sl?.Children.Add(textView); - - // Create and add a native Button - var button = new global::Android.Widget.Button(this) { Text = "Click to change TextView font size" }; - float originalSize = textView.TextSize; - button.Click += (sender, args) => { textView.TextSize = textView.TextSize == originalSize ? 24 : 14; }; - - sl?.Children.Add(button.ToView()); - - // Create a control which we know doesn't behave correctly with regard to measurement - var difficultControl0 = new BrokenNativeControl(this) - { - Text = "This native control doesn't play nice with sizing, which is why it's all squished to one side." - }; - var difficultControl1 = new BrokenNativeControl(this) - { - Text = "Same control, but with a custom GetDesiredSize delegate to accomodate it's sizing problems." - }; - - // Add a misbehaving control - sl?.Children.Add(difficultControl0); - - // Add a misbehaving control with a custom delegate for GetDesiredSize - sl?.Children.Add(difficultControl1, SizeBrokenControl); - - page.NativeControlsAdded = true; - } - - static SizeRequest? SizeBrokenControl(NativeViewWrapperRenderer renderer, - int widthConstraint, int heightConstraint) - { - global::Android.Views.View nativeView = renderer.Control; - - if ((widthConstraint == 0 && heightConstraint == 0) || nativeView == null) - { - return null; - } - - int width = global::Android.Views.View.MeasureSpec.GetSize(widthConstraint); - int widthSpec = global::Android.Views.View.MeasureSpec.MakeMeasureSpec(width * 2, - global::Android.Views.View.MeasureSpec.GetMode(widthConstraint)); - nativeView.Measure(widthSpec, heightConstraint); - var size = new Size(nativeView.MeasuredWidth, nativeView.MeasuredHeight); - return new SizeRequest(size); - } - - void AddNativeBindings(NativeBindingGalleryPage page) - { - if (page.NativeControlsAdded) - return; - - StackLayout sl = page.Layout; - - var textView = new TextView(this) - { - TextSize = 14, - Text = "This will be text" - }; - - var viewGroup = new LinearLayout(this); - viewGroup.AddView(textView); - - var buttonColor = new global::Android.Widget.Button(this) { Text = "Change label Color" }; - buttonColor.Click += (sender, e) => textView.SetTextColor(Colors.Blue.ToAndroid()); - - var colorPicker = new ColorPickerView(this, 200, 200); - - textView.SetBinding(nameof(textView.Text), new Binding("NativeLabel")); - //this doesn't work because there's not TextColor property - //textView.SetBinding("TextColor", new Binding("NativeLabelColor", converter: new ColorConverter())); - colorPicker.SetBinding(nameof(colorPicker.SelectedColor), new Binding("NativeLabelColor", BindingMode.TwoWay, new ColorConverter()), "ColorPicked"); - - sl?.Children.Add(viewGroup); - sl?.Children.Add(buttonColor.ToView()); - sl?.Children.Add(colorPicker); - - page.NativeControlsAdded = true; - } - - public class ColorConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value is Color) - return ((Color)value).ToAndroid(); - - return null; - } - - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) - { - if (value is global::Android.Graphics.Color) - return ((global::Android.Graphics.Color)value).ToColor(); - - return null; - } - } - - [Export("NavigateToTest")] - public bool NavigateToTest(string test) - { - return App.NavigateToTestPage(test); - } - - [Export("Reset")] - public void Reset() - { - App.Reset(); - } - - void SetUpForceRestartTest() - { - // Listen for messages from the app restart test - MessagingCenter.Subscribe(this, RestartAppTest.ForceRestart, (e) => - { - // We can force a restart by making a configuration change; in this case, we'll enter - // Car Mode. (The easy way to do this is to change the orientation, but ControlGallery - // handles orientation changes so they don't cause a restart.) - - var uiModeManager = UiModeManager.FromContext(this); - - if (uiModeManager.CurrentModeType == UiMode.TypeCar) - { - // If for some reason we're already in car mode, disable it - uiModeManager.DisableCarMode(DisableCarModeFlags.None); - } - - uiModeManager.EnableCarMode(EnableCarModeFlags.None); - - // And put things back to normal so we can keep running tests - uiModeManager.DisableCarMode(DisableCarModeFlags.None); - - ((App)Microsoft.Maui.Controls.Application.Current).Reset(); - }); - } - } -} - diff --git a/src/Compatibility/ControlGallery/src/Android/Compatibility/ApiLabelRenderer.cs b/src/Compatibility/ControlGallery/src/Android/Compatibility/ApiLabelRenderer.cs deleted file mode 100644 index 1830180561fc..000000000000 --- a/src/Compatibility/ControlGallery/src/Android/Compatibility/ApiLabelRenderer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using Android.Content; -using Android.OS; -using Microsoft.Maui.Controls; -using Microsoft.Maui.Controls.Compatibility; -using Microsoft.Maui.Controls.ControlGallery; -using Microsoft.Maui.Controls.ControlGallery.Android; -using Microsoft.Maui.Controls.Compatibility.Platform.Android; -using Microsoft.Maui.Controls.Platform; - -[assembly: ExportRenderer(typeof(ApiLabel), typeof(ApiLabelRenderer))] -namespace Microsoft.Maui.Controls.ControlGallery.Android -{ - public class ApiLabelRenderer : Microsoft.Maui.Controls.Compatibility.Platform.Android.FastRenderers.LabelRenderer - { - public ApiLabelRenderer(Context context) : base(context) - { - } - - protected override void OnElementChanged(ElementChangedEventArgs