Merge pull request #24 from lytico/lytico/gtksharp/merge/dotnet_main-main_linux_210831

merge dotnet/main main_linux & enhance 210831
This commit is contained in:
Javier Suárez 2021-10-05 13:28:36 +02:00 коммит произвёл GitHub
Родитель 501bd9a382 4c26997e65
Коммит 0ead10ff45
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1532 изменённых файлов: 20100 добавлений и 17645 удалений

Просмотреть файл

@ -8,17 +8,17 @@
"dotnet-cake"
]
},
"microsoft.dotnet.xharness.cli": {
"version": "1.0.0-prerelease.21165.2",
"commands": [
"xharness"
]
},
"powershell": {
"version": "7.1.2",
"commands": [
"pwsh"
]
},
"microsoft.dotnet.xharness.cli": {
"version": "1.0.0-prerelease.21425.2",
"commands": [
"xharness"
]
}
}
}

Просмотреть файл

@ -1,43 +0,0 @@
---
name: Forms Previewer Bug report
about: Having a problem with the Previewer? Report it here!
title: ''
labels: forms-previewer, s/unverified
assignees: ''
---
<!-- Bug report best practices: https://github.com/xamarin/Xamarin.Forms/wiki/Submitting-Issues -->
### Description
### Steps to Reproduce
1.
2.
3.
### Expected Behavior
### Actual Behavior
### Basic Information
- Version with issue:
- Last known good version:
- IDE:
- Platform Target Frameworks: <!-- All that apply -->
- iOS: <!-- The version of the iOS SDK you are compiling against, e.g. 11.1 -->
- Android: <!-- The version of the Android SDK you are compiling against, e.g. 7.1 -->
- UWP: <!-- The version of the UWP SDK you are compiling against, e.g. 16299 -->
- Android Support Library Version: <!-- if applicable -->
- Nuget Packages:
- Affected Devices:
### Screenshots
<!-- If the issue is a visual issue, please include screenshots showing the problem if possible -->
### Reproduction Link
<!-- Please upload or provide a link to a reproduction case -->

1
.gitignore поставляемый
Просмотреть файл

@ -7,6 +7,7 @@
.nuspec/**/*.dylib
.nuspec/**/*.so
.XamarinFormsVersionFile.txt
templatesTest/
# User-specific files
*.rsuser

Просмотреть файл

@ -6,53 +6,53 @@
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.iOS')) != true AND $(TargetFramework.StartsWith('net6.0-ios')) != true AND $(TargetFramework.StartsWith('net6.0-maccatalyst')) != true ">
<Compile Remove="**\**\*.iOS.cs" />
<None Include="**\**\*.iOS.cs" />
<None Include="**\**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\iOS\**\*.cs" />
<None Include="**\iOS\**\*.cs" />
<None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.Mac')) != true ">
<Compile Remove="**\*.Mac.cs" />
<None Include="**\*.Mac.cs" />
<None Include="**\*.Mac.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Mac\**\*.cs" />
<None Include="**\Mac\**\*.cs" />
<None Include="**\Mac\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.Mac')) != true AND $(TargetFramework.StartsWith('Xamarin.iOS')) != true AND $(TargetFramework.StartsWith('net6.0-ios')) != true AND $(TargetFramework.StartsWith('net6.0-maccatalyst')) != true">
<Compile Remove="**\*.MaciOS.cs" />
<None Include="**\*.MaciOS.cs" />
<None Include="**\*.MaciOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\MaciOS\**\*.cs" />
<None Include="**\MaciOS\**\*.cs" />
<None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('MonoAndroid')) != true AND $(TargetFramework.StartsWith('net6.0-android')) != true ">
<Compile Remove="**\**\*.Android.cs" />
<None Include="**\**\*.Android.cs" />
<None Include="**\**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Android\**\*.cs" />
<None Include="**\Android\**\*.cs" />
<None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('netstandard')) != true AND '$(TargetFramework)' != 'net6.0'">
<Compile Remove="**\*.Standard.cs" />
<None Include="**\*.Standard.cs" />
<None Include="**\*.Standard.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Standard\**\*.cs" />
<None Include="**\Standard\**\*.cs" />
<None Include="**\Standard\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true ">
<Compile Remove="**\*.Windows.cs" />
<None Include="**\*.Windows.cs" />
<None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Windows\**\*.cs" />
<None Include="**\Windows\**\*.cs" />
<None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\*.uwp.cs" />
<None Include="**\*.uwp.cs" />
<None Include="**\*.uwp.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<MauiXaml Remove="**\*.Windows.xaml" />
<None Include="**\*.Windows.xaml" />
<None Include="**\*.Windows.xaml" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\*.Windows.xaml.cs" />
<None Include="**\*.Windows.xaml.cs" />
<None Include="**\*.Windows.xaml.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<MauiXaml Remove="**\Windows\**\*.xaml" />
<None Include="**\Windows\**\*.xaml" />
<None Include="**\Windows\**\*.xaml" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Windows\**\*.xaml.cs" />
<None Include="**\Windows\**\*.xaml.cs" />
<None Include="**\Windows\**\*.xaml.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('uap10.0')) ">
<Compile Remove="**\*.uwp.cs" />
<None Include="**\*.uwp.cs" />
<None Include="**\*.uwp.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<ItemGroup Condition="$(DefineConstants.Contains('GTK')) != true ">
<Compile Remove="**\*.Gtk.cs" />
@ -116,10 +116,10 @@
<DefineConstants>WINDOWS_UWP;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) == true ">
<PackageReference Include="Microsoft.ProjectReunion" />
<PackageReference Include="Microsoft.ProjectReunion.Foundation" />
<PackageReference Include="Microsoft.ProjectReunion.WinUI" />
<PackageReference Include="Microsoft.ProjectReunion.InteractiveExperiences" NoWarn="NU1701" />
<PackageReference Include="Microsoft.WindowsAppSDK" />
<PackageReference Include="Microsoft.WindowsAppSDK.Foundation" />
<PackageReference Include="Microsoft.WindowsAppSDK.WinUI" />
<PackageReference Include="Microsoft.WindowsAppSDK.InteractiveExperiences" NoWarn="NU1701" />
<PackageReference Include="Microsoft.Graphics.Win2D" />
<PackageReference Include="Microsoft.Maui.Graphics.Win2D.WinUI.Desktop" />
</ItemGroup>

Просмотреть файл

@ -44,6 +44,8 @@
<EnableDefaultPageItems>False</EnableDefaultPageItems>
<EnableDefaultApplicationDefinition>False</EnableDefaultApplicationDefinition>
<_SingleProjectWindowsExcludes>$(WindowsProjectFolder)/**/.*/**</_SingleProjectWindowsExcludes>
<WindowsPackageType Condition="'$(EnablePreviewMsixTooling)' == 'true'">MSIX</WindowsPackageType>
<OutputType Condition="'$(OutputType)' == 'Exe'">WinExe</OutputType>
</PropertyGroup>
<!-- Removals -->
@ -78,6 +80,7 @@
<!-- IDE capabilities -->
<ItemGroup Condition=" '$(SingleProject)' == 'true' ">
<ProjectCapability Include="Msix" />
<ProjectCapability Include="MauiSingleProject" />
<ProjectCapability Include="LaunchProfiles" />
<!-- If VS is older than Dev17 -->

Просмотреть файл

@ -16,11 +16,11 @@
<DefineConstants Condition="!$(_IsHotRestartDefined) And '$(IsHotRestartBuild)' == 'true'">HOTRESTART;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<ItemGroup>
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="GenKind" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="ManifestResourceName" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="TargetPath" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="ItemSpec" />
</ItemGroup>
<ItemGroup>
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="GenKind" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="ManifestResourceName" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="TargetPath" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="ItemSpec" />
</ItemGroup>
</Project>

Просмотреть файл

@ -2,11 +2,11 @@
<Target Name="_RemoveIncompatibleXamlFiles" BeforeTargets="BeforeBuild" Condition="'$(MauiRemoveIncompatibleXaml)' != 'false' and $(TargetFramework.Contains('-windows')) == true and '$(SingleProject)' != 'true'">
<!-- assume all xaml files in a non-WinExe are MAUI xaml, so remove WinUI xaml -->
<ItemGroup Condition=" '$(OutputType)' != 'WinExe' ">
<ItemGroup Condition=" '$(OutputType)' != 'WinExe' and '$(OutputType)' != 'Exe' ">
<Page Remove="**/*.xaml" />
</ItemGroup>
<!-- assume all xaml files in a WinExe are WinUI xaml, so remove MAUI xaml -->
<ItemGroup Condition=" '$(OutputType)' == 'WinExe' ">
<ItemGroup Condition=" '$(OutputType)' == 'WinExe' or '$(OutputType)' == 'Exe' ">
<EmbeddedResource Remove="**\*.xaml" />
<MauiXaml Remove="**\*.xaml" />
<Compile Remove="**\*.xaml" />

Просмотреть файл

@ -74,7 +74,7 @@
<_ResizetizerIsiOSApp Condition="'$(TargetFrameworkIdentifier)' == 'Xamarin.iOS' And ('$(OutputType)' == 'Exe' Or '$(IsAppExtension)' == 'True')">True</_ResizetizerIsiOSApp>
<_ResizetizerIsUWPApp Condition="'$(TargetPlatformIdentifier)' == 'UAP' And '$(OutputType)' == 'AppContainerExe'">True</_ResizetizerIsUWPApp>
<_ResizetizerIsWPFApp Condition="'$(IsApplication)' == 'True' And '$(NuGetRuntimeIdentifier)' == 'win' And '$(TargetPlatformIdentifier)' == 'Windows'">True</_ResizetizerIsWPFApp>
<_ResizetizerIsWinUIApp>False</_ResizetizerIsWinUIApp>
<_ResizetizerIsWindowsAppSdk>False</_ResizetizerIsWindowsAppSdk>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
@ -83,10 +83,10 @@
<_ResizetizerIsiOSApp Condition="('$(TargetPlatformIdentifier)' == 'ios' Or '$(TargetPlatformIdentifier)' == 'maccatalyst') And ('$(OutputType)' == 'Exe' Or '$(IsAppExtension)' == 'True')">True</_ResizetizerIsiOSApp>
<_ResizetizerIsUWPApp Condition="'$(TargetPlatformIdentifier)'=='UAP' And '$(OutputType)' == 'AppContainerExe'">True</_ResizetizerIsUWPApp>
<_ResizetizerIsWPFApp Condition="'$(IsApplication)' == 'True' And '$(NuGetRuntimeIdentifier)' == 'win' And '$(TargetPlatformIdentifier)'=='Windows'">True</_ResizetizerIsWPFApp>
<_ResizetizerIsWinUIApp Condition="'$(ProjectReunionWinUI)'=='True' And '$(TargetPlatformIdentifier)'=='Windows' And '$(OutputType)' == 'WinExe'">True</_ResizetizerIsWinUIApp>
<_ResizetizerIsWindowsAppSdk Condition="'$(ProjectReunionWinUI)'=='True' And '$(TargetPlatformIdentifier)'=='Windows' And ('$(OutputType)' == 'WinExe' Or '$(OutputType)' == 'Exe')">True</_ResizetizerIsWindowsAppSdk>
</PropertyGroup>
<PropertyGroup Condition="'$(_ResizetizerIsAndroidApp)' == 'True' Or '$(_ResizetizerIsiOSApp)' == 'True' Or '$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWPFApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<PropertyGroup Condition="'$(_ResizetizerIsAndroidApp)' == 'True' Or '$(_ResizetizerIsiOSApp)' == 'True' Or '$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWPFApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<_ResizetizerIsCompatibleApp>True</_ResizetizerIsCompatibleApp>
<ResizetizeDependsOnTargets>
@ -143,7 +143,7 @@
</PropertyGroup>
<!-- UWP / WinUI -->
<PropertyGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<PropertyGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<ResizetizerPlatformType>uwp</ResizetizerPlatformType>
<ResizetizeBeforeTargets>
@ -261,7 +261,7 @@
</Target>
<Target Name="ProcessMauiAssets">
<PropertyGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<PropertyGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<_MauiAssetFolderName>Assets</_MauiAssetFolderName>
<_MauiAssetItemMetadata>TargetPath</_MauiAssetItemMetadata>
</PropertyGroup>
@ -272,7 +272,7 @@
Input="@(MauiAsset)">
<Output ItemName="AndroidAsset" TaskParameter="Output" Condition="'$(_ResizetizerIsAndroidApp)' == 'True'" />
<Output ItemName="Content" TaskParameter="Output" Condition="'$(_ResizetizerIsiOSApp)' == 'True'" />
<Output ItemName="ContentWithTargetPath" TaskParameter="Output" Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'" />
<Output ItemName="ContentWithTargetPath" TaskParameter="Output" Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'" />
</GetMauiAssetPath>
</Target>
@ -317,11 +317,11 @@
<!-- UWP / WinUI -->
<GenerateSplashAssets
Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'"
Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'"
IntermediateOutputPath="$(_MauiIntermediateSplashScreen)"
MauiSplashScreen="@(MauiSplashScreen)"
/>
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" />
<ContentWithTargetPath Include="@(_MauiSplashAssets)">
<TargetPath>Assets\%(_MauiSplashAssets.Filename)%(_MauiSplashAssets.Extension)</TargetPath>
@ -380,7 +380,7 @@
<!-- iOS - Partial Info.plist for font registration -->
<ItemGroup Condition="'$(_ResizetizerIsiOSApp)' == 'True' ">
<_PartialAppManifest Include="@(_MauiFontPListFiles)" Condition="'@(_MauiFontPListFiles)' != ''" />
<PartialAppManifest Include="@(_MauiFontPListFiles)" Condition="'@(_MauiFontPListFiles)' != ''" />
<FileWrites Include="@(_MauiFontPListFiles)" Condition="'@(_MauiFontPListFiles)' != ''" />
</ItemGroup>
@ -394,7 +394,7 @@
</ItemGroup>
<!-- UWP / WinUI -->
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<ContentWithTargetPath Include="@(_MauiFontCopied)" Condition="'@(_MauiFontCopied)' != ''">
<TargetPath>Assets\$([System.IO.Path]::GetFileName(%(_MauiFontCopied.Identity)))</TargetPath>
@ -506,7 +506,7 @@
</ItemGroup>
<!-- UWP / WinUI -->
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWinUIApp)' == 'True'">
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
<ContentWithTargetPath Include="@(_ResizetizerCollectedImages)">
<TargetPath>Assets\%(_ResizetizerCollectedImages.Filename)%(_ResizetizerCollectedImages.Extension)</TargetPath>
</ContentWithTargetPath>

Просмотреть файл

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<CompilerVisibleProperty Include="RootNamespace" />
<CompilerVisibleProperty Include="ApplicationId" />
<CompilerVisibleProperty Include="ApplicationTitle" />
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="IsMauiSplashScreen" />
<AdditionalFiles Include="@(MauiSplashScreen)" IsMauiSplashScreen="True" />
</ItemGroup>
</Project>

Двоичные данные
Assets/maui-weather-hero-sm.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 695 KiB

Просмотреть файл

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30503.244
# Visual Studio Version 17
VisualStudioVersion = 17.0.31620.27
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{9AD757F5-E57A-459D-A0A7-E0675E045B84}"
EndProject
@ -89,7 +89,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{0F9BA970-11B1-4ACA-AF41-1021AFC0F29C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\src\TestUtils\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "src\TestUtils\TestUtils.DeviceTests\src\TestUtils.DeviceTests.csproj", "{551B2209-4298-4D60-B55C-79077B8BC244}"
EndProject
@ -125,7 +125,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maps", "Maps", "{4030A39F-7
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{AC1BF2B0-ACB7-42EF-9D4F-CF4424A4EF76}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.Android.UnitTests", "src\Compatibility\Core\tests\Android\Compatibility.Android.UnitTests.csproj", "{A4C57790-71D1-467C-A69E-2BD84CB6666C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Android.UnitTests", "src\Compatibility\Core\tests\Android\Compatibility.Android.UnitTests.csproj", "{A4C57790-71D1-467C-A69E-2BD84CB6666C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{9318E5D8-A9C4-42DB-89B8-36EC31362ABB}"
EndProject
@ -133,31 +133,31 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Compatibility.ControlGaller
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core.csproj", "{E7D17A14-8399-4139-BDAA-EE4C1A3447FC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.ControlGallery.Android", "src\Compatibility\ControlGallery\src\Android\Compatibility.ControlGallery.Android.csproj", "{BB933AF2-9498-4C4E-9F76-AF66A550BED3}"
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("{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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.ControlGallery.Android.UITests", "src\Compatibility\ControlGallery\test\Android.UITests\Compatibility.ControlGallery.Android.UITests.csproj", "{A34EBE01-25BF-4E69-A2DC-2288DC625541}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.ControlGallery.iOS.UITests", "src\Compatibility\ControlGallery\test\iOS.UITests\Compatibility.ControlGallery.iOS.UITests.csproj", "{EADD8100-B3AE-4A31-92C4-267A64A1C6EB}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.ControlGallery.iOS", "src\Compatibility\ControlGallery\src\iOS\Compatibility.ControlGallery.iOS.csproj", "{C7131F14-274F-4B55-ACA9-E81731AD012F}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.Maps.iOS", "src\Compatibility\Maps\src\iOS\Compatibility.Maps.iOS.csproj", "{ABA078C4-F9BB-4924-8B2B-10FE0D2F5491}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compatibility.iOS.UnitTests", "src\Compatibility\Core\tests\iOS\Compatibility.iOS.UnitTests.csproj", "{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.iOS.UnitTests", "src\Compatibility\Core\tests\iOS\Compatibility.iOS.UnitTests.csproj", "{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility", "src\Compatibility\Core\src\Compatibility.csproj", "{8E86F0DA-ED1C-409E-A7A9-DF3E58498620}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{a34ebe01-25bf-4e69-a2dc-2288dc625541}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{a34ebe01-25bf-4e69-a2dc-2288dc625541}*SharedItemsImports = 4
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*{e7d17a14-8399-4139-bdaa-ee4c1a3447fc}*SharedItemsImports = 5
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{eadd8100-b3ae-4a31-92c4-267a64a1c6eb}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{eadd8100-b3ae-4a31-92c4-267a64a1c6eb}*SharedItemsImports = 4
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU

Просмотреть файл

@ -4,18 +4,30 @@ This page contains steps to build and run the .NET MAUI repository from source.
## Requirements
- Install the SDKs listed in the [maui-samples](https://github.com/dotnet/maui-samples) repository.
- [Install .NET6](https://github.com/dotnet/maui/wiki/Installing-.NET-6)
## Running
### .NET 6
#### Compile with globally installed `dotnet`
This will build and launch Visual Studio using global workloads
```dotnetcli
dotnet tool restore
dotnet cake --target=VS-NET6 --workloads=global
```
#### Compile using a local `bin\dotnet`
You can run a `Cake` target to bootstrap .NET 6 in `bin\dotnet` and launch Visual Studio:
```dotnetcli
dotnet tool restore
dotnet cake --target=VS-NET6
```
_NOTES:_
- _VS Mac is not yet supported._
- _If the IDE doesn't show any Android devices try unloading and reloading the `Sample.Droid-net6` project._
@ -34,7 +46,7 @@ dotnet build src\DotNet\DotNet.csproj
dotnet cake --target=VS-DOGFOOD
```
To build & run .NET 6 sample apps, you will also need to use `.\bin\dotnet\dotnet`:
To build & run .NET 6 sample apps, you will also need to use `.\bin\dotnet\dotnet` or just `dotnet` if you've installed the workloads globally:
```dotnetcli
.\bin\dotnet\dotnet build src\Controls\samples\Controls.Sample.Droid\Maui.Controls.Sample.Droid-net6.csproj -t:Run
.\bin\dotnet\dotnet build src\Controls\samples\Controls.Sample.iOS\Maui.Controls.Sample.iOS-net6.csproj -t:Run
@ -53,7 +65,7 @@ To build and run Blazor Desktop samples, check out the [Blazor Desktop](https://
### Win UI 3
To build and run WinUI 3 support, please install the additional components mentioned on the [Getting Started](https://github.com/dotnet/maui/wiki/Getting-Started) page and run:
To build and run WinUI 3 support, please install the additional components mentioned on the [Getting Started](https://docs.microsoft.com/en-us/dotnet/maui/get-started/installation) page and run:
```dotnetcli
dotnet tool restore

Просмотреть файл

@ -2,18 +2,13 @@
<Import Project="eng\Versions.props" />
<PropertyGroup>
<!-- Workaround: https://github.com/dotnet/sdk/issues/19050 -->
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
<PropertyGroup>
<BuildForWinUI Condition=" ('$(SolutionFileName)' == 'Microsoft.Maui.WinUI.sln' OR '$(SolutionFileName)' == 'BlazorWindows-net6.sln') AND '$(Packing)' == ''">true</BuildForWinUI>
<BuildForWinUI Condition=" ($(SolutionFileName.Contains('winui')) OR '$(SolutionFileName)' == 'BlazorWindows-net6.sln') AND '$(Packing)' == ''">true</BuildForWinUI>
<BuildForAndroid Condition="'$(SolutionFileName)' == 'Microsoft.Maui.Droid.sln' AND '$(Packing)' == ''">true</BuildForAndroid>
<BuildForNet6 Condition="'$(Packing)' == 'true' OR $(MSBuildProjectFile.Contains('SingleProject')) OR $(MSBuildProjectFile.Contains('Profiling')) OR $(MSBuildProjectFile.Contains('net6')) OR $(SolutionFileName.Contains('net6')) OR '$(BuildForWinUI)' == 'true' OR '$(BuildForAndroid)' == 'true'">true</BuildForNet6>
<MauiPlatforms>net6.0-ios;net6.0-maccatalyst;net6.0-android</MauiPlatforms>
<WindowsTargetFramework Condition="'$(WindowsTargetFramework)' == ''">net6.0-windows10.0.18362</WindowsTargetFramework>
<MauiPlatforms Condition="'$(Packing)' == 'true'">$(MauiPlatforms);$(WindowsTargetFramework)</MauiPlatforms>
<MauiPlatforms Condition="'$(BuildForWinUI)' == 'true'">$(WindowsTargetFramework)</MauiPlatforms>
<WindowsMauiPlatforms Condition="'$(WindowsMauiPlatforms)' == ''">net6.0-windows10.0.19041;net6.0-windows10.0.18362</WindowsMauiPlatforms>
<MauiPlatforms Condition="'$(Packing)' == 'true'">$(MauiPlatforms);$(WindowsMauiPlatforms)</MauiPlatforms>
<MauiPlatforms Condition="'$(BuildForWinUI)' == 'true'">$(WindowsMauiPlatforms)</MauiPlatforms>
<MauiPlatforms Condition="'$(BuildForAndroid)' == 'true'">net6.0-android</MauiPlatforms>
<!-- Work around the IDE not properly handling the NU1703 warning -->
@ -39,11 +34,16 @@
<NonNet6EssentialsPlatforms Condition="'$(BuildNonNet6ForAndroid)' == 'true'">netstandard2.0;netstandard2.1;MonoAndroid10.0</NonNet6EssentialsPlatforms>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<!-- <GenerateRuntimeConfigurationFiles>false</GenerateRuntimeConfigurationFiles> -->
<!-- HACK: WinUI seems to have issues without this -->
<GenerateLibraryLayout>true</GenerateLibraryLayout>
<DisableEmbeddedXbf>false</DisableEmbeddedXbf>
<DefineConstants Condition="$(TargetFramework.Contains('-windows'))">$(DefineConstants);WINDOWS</DefineConstants>
<!-- Workaround: https://github.com/dotnet/sdk/issues/19050 -->
<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>
</PropertyGroup>
<PropertyGroup>

Просмотреть файл

@ -1,5 +1,6 @@
<Project>
<Import Condition="'$(SampleProject)' == 'true' or '$(CI)' != 'true' " Project="eng\Versions.dev.targets" />
<Import Condition="'$(SampleProject)' != 'true' and '$(CI)' == 'true'" Project="eng\Git.Build.targets" />
<Import Condition="'$(SampleProject)' != 'true' and '$(CI)' == 'true' " Project="eng\Versions.targets" />
<Import Project="eng\AndroidX.targets" />

Просмотреть файл

@ -1 +1 @@
6.0.100-rc.1
6.0.100-rc.2

Просмотреть файл

@ -4,12 +4,6 @@ VisualStudioVersion = 17.0.31410.414
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core-net6", "src\Core\src\Core-net6.csproj", "{95BA42B5-B00E-4986-B9B5-517140378452}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Files", "Files", "{449F6071-A74F-4309-8D7B-7038CFD1B17B}"
ProjectSection(SolutionItems) = preProject
.nuspec\Microsoft.Maui.Controls.MultiTargeting.targets = .nuspec\Microsoft.Maui.Controls.MultiTargeting.targets
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core-net6", "src\Controls\src\Core\Controls.Core-net6.csproj", "{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility-net6", "src\Compatibility\Core\src\Compatibility-net6.csproj", "{00A11C2F-969F-4964-8557-91ADF4B1523D}"
@ -50,9 +44,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Templates",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{6998CAA1-11D4-46B2-B80F-0AC882F58124}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{FBB3270F-1924-4A72-845E-A6DF39C402F6}"
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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.UnitTests-net6", "src\Core\tests\UnitTests\Core.UnitTests-net6.csproj", "{92644F6F-5946-48FC-A21A-A3D6EE24E8B3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E8AD265B-3C67-4640-AC58-A522F9FB3361}"
EndProject
@ -74,15 +68,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRazorClassLibrarySample
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.SourceGen-net6", "src\Controls\src\SourceGen\Controls.SourceGen-net6.csproj", "{22C17254-2CB4-4AE7-A558-E3208E1D19D3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests-net6", "src\TestUtils\TestUtils.DeviceTests\src\TestUtils.DeviceTests-net6.csproj", "{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests-net6", "src\Core\tests\DeviceTests\Core.DeviceTests-net6.csproj", "{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}"
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}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer.UnitTests-net6", "src\SingleProject\Resizetizer\test\UnitTests\Resizetizer.UnitTests-net6.csproj", "{05DB57B8-D0A5-499B-AD35-7093C2E9C9D7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A8E9400E-70DD-421F-8609-1C2FA4AE8E71}"
EndProject
@ -114,17 +104,92 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Maui", "s
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Extensions", "src\Workload\Microsoft.Maui.Extensions\Microsoft.Maui.Extensions.csproj", "{6EDE0C1B-B718-4331-99BA-423042CDBE24}"
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", "{446EB407-57EB-441D-9ADB-1A006CBF672A}"
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-net6", "src\Essentials\test\UnitTests\Essentials.UnitTests-net6.csproj", "{A9BAB840-A53E-405A-9458-CA0E02319FB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Maps-net6", "src\Controls\Maps\src\Controls.Maps-net6.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-net6", "src\Controls\tests\Core.UnitTests\Controls.Core.UnitTests-net6.csproj", "{094FB109-1CBC-4B84-8CFB-072E7B3EC637}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests-net6", "src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests-net6.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}") = "test", "test", "{D8CD878F-34BC-4393-881A-E3DD7348A13E}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{FA181CD5-95AF-46B7-95D2-852F2398833C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Maps-net6", "src\Controls\Maps\src\Controls.Maps-net6.csproj", "{41CF73B5-D60E-4644-BA72-904CFF43C4AF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.Core-net6", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core-net6.csproj", "{772E2531-2270-429A-9AFB-4AA0104AEF27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.UnitTests-net6", "src\Controls\tests\Core.UnitTests\Controls.Core.UnitTests-net6.csproj", "{DCA77B3F-73C2-488C-8D16-F5055DC3098C}"
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}") = "Core.Benchmarks-net6", "src\Core\tests\Benchmarks\Core.Benchmarks-net6.csproj", "{A1B1052C-740D-4733-BB3F-8558B661E78D}"
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}") = "test", "test", "{85EBD2BA-EA5A-4B1F-AF16-81FBD58579DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Android.UnitTests", "src\Compatibility\Core\tests\Android\Compatibility.Android.UnitTests.csproj", "{A4C57790-71D1-467C-A69E-2BD84CB6666C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.iOS.UnitTests", "src\Compatibility\Core\tests\iOS\Compatibility.iOS.UnitTests.csproj", "{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}"
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}"
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
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
@ -155,20 +220,25 @@ Global
{BE50FAEF-4096-48B5-B9CE-EE0C38F15A18}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BE50FAEF-4096-48B5-B9CE-EE0C38F15A18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE50FAEF-4096-48B5-B9CE-EE0C38F15A18}.Release|Any CPU.Build.0 = Release|Any CPU
{BE50FAEF-4096-48B5-B9CE-EE0C38F15A18}.Release|Any CPU.Deploy.0 = Release|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Release|Any CPU.Build.0 = Release|Any CPU
{1C3439E6-73D7-4F8E-A64A-5448F5CB18DE}.Release|Any CPU.Deploy.0 = Release|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Release|Any CPU.Build.0 = Release|Any CPU
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6}.Release|Any CPU.Deploy.0 = Release|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.Release|Any CPU.Build.0 = Release|Any CPU
{CB495F62-CFE6-4975-AED8-F26B6C5D0113}.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
@ -217,16 +287,6 @@ Global
{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
{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E}.Release|Any CPU.Build.0 = Release|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Release|Any CPU.Build.0 = Release|Any CPU
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC}.Release|Any CPU.Deploy.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
@ -283,24 +343,114 @@ Global
{6EDE0C1B-B718-4331-99BA-423042CDBE24}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EDE0C1B-B718-4331-99BA-423042CDBE24}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EDE0C1B-B718-4331-99BA-423042CDBE24}.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
{41CF73B5-D60E-4644-BA72-904CFF43C4AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41CF73B5-D60E-4644-BA72-904CFF43C4AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41CF73B5-D60E-4644-BA72-904CFF43C4AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41CF73B5-D60E-4644-BA72-904CFF43C4AF}.Release|Any CPU.Build.0 = Release|Any CPU
{DCA77B3F-73C2-488C-8D16-F5055DC3098C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DCA77B3F-73C2-488C-8D16-F5055DC3098C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCA77B3F-73C2-488C-8D16-F5055DC3098C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DCA77B3F-73C2-488C-8D16-F5055DC3098C}.Release|Any CPU.Build.0 = Release|Any CPU
{A1B1052C-740D-4733-BB3F-8558B661E78D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1B1052C-740D-4733-BB3F-8558B661E78D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1B1052C-740D-4733-BB3F-8558B661E78D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1B1052C-740D-4733-BB3F-8558B661E78D}.Release|Any CPU.Build.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
{A4C57790-71D1-467C-A69E-2BD84CB6666C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A4C57790-71D1-467C-A69E-2BD84CB6666C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A4C57790-71D1-467C-A69E-2BD84CB6666C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A4C57790-71D1-467C-A69E-2BD84CB6666C}.Release|Any CPU.Build.0 = Release|Any CPU
{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE}.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
{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
{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
{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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -308,8 +458,8 @@ Global
GlobalSection(NestedProjects) = preSolution
{95BA42B5-B00E-4986-B9B5-517140378452} = {E8AD265B-3C67-4640-AC58-A522F9FB3361}
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F} = {50C758FE-4E10-409A-94F5-A75480960864}
{00A11C2F-969F-4964-8557-91ADF4B1523D} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{EB956381-F3E6-437C-9069-36B8BF5C6E2F} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{00A11C2F-969F-4964-8557-91ADF4B1523D} = {446EB407-57EB-441D-9ADB-1A006CBF672A}
{EB956381-F3E6-437C-9069-36B8BF5C6E2F} = {446EB407-57EB-441D-9ADB-1A006CBF672A}
{E1082E26-D700-4127-9329-66D673FD2D55} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{B8DC1324-977C-46F1-B697-9064ADE6099A} = {E1082E26-D700-4127-9329-66D673FD2D55}
{BE50FAEF-4096-48B5-B9CE-EE0C38F15A18} = {E1082E26-D700-4127-9329-66D673FD2D55}
@ -317,11 +467,11 @@ Global
{D7FE9FD0-144A-4199-93FC-3AD62325F1D6} = {E1082E26-D700-4127-9329-66D673FD2D55}
{CB495F62-CFE6-4975-AED8-F26B6C5D0113} = {E1082E26-D700-4127-9329-66D673FD2D55}
{75C380E0-CE53-4C01-B89F-CF685331DE18} = {50C758FE-4E10-409A-94F5-A75480960864}
{39B47A3C-21CA-4B28-9250-14FD957EB0FC} = {94F3C036-A5F4-4ACC-A028-8506802ADB88}
{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} = {6998CAA1-11D4-46B2-B80F-0AC882F58124}
{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}
@ -331,8 +481,6 @@ Global
{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}
{ACE5B2A1-4DA9-47A9-8CE7-164595048E6E} = {6998CAA1-11D4-46B2-B80F-0AC882F58124}
{E4B95A7E-968D-4970-80C9-A1CAD14E31EC} = {C564DDD6-DE79-45CD-88EA-3F690481572A}
{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}
@ -350,11 +498,44 @@ Global
{02414DF4-FBE9-400B-8F3F-40DDC7F8FEFC} = {EC63FD88-5E12-46D7-B440-68F70241D987}
{081EE5E5-69D4-493C-9EB4-47423C4728AB} = {EC63FD88-5E12-46D7-B440-68F70241D987}
{6EDE0C1B-B718-4331-99BA-423042CDBE24} = {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}
{446EB407-57EB-441D-9ADB-1A006CBF672A} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{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}
{D8CD878F-34BC-4393-881A-E3DD7348A13E} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{41CF73B5-D60E-4644-BA72-904CFF43C4AF} = {50C758FE-4E10-409A-94F5-A75480960864}
{DCA77B3F-73C2-488C-8D16-F5055DC3098C} = {D8CD878F-34BC-4393-881A-E3DD7348A13E}
{A1B1052C-740D-4733-BB3F-8558B661E78D} = {C564DDD6-DE79-45CD-88EA-3F690481572A}
{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}
{85EBD2BA-EA5A-4B1F-AF16-81FBD58579DF} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{A4C57790-71D1-467C-A69E-2BD84CB6666C} = {85EBD2BA-EA5A-4B1F-AF16-81FBD58579DF}
{52C50E88-7F15-45FE-A63C-8E7C76CA2BAE} = {85EBD2BA-EA5A-4B1F-AF16-81FBD58579DF}
{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}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50}

411
Microsoft.Maui-winui.sln Normal file
Просмотреть файл

@ -0,0 +1,411 @@
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-net6", "src\Core\src\Core-net6.csproj", "{95BA42B5-B00E-4986-B9B5-517140378452}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core-net6", "src\Controls\src\Core\Controls.Core-net6.csproj", "{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility-net6", "src\Compatibility\Core\src\Compatibility-net6.csproj", "{00A11C2F-969F-4964-8557-91ADF4B1523D}"
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-net6", "src\Controls\samples\Controls.Sample\Maui.Controls.Sample-net6.csproj", "{B8DC1324-977C-46F1-B697-9064ADE6099A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compatibility", "Compatibility", "{123AA89E-1638-4E0E-B828-B8F9F9F906A2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Build.Tasks-net6", "src\Controls\src\Build.Tasks\Controls.Build.Tasks-net6.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-net6", "src\Essentials\src\Essentials-net6.csproj", "{39B47A3C-21CA-4B28-9250-14FD957EB0FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml-net6", "src\Controls\src\Xaml\Controls.Xaml-net6.csproj", "{CC3D4667-D94E-4276-9311-6439BFD075E4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9F94CF92-5808-45B4-B08B-6E1B65389AD8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{5774C01E-9D4D-47C0-BECD-1564EDE70926}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{44510C11-7CBF-4FE4-9F23-AE1FEE743522}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\src\TestUtils\TestUtils.csproj", "{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.UnitTests-net6", "src\Core\tests\UnitTests\Core.UnitTests-net6.csproj", "{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BlazorWebView", "BlazorWebView", "{17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Maps-net6", "src\Controls\Maps\src\Controls.Maps-net6.csproj", "{DE354790-6107-468A-B388-E1EFF1416240}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{802AA31E-051C-482F-9CA2-3F8FB11C251E}"
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-net6", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core-net6.csproj", "{63FFAE7F-72CE-4458-8C28-5D7733804816}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.CustomAttributes", "src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj", "{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{5C481AFC-E327-41A7-9FED-395519E6B4AF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3E56DEAA-CB3F-4905-BD59-8B3D31D04499}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Windows.UnitTests", "src\Compatibility\Core\tests\WinUI\Compatibility.Windows.UnitTests.csproj", "{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C3870B28-291A-4DD8-862A-6ADC632E09D0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{10F4E7CB-E20E-4393-BD88-FD7075AC4525}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUI.UITests", "src\Compatibility\ControlGallery\test\WinUI.UITests\WinUI.UITests.csproj", "{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRazorClassLibrarySample", "src\BlazorWebView\samples\MauiRazorClassLibrarySample\MauiRazorClassLibrarySample.csproj", "{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.SourceGen-net6", "src\Controls\src\SourceGen\Controls.SourceGen-net6.csproj", "{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.WindowsForms", "src\BlazorWebView\src\WindowsForms\Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj", "{43F6074F-F96B-4B3D-868D-536C5212489C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Wpf", "src\BlazorWebView\src\Wpf\Microsoft.AspNetCore.Components.WebView.Wpf.csproj", "{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.WebView2", "src\BlazorWebView\src\WebView2\Microsoft.AspNetCore.Components.WebView.WebView2.csproj", "{F89D546F-717C-440A-B8A5-6B404D85D4CB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Maui", "src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj", "{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F1F73414-B424-4077-B8BE-31483F4B2CFF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebViewAppShared", "src\BlazorWebView\samples\WebViewAppShared\WebViewAppShared.csproj", "{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWinFormsApp", "src\BlazorWebView\samples\BlazorWinFormsApp\BlazorWinFormsApp.csproj", "{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWpfApp", "src\BlazorWebView\samples\BlazorWpfApp\BlazorWpfApp.csproj", "{D9232847-18A6-461E-B974-B48FC3D44811}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners.SourceGen", "src\TestUtils\src\DeviceTests.Runners.SourceGen\TestUtils.DeviceTests.Runners.SourceGen.csproj", "{36A26976-BB1F-4B11-96B4-8042DE5F72EC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C804DA95-C856-4090-8B0A-94F1691406FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{748E5A78-2A8E-4211-8584-95D73BE2F72B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Runners", "src\TestUtils\src\DeviceTests.Runners\TestUtils.DeviceTests.Runners.csproj", "{12B0CB4E-23EA-4824-AE29-8DD1FB845806}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests.Sample", "src\TestUtils\samples\DeviceTests.Sample\TestUtils.DeviceTests.Sample.csproj", "{8A48532C-8522-4FED-88C4-63A078871977}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7C68E109-0D43-46BB-8B41-8C439C4B9F02}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CE647548-8401-475E-B819-7EBBCD689E7F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.UnitTests-net6", "src\Essentials\test\UnitTests\Essentials.UnitTests-net6.csproj", "{D83EF2B4-AF82-415B-B676-460C5282BE21}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.DeviceTests", "src\Essentials\test\DeviceTests\Essentials.DeviceTests.csproj", "{6CBE5266-3047-496E-A079-BA6F5B88038F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{361A4F79-AB0F-423E-A1FD-BA5D0678C65F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{A71D39F0-2BF0-49B3-A2C6-101580EDD304}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Templates", "src\Templates\src\Microsoft.Maui.Templates.csproj", "{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SingleProject", "SingleProject", "{6B940FCC-88EE-464E-B26F-BCDD56174E8A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{6621B7CA-EDEA-46EC-B019-15F1E0B97F8D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7D96815E-D2BD-42ED-BE82-B2D0C9706301}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer", "src\SingleProject\Resizetizer\src\Resizetizer.csproj", "{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer.UnitTests-net6", "src\SingleProject\Resizetizer\test\UnitTests\Resizetizer.UnitTests-net6.csproj", "{0F88B718-7F93-43D8-A753-E498CB24E2A8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Benchmarks", "src\Core\tests\Benchmarks\Core.Benchmarks.csproj", "{32DD24E0-0409-4C9E-8088-A96C8EBD99DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests", "src\Core\tests\DeviceTests\Core.DeviceTests.csproj", "{53465DB2-9BFF-4975-B9D0-EA5C2479D979}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.Design-net6", "src\Controls\src\Core.Design\Controls.Core.Design-net6.csproj", "{D7D84756-60D1-4EDF-966C-32E063F68E5D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.Design-net6", "src\Controls\src\Xaml.Design\Controls.Xaml.Design-net6.csproj", "{832711B9-EB4C-42A1-9E8A-A0D48AA75470}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.WinUI", "src\Controls\samples\Controls.Sample.WinUI\Maui.Controls.Sample.WinUI.csproj", "{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.WinUI", "src\Compatibility\ControlGallery\src\WinUI\Compatibility.ControlGallery.WinUI.csproj", "{5BA5283D-710E-49D1-8EB9-EB61385107C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core.UnitTests-net6", "src\Controls\tests\Core.UnitTests\Controls.Core.UnitTests-net6.csproj", "{033FD150-887A-44DB-A0E7-7555B1BF8B07}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests-net6", "src\Controls\tests\Xaml.UnitTests\Controls.Xaml.UnitTests-net6.csproj", "{454208AB-7A1A-4445-96C7-CFE410F0D5D6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A2379B6A-CF92-4C97-8F72-FE9EAC669949}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample.Server.WebAuthenticator", "src\Essentials\samples\Sample.Server.WebAuthenticator\Essentials.Sample.Server.WebAuthenticator.csproj", "{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample", "src\Essentials\samples\Samples\Essentials.Sample.csproj", "{B157321E-9FB6-430E-B36C-D389DDEC22DE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.SingleProject", "src\Controls\samples\Controls.Sample.SingleProject\Maui.Controls.Sample.SingleProject.csproj", "{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{63ffae7f-72ce-4458-8c28-5d7733804816}*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
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
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.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}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|Any CPU.Build.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
{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
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|Any CPU.Build.0 = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|Any CPU.Build.0 = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|Any CPU.Build.0 = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|Any CPU.Build.0 = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|Any CPU.Build.0 = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|Any CPU.Build.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
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|Any CPU.Build.0 = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|Any CPU.Build.0 = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|Any CPU.Build.0 = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|Any CPU.Build.0 = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|Any CPU.Build.0 = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|Any CPU.Build.0 = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|Any CPU.Build.0 = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|Any CPU.Build.0 = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|Any CPU.Build.0 = Release|Any CPU
{36A26976-BB1F-4B11-96B4-8042DE5F72EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{36A26976-BB1F-4B11-96B4-8042DE5F72EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36A26976-BB1F-4B11-96B4-8042DE5F72EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36A26976-BB1F-4B11-96B4-8042DE5F72EC}.Release|Any CPU.Build.0 = Release|Any CPU
{12B0CB4E-23EA-4824-AE29-8DD1FB845806}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12B0CB4E-23EA-4824-AE29-8DD1FB845806}.Debug|Any CPU.Build.0 = Debug|Any CPU
{12B0CB4E-23EA-4824-AE29-8DD1FB845806}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12B0CB4E-23EA-4824-AE29-8DD1FB845806}.Release|Any CPU.Build.0 = Release|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Release|Any CPU.Build.0 = Release|Any CPU
{8A48532C-8522-4FED-88C4-63A078871977}.Release|Any CPU.Deploy.0 = Release|Any CPU
{D83EF2B4-AF82-415B-B676-460C5282BE21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D83EF2B4-AF82-415B-B676-460C5282BE21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D83EF2B4-AF82-415B-B676-460C5282BE21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D83EF2B4-AF82-415B-B676-460C5282BE21}.Release|Any CPU.Build.0 = Release|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Release|Any CPU.Build.0 = Release|Any CPU
{6CBE5266-3047-496E-A079-BA6F5B88038F}.Release|Any CPU.Deploy.0 = Release|Any CPU
{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3}.Release|Any CPU.Build.0 = Release|Any CPU
{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36}.Release|Any CPU.Build.0 = Release|Any CPU
{0F88B718-7F93-43D8-A753-E498CB24E2A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F88B718-7F93-43D8-A753-E498CB24E2A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F88B718-7F93-43D8-A753-E498CB24E2A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F88B718-7F93-43D8-A753-E498CB24E2A8}.Release|Any CPU.Build.0 = Release|Any CPU
{32DD24E0-0409-4C9E-8088-A96C8EBD99DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32DD24E0-0409-4C9E-8088-A96C8EBD99DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32DD24E0-0409-4C9E-8088-A96C8EBD99DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32DD24E0-0409-4C9E-8088-A96C8EBD99DF}.Release|Any CPU.Build.0 = Release|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Release|Any CPU.Build.0 = Release|Any CPU
{53465DB2-9BFF-4975-B9D0-EA5C2479D979}.Release|Any CPU.Deploy.0 = Release|Any CPU
{D7D84756-60D1-4EDF-966C-32E063F68E5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7D84756-60D1-4EDF-966C-32E063F68E5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7D84756-60D1-4EDF-966C-32E063F68E5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7D84756-60D1-4EDF-966C-32E063F68E5D}.Release|Any CPU.Build.0 = Release|Any CPU
{832711B9-EB4C-42A1-9E8A-A0D48AA75470}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{832711B9-EB4C-42A1-9E8A-A0D48AA75470}.Debug|Any CPU.Build.0 = Debug|Any CPU
{832711B9-EB4C-42A1-9E8A-A0D48AA75470}.Release|Any CPU.ActiveCfg = Release|Any CPU
{832711B9-EB4C-42A1-9E8A-A0D48AA75470}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F}.Release|Any CPU.Deploy.0 = Release|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Release|Any CPU.Build.0 = Release|Any CPU
{5BA5283D-710E-49D1-8EB9-EB61385107C5}.Release|Any CPU.Deploy.0 = Release|Any CPU
{033FD150-887A-44DB-A0E7-7555B1BF8B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{033FD150-887A-44DB-A0E7-7555B1BF8B07}.Debug|Any CPU.Build.0 = Debug|Any CPU
{033FD150-887A-44DB-A0E7-7555B1BF8B07}.Release|Any CPU.ActiveCfg = Release|Any CPU
{033FD150-887A-44DB-A0E7-7555B1BF8B07}.Release|Any CPU.Build.0 = Release|Any CPU
{454208AB-7A1A-4445-96C7-CFE410F0D5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{454208AB-7A1A-4445-96C7-CFE410F0D5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{454208AB-7A1A-4445-96C7-CFE410F0D5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{454208AB-7A1A-4445-96C7-CFE410F0D5D6}.Release|Any CPU.Build.0 = Release|Any CPU
{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD}.Release|Any CPU.Build.0 = Release|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Release|Any CPU.Build.0 = Release|Any CPU
{B157321E-9FB6-430E-B36C-D389DDEC22DE}.Release|Any CPU.Deploy.0 = Release|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Release|Any CPU.Build.0 = Release|Any CPU
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{95BA42B5-B00E-4986-B9B5-517140378452} = {9F94CF92-5808-45B4-B08B-6E1B65389AD8}
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{00A11C2F-969F-4964-8557-91ADF4B1523D} = {3E56DEAA-CB3F-4905-BD59-8B3D31D04499}
{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} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{39B47A3C-21CA-4B28-9250-14FD957EB0FC} = {7C68E109-0D43-46BB-8B41-8C439C4B9F02}
{CC3D4667-D94E-4276-9311-6439BFD075E4} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{9F94CF92-5808-45B4-B08B-6E1B65389AD8} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}
{5774C01E-9D4D-47C0-BECD-1564EDE70926} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE} = {C804DA95-C856-4090-8B0A-94F1691406FA}
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448} = {5774C01E-9D4D-47C0-BECD-1564EDE70926}
{DE354790-6107-468A-B388-E1EFF1416240} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{802AA31E-051C-482F-9CA2-3F8FB11C251E} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{63FFAE7F-72CE-4458-8C28-5D7733804816} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3} = {E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}
{5C481AFC-E327-41A7-9FED-395519E6B4AF} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{3E56DEAA-CB3F-4905-BD59-8B3D31D04499} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB} = {5C481AFC-E327-41A7-9FED-395519E6B4AF}
{C3870B28-291A-4DD8-862A-6ADC632E09D0} = {802AA31E-051C-482F-9CA2-3F8FB11C251E}
{10F4E7CB-E20E-4393-BD88-FD7075AC4525} = {802AA31E-051C-482F-9CA2-3F8FB11C251E}
{E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {10F4E7CB-E20E-4393-BD88-FD7075AC4525}
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF} = {10F4E7CB-E20E-4393-BD88-FD7075AC4525}
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{43F6074F-F96B-4B3D-868D-536C5212489C} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{F89D546F-717C-440A-B8A5-6B404D85D4CB} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{F1F73414-B424-4077-B8BE-31483F4B2CFF} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{D9232847-18A6-461E-B974-B48FC3D44811} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{36A26976-BB1F-4B11-96B4-8042DE5F72EC} = {C804DA95-C856-4090-8B0A-94F1691406FA}
{C804DA95-C856-4090-8B0A-94F1691406FA} = {44510C11-7CBF-4FE4-9F23-AE1FEE743522}
{748E5A78-2A8E-4211-8584-95D73BE2F72B} = {44510C11-7CBF-4FE4-9F23-AE1FEE743522}
{12B0CB4E-23EA-4824-AE29-8DD1FB845806} = {C804DA95-C856-4090-8B0A-94F1691406FA}
{8A48532C-8522-4FED-88C4-63A078871977} = {748E5A78-2A8E-4211-8584-95D73BE2F72B}
{7C68E109-0D43-46BB-8B41-8C439C4B9F02} = {94F3C036-A5F4-4ACC-A028-8506802ADB88}
{CE647548-8401-475E-B819-7EBBCD689E7F} = {94F3C036-A5F4-4ACC-A028-8506802ADB88}
{D83EF2B4-AF82-415B-B676-460C5282BE21} = {CE647548-8401-475E-B819-7EBBCD689E7F}
{6CBE5266-3047-496E-A079-BA6F5B88038F} = {CE647548-8401-475E-B819-7EBBCD689E7F}
{361A4F79-AB0F-423E-A1FD-BA5D0678C65F} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{BDB5477E-2440-42EC-8A9E-C6A4EDDBEAA3} = {A71D39F0-2BF0-49B3-A2C6-101580EDD304}
{6621B7CA-EDEA-46EC-B019-15F1E0B97F8D} = {6B940FCC-88EE-464E-B26F-BCDD56174E8A}
{7D96815E-D2BD-42ED-BE82-B2D0C9706301} = {6B940FCC-88EE-464E-B26F-BCDD56174E8A}
{E0D575BC-45E8-4CA2-ADFA-6C3262B95D36} = {6621B7CA-EDEA-46EC-B019-15F1E0B97F8D}
{0F88B718-7F93-43D8-A753-E498CB24E2A8} = {7D96815E-D2BD-42ED-BE82-B2D0C9706301}
{32DD24E0-0409-4C9E-8088-A96C8EBD99DF} = {5774C01E-9D4D-47C0-BECD-1564EDE70926}
{53465DB2-9BFF-4975-B9D0-EA5C2479D979} = {5774C01E-9D4D-47C0-BECD-1564EDE70926}
{D7D84756-60D1-4EDF-966C-32E063F68E5D} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{832711B9-EB4C-42A1-9E8A-A0D48AA75470} = {361A4F79-AB0F-423E-A1FD-BA5D0678C65F}
{1FE34FFE-AAF6-4D0F-9802-8695EC9C586F} = {E1082E26-D700-4127-9329-66D673FD2D55}
{5BA5283D-710E-49D1-8EB9-EB61385107C5} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{033FD150-887A-44DB-A0E7-7555B1BF8B07} = {E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}
{454208AB-7A1A-4445-96C7-CFE410F0D5D6} = {E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}
{A2379B6A-CF92-4C97-8F72-FE9EAC669949} = {94F3C036-A5F4-4ACC-A028-8506802ADB88}
{32A4A924-C3CD-4FE3-A21E-DD018F0CC4BD} = {A2379B6A-CF92-4C97-8F72-FE9EAC669949}
{B157321E-9FB6-430E-B36C-D389DDEC22DE} = {A2379B6A-CF92-4C97-8F72-FE9EAC669949}
{4A36C4F9-20BE-4BAC-9E6C-B030F2B65370} = {E1082E26-D700-4127-9329-66D673FD2D55}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -1,85 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31410.414
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuspec", ".nuspec", "{7E12C50D-A570-4DF1-94E1-8599843FA87C}"
ProjectSection(SolutionItems) = preProject
.nuspec\Microsoft.Maui.Controls.Compatibility.Visual.Material.targets = .nuspec\Microsoft.Maui.Controls.Compatibility.Visual.Material.targets
.nuspec\Microsoft.Maui.Controls.Debug.targets = .nuspec\Microsoft.Maui.Controls.Debug.targets
.nuspec\Microsoft.Maui.Controls.DefaultItems.props = .nuspec\Microsoft.Maui.Controls.DefaultItems.props
.nuspec\Microsoft.Maui.Controls.DefaultItems.targets = .nuspec\Microsoft.Maui.Controls.DefaultItems.targets
.nuspec\Microsoft.Maui.Controls.MultiTargeting.targets = .nuspec\Microsoft.Maui.Controls.MultiTargeting.targets
.nuspec\Microsoft.Maui.Controls.props = .nuspec\Microsoft.Maui.Controls.props
.nuspec\Microsoft.Maui.Controls.SingleProject.props = .nuspec\Microsoft.Maui.Controls.SingleProject.props
.nuspec\Microsoft.Maui.Controls.SingleProject.targets = .nuspec\Microsoft.Maui.Controls.SingleProject.targets
.nuspec\Microsoft.Maui.Controls.targets = .nuspec\Microsoft.Maui.Controls.targets
.nuspec\Microsoft.Maui.Resizetizer.targets = .nuspec\Microsoft.Maui.Resizetizer.targets
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core-net6", "src\Controls\src\Core\Controls.Core-net6.csproj", "{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core-net6", "src\Core\src\Core-net6.csproj", "{29913989-0F70-48D8-8EDE-B1DD217F21D1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml-net6", "src\Controls\src\Xaml\Controls.Xaml-net6.csproj", "{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Build.Tasks-net6", "src\Controls\src\Build.Tasks\Controls.Build.Tasks-net6.csproj", "{C328C538-B69F-43D2-80EE-3C1EB8254CBA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer", "src\SingleProject\Resizetizer\src\Resizetizer.csproj", "{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer.UnitTests", "src\SingleProject\Resizetizer\test\UnitTests\Resizetizer.UnitTests.csproj", "{900BA626-5A26-4123-9A0E-43A0953B9053}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{FF16050F-B905-4DE1-92FA-8B9EC93EE009}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.SourceGen-net6", "src\Controls\src\SourceGen\Controls.SourceGen-net6.csproj", "{3E40598B-A52D-417D-B856-240847F6A43F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials-net6", "src\Essentials\src\Essentials-net6.csproj", "{63FDEDD9-C54C-44EE-A4BE-4C870D4CB68A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}.Release|Any CPU.Build.0 = Release|Any CPU
{29913989-0F70-48D8-8EDE-B1DD217F21D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29913989-0F70-48D8-8EDE-B1DD217F21D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29913989-0F70-48D8-8EDE-B1DD217F21D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{29913989-0F70-48D8-8EDE-B1DD217F21D1}.Release|Any CPU.Build.0 = Release|Any CPU
{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27}.Release|Any CPU.Build.0 = Release|Any CPU
{C328C538-B69F-43D2-80EE-3C1EB8254CBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C328C538-B69F-43D2-80EE-3C1EB8254CBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C328C538-B69F-43D2-80EE-3C1EB8254CBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C328C538-B69F-43D2-80EE-3C1EB8254CBA}.Release|Any CPU.Build.0 = Release|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Release|Any CPU.Build.0 = Release|Any CPU
{900BA626-5A26-4123-9A0E-43A0953B9053}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{900BA626-5A26-4123-9A0E-43A0953B9053}.Debug|Any CPU.Build.0 = Debug|Any CPU
{900BA626-5A26-4123-9A0E-43A0953B9053}.Release|Any CPU.ActiveCfg = Release|Any CPU
{900BA626-5A26-4123-9A0E-43A0953B9053}.Release|Any CPU.Build.0 = Release|Any CPU
{3E40598B-A52D-417D-B856-240847F6A43F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E40598B-A52D-417D-B856-240847F6A43F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E40598B-A52D-417D-B856-240847F6A43F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E40598B-A52D-417D-B856-240847F6A43F}.Release|Any CPU.Build.0 = Release|Any CPU
{63FDEDD9-C54C-44EE-A4BE-4C870D4CB68A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63FDEDD9-C54C-44EE-A4BE-4C870D4CB68A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63FDEDD9-C54C-44EE-A4BE-4C870D4CB68A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63FDEDD9-C54C-44EE-A4BE-4C870D4CB68A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{900BA626-5A26-4123-9A0E-43A0953B9053} = {FF16050F-B905-4DE1-92FA-8B9EC93EE009}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {650AE971-2F29-46A8-822C-FB4FCDC6A9A0}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -0,0 +1,12 @@
{
"solution": {
"path": "Microsoft.Maui-net6.sln",
"projects": [
"src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks-net6.csproj",
"src\\Controls\\src\\Core\\Controls.Core-net6.csproj",
"src\\Controls\\src\\Xaml\\Controls.Xaml-net6.csproj",
"src\\Core\\src\\Core-net6.csproj",
"src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj"
]
}
}

Просмотреть файл

@ -44,7 +44,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Maui.Templates",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{6998CAA1-11D4-46B2-B80F-0AC882F58124}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{FBB3270F-1924-4A72-845E-A6DF39C402F6}"
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
@ -58,7 +58,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{
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\core\Microsoft.AspNetCore.Components.WebView.Maui.csproj", "{F7F2B379-52CE-4802-9EC9-0D7967B6BFB7}"
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}") = "MauiRazorClassLibrarySample", "src\BlazorWebView\samples\MauiRazorClassLibrarySample\MauiRazorClassLibrarySample.csproj", "{A33803A8-D398-49F3-B5E8-8C812237829A}"
EndProject

Просмотреть файл

@ -0,0 +1,33 @@
{
"solution": {
"path": "Microsoft.Maui-net6.sln",
"projects": [
"src\\BlazorWebView\\src\\Maui\\Microsoft.AspNetCore.Components.WebView.Maui.csproj",
"src\\BlazorWebView\\src\\WebView2\\Microsoft.AspNetCore.Components.WebView.WebView2.csproj",
"src\\Compatibility\\Android.FormsViewGroup\\src\\Compatibility.Android.FormsViewGroup-net6.csproj",
"src\\Compatibility\\Core\\src\\Compatibility-net6.csproj",
"src\\Controls\\Maps\\src\\Controls.Maps-net6.csproj",
"src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks-net6.csproj",
"src\\Controls\\src\\Core.Design\\Controls.Core.Design-net6.csproj",
"src\\Controls\\src\\Core\\Controls.Core-net6.csproj",
"src\\Controls\\src\\SourceGen\\Controls.SourceGen-net6.csproj",
"src\\Controls\\src\\Xaml.Design\\Controls.Xaml.Design-net6.csproj",
"src\\Controls\\src\\Xaml\\Controls.Xaml-net6.csproj",
"src\\Core\\src\\Core-net6.csproj",
"src\\Essentials\\src\\Essentials-net6.csproj",
"src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj",
"src\\Templates\\src\\Microsoft.Maui.Templates.csproj",
"src\\Workload\\Microsoft.Maui.Controls.Ref\\Microsoft.Maui.Controls.Ref.csproj",
"src\\Workload\\Microsoft.Maui.Controls.Runtime\\Microsoft.Maui.Controls.Runtime.csproj",
"src\\Workload\\Microsoft.Maui.Controls.Sdk\\Microsoft.Maui.Controls.Sdk.csproj",
"src\\Workload\\Microsoft.Maui.Core.Ref\\Microsoft.Maui.Core.Ref.csproj",
"src\\Workload\\Microsoft.Maui.Core.Runtime\\Microsoft.Maui.Core.Runtime.csproj",
"src\\Workload\\Microsoft.Maui.Dependencies\\Microsoft.Maui.Dependencies.csproj",
"src\\Workload\\Microsoft.Maui.Essentials.Ref\\Microsoft.Maui.Essentials.Ref.csproj",
"src\\Workload\\Microsoft.Maui.Essentials.Runtime\\Microsoft.Maui.Essentials.Runtime.csproj",
"src\\Workload\\Microsoft.Maui.Extensions\\Microsoft.Maui.Extensions.csproj",
"src\\Workload\\Microsoft.Maui.Resizetizer.Sdk\\Microsoft.Maui.Resizetizer.Sdk.csproj",
"src\\Workload\\Microsoft.NET.Sdk.Maui\\Microsoft.NET.Sdk.Maui.csproj"
]
}
}

Просмотреть файл

@ -0,0 +1,23 @@
{
"solution": {
"path": "Microsoft.Maui-winui.sln",
"projects": [
"src\\BlazorWebView\\src\\Maui\\Microsoft.AspNetCore.Components.WebView.Maui.csproj",
"src\\BlazorWebView\\src\\WebView2\\Microsoft.AspNetCore.Components.WebView.WebView2.csproj",
"src\\BlazorWebView\\src\\WindowsForms\\Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj",
"src\\BlazorWebView\\src\\Wpf\\Microsoft.AspNetCore.Components.WebView.Wpf.csproj",
"src\\Compatibility\\Core\\src\\Compatibility-net6.csproj",
"src\\Controls\\Maps\\src\\Controls.Maps-net6.csproj",
"src\\Controls\\src\\Build.Tasks\\Controls.Build.Tasks-net6.csproj",
"src\\Controls\\src\\Core.Design\\Controls.Core.Design-net6.csproj",
"src\\Controls\\src\\Core\\Controls.Core-net6.csproj",
"src\\Controls\\src\\SourceGen\\Controls.SourceGen-net6.csproj",
"src\\Controls\\src\\Xaml.Design\\Controls.Xaml.Design-net6.csproj",
"src\\Controls\\src\\Xaml\\Controls.Xaml-net6.csproj",
"src\\Core\\src\\Core-net6.csproj",
"src\\Essentials\\src\\Essentials-net6.csproj",
"src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj",
"src\\Templates\\src\\Microsoft.Maui.Templates.csproj"
]
}
}

Просмотреть файл

@ -0,0 +1,10 @@
{
"solution": {
"path": "Microsoft.Maui-winui.sln",
"projects": [
"src\\BlazorWebView\\src\\WebView2\\Microsoft.AspNetCore.Components.WebView.WebView2.csproj",
"src\\BlazorWebView\\src\\WindowsForms\\Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj",
"src\\BlazorWebView\\src\\Wpf\\Microsoft.AspNetCore.Components.WebView.Wpf.csproj"
]
}
}

Просмотреть файл

@ -1,612 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30926.220
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core-net6", "src\Core\src\Core-net6.csproj", "{95BA42B5-B00E-4986-B9B5-517140378452}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Files", "Files", "{449F6071-A74F-4309-8D7B-7038CFD1B17B}"
ProjectSection(SolutionItems) = preProject
.nuspec\Microsoft.Maui.Controls.MultiTargeting.targets = .nuspec\Microsoft.Maui.Controls.MultiTargeting.targets
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Core-net6", "src\Controls\src\Core\Controls.Core-net6.csproj", "{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility-net6", "src\Compatibility\Core\src\Compatibility-net6.csproj", "{00A11C2F-969F-4964-8557-91ADF4B1523D}"
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-net6", "src\Controls\samples\Controls.Sample\Maui.Controls.Sample-net6.csproj", "{B8DC1324-977C-46F1-B697-9064ADE6099A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compatibility", "Compatibility", "{123AA89E-1638-4E0E-B828-B8F9F9F906A2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Build.Tasks-net6", "src\Controls\src\Build.Tasks\Controls.Build.Tasks-net6.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-net6", "src\Essentials\src\Essentials-net6.csproj", "{39B47A3C-21CA-4B28-9250-14FD957EB0FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml-net6", "src\Controls\src\Xaml\Controls.Xaml-net6.csproj", "{CC3D4667-D94E-4276-9311-6439BFD075E4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maui.Controls.Sample.WinUI", "src\Controls\samples\Controls.Sample.WinUI\Maui.Controls.Sample.WinUI.csproj", "{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Maui.Controls.Sample.WinUI (Package)", "src\Controls\samples\Controls.Sample.WinUI (Package)\Maui.Controls.Sample.WinUI (Package).wapproj", "{503B7824-7376-450B-9EF7-EA587DF2C8BE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9F94CF92-5808-45B4-B08B-6E1B65389AD8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{5774C01E-9D4D-47C0-BECD-1564EDE70926}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{44510C11-7CBF-4FE4-9F23-AE1FEE743522}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.UnitTests", "src\Core\tests\UnitTests\Core.UnitTests.csproj", "{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BlazorWebView", "BlazorWebView", "{17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Maps-net6", "src\Controls\Maps\src\Controls.Maps-net6.csproj", "{DE354790-6107-468A-B388-E1EFF1416240}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ControlGallery", "ControlGallery", "{802AA31E-051C-482F-9CA2-3F8FB11C251E}"
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-net6", "src\Compatibility\ControlGallery\src\Core\Compatibility.ControlGallery.Core-net6.csproj", "{63FFAE7F-72CE-4458-8C28-5D7733804816}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.CustomAttributes", "src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj", "{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{5C481AFC-E327-41A7-9FED-395519E6B4AF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3E56DEAA-CB3F-4905-BD59-8B3D31D04499}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.Windows.UnitTests", "src\Compatibility\Core\tests\WinUI\Compatibility.Windows.UnitTests.csproj", "{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compatibility.ControlGallery.WinUI", "src\Compatibility\ControlGallery\src\WinUI\Compatibility.ControlGallery.WinUI.csproj", "{6721124F-9975-4486-9FE7-263184E16061}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Compatibility.ControlGallery.WinUI (Package)", "src\Compatibility\ControlGallery\src\WinUI (Package)\Compatibility.ControlGallery.WinUI (Package).wapproj", "{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C3870B28-291A-4DD8-862A-6ADC632E09D0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{10F4E7CB-E20E-4393-BD88-FD7075AC4525}"
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUI.UITests", "src\Compatibility\ControlGallery\test\WinUI.UITests\WinUI.UITests.csproj", "{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRazorClassLibrarySample", "src\BlazorWebView\samples\MauiRazorClassLibrarySample\MauiRazorClassLibrarySample.csproj", "{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.SourceGen-net6", "src\Controls\src\SourceGen\Controls.SourceGen-net6.csproj", "{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.WindowsForms", "src\BlazorWebView\src\WindowsForms\Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj", "{43F6074F-F96B-4B3D-868D-536C5212489C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Wpf", "src\BlazorWebView\src\Wpf\Microsoft.AspNetCore.Components.WebView.Wpf.csproj", "{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.WebView2", "src\BlazorWebView\src\WebView2\Microsoft.AspNetCore.Components.WebView.WebView2.csproj", "{F89D546F-717C-440A-B8A5-6B404D85D4CB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Maui", "src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj", "{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F1F73414-B424-4077-B8BE-31483F4B2CFF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebViewAppShared", "src\BlazorWebView\samples\WebViewAppShared\WebViewAppShared.csproj", "{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWinFormsApp", "src\BlazorWebView\samples\BlazorWinFormsApp\BlazorWinFormsApp.csproj", "{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorWpfApp", "src\BlazorWebView\samples\BlazorWpfApp\BlazorWpfApp.csproj", "{D9232847-18A6-461E-B974-B48FC3D44811}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\UITests.Shared\Compatibility.UITests.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
src\Compatibility\ControlGallery\src\Issues.Shared\Compatibility.ControlGallery.Issues.Shared.projitems*{63ffae7f-72ce-4458-8c28-5d7733804816}*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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|arm64 = Debug|arm64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|arm64 = Release|arm64
Release|x64 = Release|x64
Release|x86 = Release|x86
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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|arm64.Build.0 = Debug|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|x64.ActiveCfg = Debug|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|x64.Build.0 = Debug|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|x86.ActiveCfg = Debug|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|x86.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
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|arm64.ActiveCfg = Release|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|arm64.Build.0 = Release|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|x64.ActiveCfg = Release|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|x64.Build.0 = Release|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|x86.ActiveCfg = Release|Any CPU
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|x86.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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|arm64.Build.0 = Debug|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|x64.ActiveCfg = Debug|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|x64.Build.0 = Debug|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|x86.ActiveCfg = Debug|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|x86.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
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|arm64.ActiveCfg = Release|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|arm64.Build.0 = Release|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|x64.ActiveCfg = Release|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|x64.Build.0 = Release|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|x86.ActiveCfg = Release|Any CPU
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|x86.Build.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|arm64.ActiveCfg = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|arm64.Build.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|arm64.Deploy.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x64.ActiveCfg = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x64.Build.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x64.Deploy.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x86.ActiveCfg = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x86.Build.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Debug|x86.Deploy.0 = Debug|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|Any CPU.Build.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|arm64.ActiveCfg = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|arm64.Build.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|arm64.Deploy.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x64.ActiveCfg = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x64.Build.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x64.Deploy.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x86.ActiveCfg = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x86.Build.0 = Release|Any CPU
{00A11C2F-969F-4964-8557-91ADF4B1523D}.Release|x86.Deploy.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|arm64.ActiveCfg = Debug|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|arm64.Build.0 = Debug|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|x64.ActiveCfg = Debug|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|x64.Build.0 = Debug|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|x86.ActiveCfg = Debug|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Debug|x86.Build.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|arm64.ActiveCfg = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|arm64.Build.0 = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|x64.ActiveCfg = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|x64.Build.0 = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|x86.ActiveCfg = Release|Any CPU
{B8DC1324-977C-46F1-B697-9064ADE6099A}.Release|x86.Build.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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|arm64.Build.0 = Debug|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|x64.ActiveCfg = Debug|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|x64.Build.0 = Debug|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|x86.ActiveCfg = Debug|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Debug|x86.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
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|arm64.ActiveCfg = Release|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|arm64.Build.0 = Release|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|x64.ActiveCfg = Release|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|x64.Build.0 = Release|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|x86.ActiveCfg = Release|Any CPU
{75C380E0-CE53-4C01-B89F-CF685331DE18}.Release|x86.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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|arm64.Build.0 = Debug|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|x64.ActiveCfg = Debug|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|x64.Build.0 = Debug|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|x86.ActiveCfg = Debug|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Debug|x86.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
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|arm64.ActiveCfg = Release|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|arm64.Build.0 = Release|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|x64.ActiveCfg = Release|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|x64.Build.0 = Release|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|x86.ActiveCfg = Release|Any CPU
{39B47A3C-21CA-4B28-9250-14FD957EB0FC}.Release|x86.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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|arm64.Build.0 = Debug|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|x64.ActiveCfg = Debug|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|x64.Build.0 = Debug|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|x86.ActiveCfg = Debug|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Debug|x86.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
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|arm64.ActiveCfg = Release|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|arm64.Build.0 = Release|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|x64.ActiveCfg = Release|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|x64.Build.0 = Release|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|x86.ActiveCfg = Release|Any CPU
{CC3D4667-D94E-4276-9311-6439BFD075E4}.Release|x86.Build.0 = Release|Any CPU
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|Any CPU.ActiveCfg = Debug|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|Any CPU.Build.0 = Debug|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|arm64.ActiveCfg = Debug|arm64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|arm64.Build.0 = Debug|arm64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|x64.ActiveCfg = Debug|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|x64.Build.0 = Debug|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|x86.ActiveCfg = Debug|x86
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Debug|x86.Build.0 = Debug|x86
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|Any CPU.ActiveCfg = Release|x86
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|arm64.ActiveCfg = Release|arm64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|arm64.Build.0 = Release|arm64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|x64.ActiveCfg = Release|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|x64.Build.0 = Release|x64
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|x86.ActiveCfg = Release|x86
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53}.Release|x86.Build.0 = Release|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|Any CPU.ActiveCfg = Debug|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|arm64.ActiveCfg = Debug|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|arm64.Build.0 = Debug|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|arm64.Deploy.0 = Debug|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x64.ActiveCfg = Debug|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x64.Build.0 = Debug|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x64.Deploy.0 = Debug|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x86.ActiveCfg = Debug|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x86.Build.0 = Debug|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Debug|x86.Deploy.0 = Debug|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|Any CPU.ActiveCfg = Release|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|arm64.ActiveCfg = Release|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|arm64.Build.0 = Release|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|arm64.Deploy.0 = Release|arm64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x64.ActiveCfg = Release|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x64.Build.0 = Release|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x64.Deploy.0 = Release|x64
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x86.ActiveCfg = Release|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x86.Build.0 = Release|x86
{503B7824-7376-450B-9EF7-EA587DF2C8BE}.Release|x86.Deploy.0 = Release|x86
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|arm64.ActiveCfg = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|arm64.Build.0 = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|x64.ActiveCfg = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|x64.Build.0 = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|x86.ActiveCfg = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Debug|x86.Build.0 = Debug|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|Any CPU.Build.0 = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|arm64.ActiveCfg = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|arm64.Build.0 = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|x64.ActiveCfg = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|x64.Build.0 = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|x86.ActiveCfg = Release|Any CPU
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE}.Release|x86.Build.0 = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|arm64.ActiveCfg = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|arm64.Build.0 = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|x64.ActiveCfg = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|x64.Build.0 = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|x86.ActiveCfg = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Debug|x86.Build.0 = Debug|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|Any CPU.Build.0 = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|arm64.ActiveCfg = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|arm64.Build.0 = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|x64.ActiveCfg = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|x64.Build.0 = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|x86.ActiveCfg = Release|Any CPU
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448}.Release|x86.Build.0 = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|arm64.ActiveCfg = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|arm64.Build.0 = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|x64.ActiveCfg = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|x64.Build.0 = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|x86.ActiveCfg = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Debug|x86.Build.0 = Debug|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|Any CPU.Build.0 = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|arm64.ActiveCfg = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|arm64.Build.0 = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|x64.ActiveCfg = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|x64.Build.0 = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|x86.ActiveCfg = Release|Any CPU
{DE354790-6107-468A-B388-E1EFF1416240}.Release|x86.Build.0 = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|arm64.ActiveCfg = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|arm64.Build.0 = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|x64.ActiveCfg = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|x64.Build.0 = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|x86.ActiveCfg = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Debug|x86.Build.0 = Debug|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|Any CPU.Build.0 = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|arm64.ActiveCfg = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|arm64.Build.0 = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|x64.ActiveCfg = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|x64.Build.0 = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|x86.ActiveCfg = Release|Any CPU
{63FFAE7F-72CE-4458-8C28-5D7733804816}.Release|x86.Build.0 = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|arm64.ActiveCfg = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|arm64.Build.0 = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|x64.ActiveCfg = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|x64.Build.0 = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|x86.ActiveCfg = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Debug|x86.Build.0 = Debug|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|Any CPU.Build.0 = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|arm64.ActiveCfg = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|arm64.Build.0 = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|x64.ActiveCfg = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|x64.Build.0 = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|x86.ActiveCfg = Release|Any CPU
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3}.Release|x86.Build.0 = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|arm64.ActiveCfg = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|arm64.Build.0 = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|x64.ActiveCfg = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|x64.Build.0 = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|x86.ActiveCfg = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Debug|x86.Build.0 = Debug|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|Any CPU.Build.0 = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|arm64.ActiveCfg = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|arm64.Build.0 = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|x64.ActiveCfg = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|x64.Build.0 = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|x86.ActiveCfg = Release|Any CPU
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB}.Release|x86.Build.0 = Release|Any CPU
{6721124F-9975-4486-9FE7-263184E16061}.Debug|Any CPU.ActiveCfg = Debug|x64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|Any CPU.Build.0 = Debug|x64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|arm64.ActiveCfg = Debug|arm64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|arm64.Build.0 = Debug|arm64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|x64.ActiveCfg = Debug|x64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|x64.Build.0 = Debug|x64
{6721124F-9975-4486-9FE7-263184E16061}.Debug|x86.ActiveCfg = Debug|x86
{6721124F-9975-4486-9FE7-263184E16061}.Debug|x86.Build.0 = Debug|x86
{6721124F-9975-4486-9FE7-263184E16061}.Release|Any CPU.ActiveCfg = Release|x86
{6721124F-9975-4486-9FE7-263184E16061}.Release|arm64.ActiveCfg = Release|arm64
{6721124F-9975-4486-9FE7-263184E16061}.Release|arm64.Build.0 = Release|arm64
{6721124F-9975-4486-9FE7-263184E16061}.Release|x64.ActiveCfg = Release|x64
{6721124F-9975-4486-9FE7-263184E16061}.Release|x64.Build.0 = Release|x64
{6721124F-9975-4486-9FE7-263184E16061}.Release|x86.ActiveCfg = Release|x86
{6721124F-9975-4486-9FE7-263184E16061}.Release|x86.Build.0 = Release|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|Any CPU.ActiveCfg = Debug|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|arm64.ActiveCfg = Debug|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|arm64.Build.0 = Debug|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|arm64.Deploy.0 = Debug|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x64.ActiveCfg = Debug|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x64.Build.0 = Debug|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x64.Deploy.0 = Debug|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x86.ActiveCfg = Debug|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x86.Build.0 = Debug|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Debug|x86.Deploy.0 = Debug|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|Any CPU.ActiveCfg = Release|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|arm64.ActiveCfg = Release|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|arm64.Build.0 = Release|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|arm64.Deploy.0 = Release|arm64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x64.ActiveCfg = Release|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x64.Build.0 = Release|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x64.Deploy.0 = Release|x64
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x86.ActiveCfg = Release|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x86.Build.0 = Release|x86
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6}.Release|x86.Deploy.0 = Release|x86
{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}.Debug|arm64.ActiveCfg = Debug|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|arm64.Build.0 = Debug|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|x64.ActiveCfg = Debug|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|x64.Build.0 = Debug|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|x86.ActiveCfg = Debug|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Debug|x86.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
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|arm64.ActiveCfg = Release|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|arm64.Build.0 = Release|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|x64.ActiveCfg = Release|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|x64.Build.0 = Release|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|x86.ActiveCfg = Release|Any CPU
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF}.Release|x86.Build.0 = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|arm64.ActiveCfg = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|arm64.Build.0 = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|x64.ActiveCfg = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|x64.Build.0 = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|x86.ActiveCfg = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Debug|x86.Build.0 = Debug|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|Any CPU.Build.0 = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|arm64.ActiveCfg = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|arm64.Build.0 = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|x64.ActiveCfg = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|x64.Build.0 = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|x86.ActiveCfg = Release|Any CPU
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B}.Release|x86.Build.0 = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|arm64.ActiveCfg = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|arm64.Build.0 = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|x64.ActiveCfg = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|x64.Build.0 = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|x86.ActiveCfg = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Debug|x86.Build.0 = Debug|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|Any CPU.Build.0 = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|arm64.ActiveCfg = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|arm64.Build.0 = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|x64.ActiveCfg = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|x64.Build.0 = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|x86.ActiveCfg = Release|Any CPU
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E}.Release|x86.Build.0 = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|arm64.ActiveCfg = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|arm64.Build.0 = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|x64.ActiveCfg = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|x64.Build.0 = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|x86.ActiveCfg = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Debug|x86.Build.0 = Debug|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|Any CPU.Build.0 = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|arm64.ActiveCfg = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|arm64.Build.0 = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|x64.ActiveCfg = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|x64.Build.0 = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|x86.ActiveCfg = Release|Any CPU
{43F6074F-F96B-4B3D-868D-536C5212489C}.Release|x86.Build.0 = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|arm64.ActiveCfg = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|arm64.Build.0 = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|x64.ActiveCfg = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|x64.Build.0 = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|x86.ActiveCfg = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Debug|x86.Build.0 = Debug|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|Any CPU.Build.0 = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|arm64.ActiveCfg = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|arm64.Build.0 = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|x64.ActiveCfg = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|x64.Build.0 = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|x86.ActiveCfg = Release|Any CPU
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A}.Release|x86.Build.0 = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|arm64.ActiveCfg = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|arm64.Build.0 = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|x64.ActiveCfg = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|x64.Build.0 = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|x86.ActiveCfg = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Debug|x86.Build.0 = Debug|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|Any CPU.Build.0 = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|arm64.ActiveCfg = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|arm64.Build.0 = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|x64.ActiveCfg = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|x64.Build.0 = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|x86.ActiveCfg = Release|Any CPU
{F89D546F-717C-440A-B8A5-6B404D85D4CB}.Release|x86.Build.0 = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|arm64.ActiveCfg = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|arm64.Build.0 = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|x64.ActiveCfg = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|x64.Build.0 = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|x86.ActiveCfg = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Debug|x86.Build.0 = Debug|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|Any CPU.Build.0 = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|arm64.ActiveCfg = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|arm64.Build.0 = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|x64.ActiveCfg = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|x64.Build.0 = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|x86.ActiveCfg = Release|Any CPU
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE}.Release|x86.Build.0 = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|arm64.ActiveCfg = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|arm64.Build.0 = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|x64.ActiveCfg = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|x64.Build.0 = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|x86.ActiveCfg = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Debug|x86.Build.0 = Debug|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|Any CPU.Build.0 = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|arm64.ActiveCfg = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|arm64.Build.0 = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|x64.ActiveCfg = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|x64.Build.0 = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|x86.ActiveCfg = Release|Any CPU
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6}.Release|x86.Build.0 = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|arm64.ActiveCfg = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|arm64.Build.0 = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|x64.ActiveCfg = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|x64.Build.0 = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|x86.ActiveCfg = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Debug|x86.Build.0 = Debug|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|Any CPU.Build.0 = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|arm64.ActiveCfg = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|arm64.Build.0 = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|x64.ActiveCfg = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|x64.Build.0 = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|x86.ActiveCfg = Release|Any CPU
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79}.Release|x86.Build.0 = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|arm64.ActiveCfg = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|arm64.Build.0 = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|x64.ActiveCfg = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|x64.Build.0 = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|x86.ActiveCfg = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Debug|x86.Build.0 = Debug|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|Any CPU.Build.0 = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|arm64.ActiveCfg = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|arm64.Build.0 = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|x64.ActiveCfg = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|x64.Build.0 = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|x86.ActiveCfg = Release|Any CPU
{D9232847-18A6-461E-B974-B48FC3D44811}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{95BA42B5-B00E-4986-B9B5-517140378452} = {9F94CF92-5808-45B4-B08B-6E1B65389AD8}
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{00A11C2F-969F-4964-8557-91ADF4B1523D} = {3E56DEAA-CB3F-4905-BD59-8B3D31D04499}
{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} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{39B47A3C-21CA-4B28-9250-14FD957EB0FC} = {94F3C036-A5F4-4ACC-A028-8506802ADB88}
{CC3D4667-D94E-4276-9311-6439BFD075E4} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{B82F17CF-3D08-4D07-BF86-DF48D89E0B53} = {E1082E26-D700-4127-9329-66D673FD2D55}
{503B7824-7376-450B-9EF7-EA587DF2C8BE} = {E1082E26-D700-4127-9329-66D673FD2D55}
{9F94CF92-5808-45B4-B08B-6E1B65389AD8} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}
{5774C01E-9D4D-47C0-BECD-1564EDE70926} = {09C264E9-E3F3-4586-9151-DCBB1F6DA7AB}
{CAD6061F-A1B1-41B3-B906-6C6C0BD850EE} = {44510C11-7CBF-4FE4-9F23-AE1FEE743522}
{CB3EEB1E-311B-4BF6-9E1A-9CEF74200448} = {5774C01E-9D4D-47C0-BECD-1564EDE70926}
{DE354790-6107-468A-B388-E1EFF1416240} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{802AA31E-051C-482F-9CA2-3F8FB11C251E} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{63FFAE7F-72CE-4458-8C28-5D7733804816} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{F918CD6C-0A26-4D04-AB22-AF02C4D615A3} = {E26E6C2A-F5A2-4FEF-BFDA-57ABA0F77D08}
{5C481AFC-E327-41A7-9FED-395519E6B4AF} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{3E56DEAA-CB3F-4905-BD59-8B3D31D04499} = {123AA89E-1638-4E0E-B828-B8F9F9F906A2}
{ADAA2498-16D1-4A1E-ADAA-9F46967FADDB} = {5C481AFC-E327-41A7-9FED-395519E6B4AF}
{6721124F-9975-4486-9FE7-263184E16061} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{9784DA17-DAEF-455C-8CFB-BA4B4119C1B6} = {C3870B28-291A-4DD8-862A-6ADC632E09D0}
{C3870B28-291A-4DD8-862A-6ADC632E09D0} = {802AA31E-051C-482F-9CA2-3F8FB11C251E}
{10F4E7CB-E20E-4393-BD88-FD7075AC4525} = {802AA31E-051C-482F-9CA2-3F8FB11C251E}
{E175485B-3C8C-47D7-8DD5-F7FED627EB25} = {10F4E7CB-E20E-4393-BD88-FD7075AC4525}
{0A39A74B-6F7A-4D41-84F2-B0CCDCE899DF} = {10F4E7CB-E20E-4393-BD88-FD7075AC4525}
{1373F90D-D4BA-4A76-BDB8-FAD569BD682B} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{8E6FFD4B-1D9E-4CAF-A798-33D81F22EA8E} = {459BF674-83CB-46F6-881F-A2D2117DBF4D}
{43F6074F-F96B-4B3D-868D-536C5212489C} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{41ABBA34-33FF-4A65-BB18-E55DF4D9711A} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{F89D546F-717C-440A-B8A5-6B404D85D4CB} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{6C4BE40E-269F-4B17-8DCD-AD7BDBAD83FE} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{F1F73414-B424-4077-B8BE-31483F4B2CFF} = {17CD1D1D-B4EA-4E7E-ABEF-945AC320936B}
{7FE7653D-289E-47B7-B30F-4B6BF9389ED6} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{F67D81FF-3022-49EA-ADAB-FFD2138E9B79} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
{D9232847-18A6-461E-B974-B48FC3D44811} = {F1F73414-B424-4077-B8BE-31483F4B2CFF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -96,7 +96,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{0F9BA970-11B1-4ACA-AF41-1021AFC0F29C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\src\TestUtils\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "src\TestUtils\TestUtils.DeviceTests\src\TestUtils.DeviceTests.csproj", "{551B2209-4298-4D60-B55C-79077B8BC244}"
EndProject

Просмотреть файл

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30503.244
# Visual Studio Version 17
VisualStudioVersion = 17.0.31519.186
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{9AD757F5-E57A-459D-A0A7-E0675E045B84}"
EndProject
@ -58,12 +58,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Build.Tasks", "src
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.UnitTests", "src\Core\tests\UnitTests\Core.UnitTests.csproj", "{7A753001-1C3D-404D-A421-2E052A545EAC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.DeviceTests", "src\Core\tests\DeviceTests\Core.DeviceTests.csproj", "{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.DeviceTests.Android", "src\Core\tests\DeviceTests.Android\Core.DeviceTests.Android.csproj", "{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.DeviceTests.iOS", "src\Core\tests\DeviceTests.iOS\Core.DeviceTests.iOS.csproj", "{EE8FC716-27FC-405B-BD27-AF17E01A6671}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Essentials", "Essentials", "{DFD73007-5DB1-43AD-87A8-BD8622C2B192}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7E12E071-51C0-4668-9FF3-E2DE9DC51962}"
@ -74,22 +68,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{99FDF6CA-D
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.UnitTests", "src\Essentials\test\UnitTests\Essentials.UnitTests.csproj", "{2E0EB4A3-3C4A-4A5E-8D2F-F77C62464886}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials.DeviceTests.iOS", "src\Essentials\test\DeviceTests.iOS\Essentials.DeviceTests.iOS.csproj", "{B73EB308-70BE-49FD-91A7-1D1495663D6D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.DeviceTests.Shared", "src\Essentials\test\DeviceTests.Shared\Essentials.DeviceTests.Shared.csproj", "{81128D28-CFC8-4EA4-B68D-9939339C461A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{5817A848-0B04-4035-9F7E-B8621B61CBDD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials.Samples.iOS", "src\Essentials\samples\Samples.iOS\Essentials.Samples.iOS.csproj", "{AB6242B7-634F-4839-A991-7629D0D2C636}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials.Samples.Android", "src\Essentials\samples\Samples.Android\Essentials.Samples.Android.csproj", "{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Samples", "src\Essentials\samples\Samples\Essentials.Samples.csproj", "{2C69EB76-02C4-4921-96A1-4D70CB7CE744}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essentials.Sample.Server.WebAuthenticator", "src\Essentials\samples\Sample.Server.WebAuthenticator\Essentials.Sample.Server.WebAuthenticator.csproj", "{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Benchmarks", "src\Core\tests\Benchmarks\Core.Benchmarks.csproj", "{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{806499EB-C2CC-4E85-BC19-613F3DE5E0C3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Sample", "src\Controls\samples\Controls.Sample\Controls.Sample.csproj", "{90B727DD-4C7B-4462-950F-61842A87DE8A}"
@ -104,11 +82,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.Xaml.UnitTests", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtils", "TestUtils", "{0F9BA970-11B1-4ACA-AF41-1021AFC0F29C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\TestUtils\src\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils.DeviceTests", "src\TestUtils\TestUtils.DeviceTests\src\TestUtils.DeviceTests.csproj", "{551B2209-4298-4D60-B55C-79077B8BC244}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials.DeviceTests.UWP", "src\Essentials\test\DeviceTests.UWP\Essentials.DeviceTests.UWP.csproj", "{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtils", "src\TestUtils\src\TestUtils\TestUtils.csproj", "{E4CB9988-7348-4D55-A08E-85907732F8DA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resizetizer", "Resizetizer", "{4A3BAF64-E9D9-4036-9FDA-8B326C382667}"
EndProject
@ -120,8 +94,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer", "src\SinglePr
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resizetizer.UnitTests", "src\SingleProject\Resizetizer\test\UnitTests\Resizetizer.UnitTests.csproj", "{BDFA84D6-6C6B-44C9-ABC5-563CFD0C4DB5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials.DeviceTests.Android", "src\Essentials\test\DeviceTests.Android\Essentials.DeviceTests.Android.csproj", "{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SingleProject", "SingleProject", "{15878D2D-B0F1-4EE9-875D-4A643DB0C842}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Controls.CustomAttributes", "src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj", "{D816B818-F58F-4738-93AE-924EFAB7A07F}"
@ -354,108 +326,6 @@ Global
{7A753001-1C3D-404D-A421-2E052A545EAC}.Release|x64.Build.0 = Release|Any CPU
{7A753001-1C3D-404D-A421-2E052A545EAC}.Release|x86.ActiveCfg = Release|Any CPU
{7A753001-1C3D-404D-A421-2E052A545EAC}.Release|x86.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|ARM.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|ARM64.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|iPhone.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|x64.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Debug|x86.Build.0 = Debug|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|Any CPU.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|ARM.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|ARM.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|ARM64.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|ARM64.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|iPhone.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|iPhone.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|x64.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|x64.Build.0 = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|x86.ActiveCfg = Release|Any CPU
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6}.Release|x86.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM64.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhone.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x64.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x64.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x64.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x86.ActiveCfg = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x86.Build.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Debug|x86.Deploy.0 = Debug|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|Any CPU.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|Any CPU.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM64.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM64.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|ARM64.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhone.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhone.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhone.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x64.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x64.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x64.Deploy.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x86.ActiveCfg = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x86.Build.0 = Release|Any CPU
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105}.Release|x86.Deploy.0 = Release|Any CPU
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.Deploy.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM64.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM64.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.ActiveCfg = Debug|iPhone
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.Build.0 = Debug|iPhone
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.Deploy.0 = Debug|iPhone
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.Deploy.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x86.Build.0 = Debug|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM.Build.0 = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM64.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM64.Build.0 = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhone.ActiveCfg = Release|iPhone
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhone.Build.0 = Release|iPhone
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x64.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x64.Build.0 = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x86.Build.0 = Release|iPhoneSimulator
{8CB95D25-8442-42BC-82BE-319D21138549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CB95D25-8442-42BC-82BE-319D21138549}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CB95D25-8442-42BC-82BE-319D21138549}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -512,204 +382,6 @@ Global
{2E0EB4A3-3C4A-4A5E-8D2F-F77C62464886}.Release|x64.Build.0 = Release|Any CPU
{2E0EB4A3-3C4A-4A5E-8D2F-F77C62464886}.Release|x86.ActiveCfg = Release|Any CPU
{2E0EB4A3-3C4A-4A5E-8D2F-F77C62464886}.Release|x86.Build.0 = Release|Any CPU
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|ARM64.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|iPhone.ActiveCfg = Debug|iPhone
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|iPhone.Build.0 = Debug|iPhone
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|iPhone.Deploy.0 = Debug|iPhone
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|x64.Build.0 = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|x64.Deploy.0 = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|ARM.ActiveCfg = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|ARM64.ActiveCfg = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|iPhone.ActiveCfg = Release|iPhone
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|iPhone.Build.0 = Release|iPhone
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|x64.ActiveCfg = Release|iPhoneSimulator
{B73EB308-70BE-49FD-91A7-1D1495663D6D}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|ARM.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|ARM64.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|iPhone.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|x64.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|x64.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|x86.ActiveCfg = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Debug|x86.Build.0 = Debug|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|Any CPU.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|ARM.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|ARM.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|ARM64.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|ARM64.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|iPhone.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|iPhone.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|x64.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|x64.Build.0 = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|x86.ActiveCfg = Release|Any CPU
{81128D28-CFC8-4EA4-B68D-9939339C461A}.Release|x86.Build.0 = Release|Any CPU
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM64.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.ActiveCfg = Debug|iPhone
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.Build.0 = Debug|iPhone
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.Deploy.0 = Debug|iPhone
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.Build.0 = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.Deploy.0 = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM.ActiveCfg = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM64.ActiveCfg = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhone.ActiveCfg = Release|iPhone
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhone.Build.0 = Release|iPhone
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x64.ActiveCfg = Release|iPhoneSimulator
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.ActiveCfg = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.Build.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.Deploy.0 = Debug|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.Deploy.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.ActiveCfg = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.Build.0 = Release|Any CPU
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.Deploy.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|ARM.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|ARM64.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|iPhone.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|x64.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|x64.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|x86.ActiveCfg = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Debug|x86.Build.0 = Debug|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|Any CPU.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|ARM.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|ARM.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|ARM64.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|ARM64.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|iPhone.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|iPhone.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|x64.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|x64.Build.0 = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|x86.ActiveCfg = Release|Any CPU
{2C69EB76-02C4-4921-96A1-4D70CB7CE744}.Release|x86.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|ARM.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|ARM64.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|iPhone.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|x64.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|x64.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|x86.ActiveCfg = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Debug|x86.Build.0 = Debug|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|Any CPU.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|ARM.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|ARM.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|ARM64.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|ARM64.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|iPhone.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|iPhone.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|x64.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|x64.Build.0 = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|x86.ActiveCfg = Release|Any CPU
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C}.Release|x86.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|ARM.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|ARM.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|ARM64.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|iPhone.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|x64.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|x64.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|x86.ActiveCfg = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Debug|x86.Build.0 = Debug|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|Any CPU.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|ARM.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|ARM.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|ARM64.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|ARM64.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|iPhone.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|iPhone.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|x64.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|x64.Build.0 = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|x86.ActiveCfg = Release|Any CPU
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424}.Release|x86.Build.0 = Release|Any CPU
{90B727DD-4C7B-4462-950F-61842A87DE8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90B727DD-4C7B-4462-950F-61842A87DE8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90B727DD-4C7B-4462-950F-61842A87DE8A}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -883,66 +555,6 @@ Global
{E4CB9988-7348-4D55-A08E-85907732F8DA}.Release|x64.Build.0 = Release|Any CPU
{E4CB9988-7348-4D55-A08E-85907732F8DA}.Release|x86.ActiveCfg = Release|Any CPU
{E4CB9988-7348-4D55-A08E-85907732F8DA}.Release|x86.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|Any CPU.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|ARM.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|ARM.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|ARM64.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|iPhone.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|x64.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|x64.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|x86.ActiveCfg = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Debug|x86.Build.0 = Debug|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|Any CPU.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|Any CPU.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|ARM.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|ARM.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|ARM64.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|ARM64.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|iPhone.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|iPhone.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|x64.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|x64.Build.0 = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|x86.ActiveCfg = Release|Any CPU
{551B2209-4298-4D60-B55C-79077B8BC244}.Release|x86.Build.0 = Release|Any CPU
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.ActiveCfg = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.Build.0 = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.Deploy.0 = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.ActiveCfg = Debug|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.Build.0 = Debug|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.Deploy.0 = Debug|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.Build.0 = Debug|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.Deploy.0 = Debug|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhone.ActiveCfg = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.ActiveCfg = Debug|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.Build.0 = Debug|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.Deploy.0 = Debug|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.ActiveCfg = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.Build.0 = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.Deploy.0 = Debug|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|Any CPU.ActiveCfg = Release|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.ActiveCfg = Release|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.Build.0 = Release|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.Deploy.0 = Release|ARM
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.ActiveCfg = Release|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.Build.0 = Release|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.Deploy.0 = Release|ARM64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhone.ActiveCfg = Release|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhoneSimulator.ActiveCfg = Release|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.ActiveCfg = Release|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.Build.0 = Release|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.Deploy.0 = Release|x64
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.ActiveCfg = Release|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.Build.0 = Release|x86
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.Deploy.0 = Release|x86
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -999,48 +611,6 @@ Global
{BDFA84D6-6C6B-44C9-ABC5-563CFD0C4DB5}.Release|x64.Build.0 = Release|Any CPU
{BDFA84D6-6C6B-44C9-ABC5-563CFD0C4DB5}.Release|x86.ActiveCfg = Release|Any CPU
{BDFA84D6-6C6B-44C9-ABC5-563CFD0C4DB5}.Release|x86.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.ActiveCfg = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.Build.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.Deploy.0 = Debug|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.Deploy.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.ActiveCfg = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.Build.0 = Release|Any CPU
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.Deploy.0 = Release|Any CPU
{D816B818-F58F-4738-93AE-924EFAB7A07F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D816B818-F58F-4738-93AE-924EFAB7A07F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D816B818-F58F-4738-93AE-924EFAB7A07F}.Debug|ARM.ActiveCfg = Debug|Any CPU
@ -1199,21 +769,10 @@ Global
{BB98A559-62C4-4C98-90A0-9E4D8DF1CA27} = {D5B986A3-7FC9-437E-8030-349AA4698DFD}
{C328C538-B69F-43D2-80EE-3C1EB8254CBA} = {D5B986A3-7FC9-437E-8030-349AA4698DFD}
{7A753001-1C3D-404D-A421-2E052A545EAC} = {2ACC7FFA-238F-44FD-93CB-4D9B17D8C4BA}
{DA9E4D76-8CA4-4CC3-A47C-BA75DFF805C6} = {2ACC7FFA-238F-44FD-93CB-4D9B17D8C4BA}
{A0B8D99F-4C0E-4D47-8182-9E8879A9B105} = {2ACC7FFA-238F-44FD-93CB-4D9B17D8C4BA}
{EE8FC716-27FC-405B-BD27-AF17E01A6671} = {2ACC7FFA-238F-44FD-93CB-4D9B17D8C4BA}
{7E12E071-51C0-4668-9FF3-E2DE9DC51962} = {DFD73007-5DB1-43AD-87A8-BD8622C2B192}
{8CB95D25-8442-42BC-82BE-319D21138549} = {7E12E071-51C0-4668-9FF3-E2DE9DC51962}
{99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232} = {DFD73007-5DB1-43AD-87A8-BD8622C2B192}
{2E0EB4A3-3C4A-4A5E-8D2F-F77C62464886} = {99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232}
{B73EB308-70BE-49FD-91A7-1D1495663D6D} = {99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232}
{81128D28-CFC8-4EA4-B68D-9939339C461A} = {99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232}
{5817A848-0B04-4035-9F7E-B8621B61CBDD} = {DFD73007-5DB1-43AD-87A8-BD8622C2B192}
{AB6242B7-634F-4839-A991-7629D0D2C636} = {5817A848-0B04-4035-9F7E-B8621B61CBDD}
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C} = {5817A848-0B04-4035-9F7E-B8621B61CBDD}
{2C69EB76-02C4-4921-96A1-4D70CB7CE744} = {5817A848-0B04-4035-9F7E-B8621B61CBDD}
{0C1B038F-F5CD-4E3C-B9D7-040F020BA44C} = {5817A848-0B04-4035-9F7E-B8621B61CBDD}
{73100F0D-C0BB-4F16-8FC2-FA3FA8ACD424} = {2ACC7FFA-238F-44FD-93CB-4D9B17D8C4BA}
{806499EB-C2CC-4E85-BC19-613F3DE5E0C3} = {9AD757F5-E57A-459D-A0A7-E0675E045B84}
{90B727DD-4C7B-4462-950F-61842A87DE8A} = {806499EB-C2CC-4E85-BC19-613F3DE5E0C3}
{676C1EE2-C2B3-4C01-9781-3DAE0995D2FE} = {806499EB-C2CC-4E85-BC19-613F3DE5E0C3}
@ -1221,14 +780,11 @@ Global
{F2379E0F-524F-47BC-877C-0428E4C836D4} = {D5B986A3-7FC9-437E-8030-349AA4698DFD}
{F905B72C-4DF7-408B-8B2B-50F9B8246A5E} = {75A2CD30-BB85-4CA6-AC95-86A8A538A690}
{E4CB9988-7348-4D55-A08E-85907732F8DA} = {0F9BA970-11B1-4ACA-AF41-1021AFC0F29C}
{551B2209-4298-4D60-B55C-79077B8BC244} = {0F9BA970-11B1-4ACA-AF41-1021AFC0F29C}
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B} = {99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232}
{4A3BAF64-E9D9-4036-9FDA-8B326C382667} = {15878D2D-B0F1-4EE9-875D-4A643DB0C842}
{F83AC93C-9694-4A01-B9CB-7AA8E514B01F} = {4A3BAF64-E9D9-4036-9FDA-8B326C382667}
{08F720FF-7530-43BF-A252-8946927669E3} = {4A3BAF64-E9D9-4036-9FDA-8B326C382667}
{3E1D0DED-6B13-42C8-AA15-2EDFD8ECE80C} = {08F720FF-7530-43BF-A252-8946927669E3}
{BDFA84D6-6C6B-44C9-ABC5-563CFD0C4DB5} = {F83AC93C-9694-4A01-B9CB-7AA8E514B01F}
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1} = {99FDF6CA-DCF8-4CB2-B2EA-E24CCB601232}
{D816B818-F58F-4738-93AE-924EFAB7A07F} = {75A2CD30-BB85-4CA6-AC95-86A8A538A690}
{AE2513CB-4E5E-4E5C-8237-88954D4C9433} = {75A2CD30-BB85-4CA6-AC95-86A8A538A690}
{B5F94CCB-5868-43BD-89B5-B66C97C3A741} = {75A2CD30-BB85-4CA6-AC95-86A8A538A690}

Просмотреть файл

@ -1,676 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_PRIVATE_MODIFIER/@EntryValue">Implicit</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/CASE_BLOCK_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/INITIALIZER_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_BLANK_LINES_IN_CODE/@EntryValue">1</s:Int64>
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue">1</s:Int64>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/OTHER_BRACES/@EntryValue">NEXT_LINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_IFELSE_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_FOR_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_FOREACH_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_WHILE_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_USING_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/FORCE_FIXED_BRACES_STYLE/@EntryValue">ONLY_FOR_MULTILINE</s:String>
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_SINGLE_LINE_AUTO_PROPERTY/@EntryValue">1</s:Int64>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ELSE_ON_NEW_LINE/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_CATCH_ON_NEW_LINE/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FINALLY_ON_NEW_LINE/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AFTER_TYPECAST_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_IF_PARENTHESES/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_LOCK_PARENTHESES/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_METHOD_CALL_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_EMPTY_METHOD_CALL_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_METHOD_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_EMPTY_METHOD_PARENTHESES/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_AROUND_MULTIPLICATIVE_OP/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_BEFORE_USING_PARENTHESES/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/SPACE_WITHIN_SINGLE_LINE_ARRAY_INITIALIZER_BRACES/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/STICK_COMMENT/@EntryValue">False</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_MEMBERS/@EntryValue">None</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpFileLayoutPatterns/Pattern/@EntryValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&#xD;
&lt;Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"&gt;&#xD;
&lt;TypePattern DisplayName="COM interfaces or structs"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Interface" /&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /&gt;&#xD;
&lt;HasAttribute Name="System.Runtime.InteropServices.ComImport" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;Kind Is="Struct" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Class" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;Entry DisplayName="Setup/Teardown Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members" /&gt;&#xD;
&lt;Entry Priority="100" DisplayName="Test Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestAttribute" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="Default Pattern"&gt;&#xD;
&lt;Entry Priority="100" DisplayName="Public Delegates"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Delegate" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry Priority="100" DisplayName="Public Enums"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Enum" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Static Fields and Constants"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Constant" /&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Kind Order="Constant Field" /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Not&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Not&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Readonly /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Access /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Properties, Indexers"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;Kind Is="Indexer" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Access /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry Priority="100" DisplayName="Interface Implementations"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Member" /&gt;&#xD;
&lt;ImplementsInterface /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;ImplementsInterface /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members"&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Access /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Nested Types"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Type" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="Forms Pattern" RemoveRegions="All"&gt;&#xD;
&lt;Region Name="Statics"&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/Region&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Internal Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Internal" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Protected Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Protected" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Kind Is="Member" /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Events"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Kind Is="Event" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Properties"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Private Other"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Private" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Other Members" /&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;/Patterns&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=UI/@EntryIndexedValue">UI</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WP8/@EntryIndexedValue">WP8</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=API/@EntryIndexedValue">API</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="s_" Suffix="" Style="aaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForBuiltInTypes/@EntryValue">UseVarWhenEvident</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForSimpleTypes/@EntryValue">UseVarWhenEvident</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpVarKeywordUsage/ForOtherTypes/@EntryValue">UseVarWhenEvident</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticReadonly/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="s_" Suffix="" Style="aaBb" /&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/InjectedLayers/FileInjectedLayer/=64B48C7709A839499C5E49DBCE502A37/@KeyIndexDefined">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File64B48C7709A839499C5E49DBCE502A37/@KeyIndexDefined">True</s:Boolean>
<s:Double x:Key="/Default/Environment/InjectedLayers/InjectedLayerCustomization/=File64B48C7709A839499C5E49DBCE502A37/RelativePriority/@EntryValue">1</s:Double>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAlwaysTreatStructAsNotReorderableMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

Просмотреть файл

@ -1,22 +1,28 @@
# Introducing .NET Multi-platform App UI (MAUI)
# .NET Multi-platform App UI (.NET MAUI)
.NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. Using .NET MAUI, you can develop apps that can run on Android, iOS, macOS, and Windows from a single shared code-base. [Read More](https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui)
[![Build Status](https://dev.azure.com/xamarin/public/_apis/build/status/MAUI-public?repoName=dotnet%2Fmaui&branchName=main&label=Public)](https://dev.azure.com/xamarin/public/_build/latest?definitionId=57&repoName=dotnet%2Fmaui&branchName=main)[![Build Status](https://devdiv.visualstudio.com/DevDiv/_apis/build/status/MAUI?repoName=dotnet%2Fmaui&branchName=main&label=Private)](https://devdiv.visualstudio.com/DevDiv/_build/latest?definitionId=13330&repoName=dotnet%2Fmaui&branchName=main)
.NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. Using .NET MAUI, you can develop apps that can run on Android, iOS, iPadOS, macOS, and Windows from a single shared code-base.
## Getting Started ##
* [Install .NET MAUI](https://github.com/dotnet/maui/wiki/Getting-Started)
* [MAUI documentation](https://docs.microsoft.com/en-us/dotnet/maui)
* [MAUI samples](https://github.com/dotnet/maui-samples)
* [Developer Guide](DEVELOPMENT.md)
* [Install .NET MAUI](https://docs.microsoft.com/dotnet/maui/get-started/first-app?pivots=windows)
* [.NET MAUI documentation](https://docs.microsoft.com/dotnet/maui)
* [Weather '21 Sample App](https://github.com/davidortinau/WeatherTwentyOne)
* [Contributor Guide](DEVELOPMENT.md)
## Build Status ##
Follow the [.NET MAUI Blog](https://devblogs.microsoft.com/dotnet/category/net-maui/) for news and updates.
| Private | Public |
|--|--|
| [![Build Status](https://devdiv.visualstudio.com/DevDiv/_apis/build/status/MAUI?repoName=dotnet%2Fmaui&branchName=main)](https://devdiv.visualstudio.com/DevDiv/_build/latest?definitionId=13330&repoName=dotnet%2Fmaui&branchName=main) | [![Build Status](https://dev.azure.com/xamarin/public/_apis/build/status/MAUI-public?repoName=dotnet%2Fmaui&branchName=main)](https://dev.azure.com/xamarin/public/_build/latest?definitionId=57&repoName=dotnet%2Fmaui&branchName=main) |
## Overview
.NET MAUI is open-source and is the evolution of Xamarin.Forms, extended from mobile to desktop scenarios, with UI controls rebuilt from the ground up for performance and extensibility. If you've previously used Xamarin.Forms to build cross-platform user interfaces, you'll notice many similarities with .NET MAUI. However, there are also some differences. Using .NET MAUI, you can create multi-platform apps using a single project, but you can add platform-specific source code and resources if necessary. One of the key aims of .NET MAUI is to enable you to implement as much of your app logic and UI layout as possible in a single code-base. [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
[August 10, 2021 - Announcing .NET MAUI Preview 7](https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-7/)
[July 14, 2021 - Announcing .NET MAUI Preview 6](https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-6/)
[June 17, 2021 - Announcing .NET MAUI Preview 5](https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-5/)
@ -62,3 +68,4 @@ See [CONTRIBUTING](./.github/CONTRIBUTING.md)
## Code of conduct
See [CODE-OF-CONDUCT](./.github/CODE_OF_CONDUCT.md)

Просмотреть файл

@ -19,7 +19,7 @@ PowerShell:
// ADDINS
//////////////////////////////////////////////////////////////////////
#addin "nuget:?package=Cake.Android.SdkManager&version=3.0.2"
#addin "nuget:?package=Cake.Boots&version=1.0.4.600-preview1"
#addin "nuget:?package=Cake.Boots&version=1.0.4.624"
#addin "nuget:?package=Cake.AppleSimulator&version=0.2.0"
#addin "nuget:?package=Cake.FileHelpers&version=3.2.1"
#load "eng/cake/dotnet.cake"
@ -75,10 +75,12 @@ var BUILD_TASKS_PROJ ="Microsoft.Maui.BuildTasks.sln";
var XamarinFormsVersion = Argument("XamarinFormsVersion", "");
var packageVersion = GetBuildVariable("packageVersion", "0.1.0-p2");
var releaseChannelArg = Argument("CHANNEL", "Stable");
releaseChannelArg = EnvironmentVariable("CHANNEL") ?? releaseChannelArg;
var teamProject = Argument("TeamProject", "");
var releaseChannelArg = GetBuildVariable("CHANNEL", "Stable");
var teamProject = GetBuildVariable("TeamProject", GetBuildVariable("SYSTEM_TEAMPROJECT", ""));
bool isHostedAgent = agentName.StartsWith("Azure Pipelines") || agentName.StartsWith("Hosted Agent");
var localDotnet = GetBuildVariable("workloads", "local") == "local";
var vsVersion = GetBuildVariable("VS", "");
var MAUI_SLN = "./Microsoft.Maui.sln";
@ -117,6 +119,7 @@ string androidSdks = EnvironmentVariable("ANDROID_API_SDKS",
"platforms;android-28," +
"platforms;android-29," +
"platforms;android-30," +
"platforms;android-31," +
// emulators
androidEmulators);
@ -169,6 +172,10 @@ Information("workingDirectory: {0}", workingDirectory);
Information("NUNIT_TEST_WHERE: {0}", NUNIT_TEST_WHERE);
Information("TARGET: {0}", target);
Information("MSBUILD: {0}", MSBuildExe);
Information("vsVersion: {0}", vsVersion);
Information("localDotnet: {0}", localDotnet);
Information("dotnet: {0}", GetBuildVariable("dotnet", ""));
Information("workloads: {0}", GetBuildVariable("workloads", ""));
var releaseChannel = ReleaseChannel.Stable;
@ -218,7 +225,9 @@ string androidSDK_windows = "";
string iOSSDK_windows = "";
string monoSDK_windows = "";
string macSDK_windows = "";
string android_jdk_11_windows = "https://aka.ms/download-jdk/microsoft-jdk-11.0.12.7.1-windows-x64.msi";
string android_jdk_11_macos = "https://aka.ms/download-jdk/microsoft-jdk-11.0.12.7.1-macOS-x64.pkg";
string android_jdk_11_folder = "C:\\Program Files\\Microsoft\\jdk-11.0.12.7-hotspot";
androidSDK_macos = EnvironmentVariable("ANDROID_SDK_MAC", androidSDK_macos);
iOSSDK_macos = EnvironmentVariable("IOS_SDK_MAC", iOSSDK_macos);
@ -346,17 +355,30 @@ Task("provision-androidsdk")
}
}
if (!IsRunningOnWindows ()) {
if (!IsRunningOnWindows ())
{
await Boots(android_jdk_11_macos);
if(!String.IsNullOrWhiteSpace(androidSDK))
{
await Boots (androidSDK);
}
else
{
await Boots (Product.XamarinAndroid, releaseChannel);
}
}
else if(!String.IsNullOrWhiteSpace(androidSDK))
else
{
await Boots (androidSDK);
if(!DirectoryExists(android_jdk_11_folder))
{
await Boots(android_jdk_11_windows);
}
if(!String.IsNullOrWhiteSpace(androidSDK))
{
await Boots (androidSDK);
}
}
});
@ -757,7 +779,7 @@ Task("Android100")
});
Task("VS")
.Description("Builds projects necessary so solution compiles on VS")
.Description("Builds projects necessary so solution compiles on VS Preview")
.IsDependentOn("Clean")
.IsDependentOn("VSMAC")
.IsDependentOn("VSWINDOWS");
@ -768,6 +790,17 @@ Task("VS-CG")
.IsDependentOn("VSMAC")
.IsDependentOn("VSWINDOWS");
Task("VS-CG-STABLE")
.Description("Builds projects necessary so solution compiles on VS")
.IsDependentOn("Clean")
.IsDependentOn("VSMAC")
.IsDependentOn("VSWINDOWS");
Task("VS-STABLE")
.Description("Builds projects necessary so solution compiles on VS Stable")
.IsDependentOn("Clean")
.IsDependentOn("VSMAC")
.IsDependentOn("VSWINDOWS");
Task("VSWINDOWS")
.Description("Builds projects necessary so solution compiles on VS Windows")
@ -775,15 +808,22 @@ Task("VSWINDOWS")
.WithCriteria(IsRunningOnWindows())
.Does(() =>
{
string sln = "Microsoft.Maui.sln";
if (target == "VS-CG")
sln = "Compatibility.ControlGallery.sln";
bool includePrerelease = !target.ToLower().Contains("stable");
MSBuild(sln,
if (target.ToLower().StartsWith("vs-cg"))
{
MSBuild("Compatibility.ControlGallery.sln",
GetMSBuildSettings()
.WithRestore());
StartVisualStudio(sln);
StartVisualStudio("Compatibility.ControlGallery.sln", includePrerelease: includePrerelease);
}
else
{
MSBuild(@"src\Compatibility\Core\src\Compatibility.csproj",
GetMSBuildSettings()
.WithRestore());
StartVisualStudio("Microsoft.Maui.sln", includePrerelease: includePrerelease);
}
});
Task("VSMAC")
@ -1055,20 +1095,21 @@ void RunTests(string unitTestLibrary, NUnit3Settings settings, ICakeContext ctx)
}
}
void StartVisualStudio(string sln = "./Microsoft.Maui.sln")
void StartVisualStudio(string sln = "./Microsoft.Maui.sln", bool includePrerelease = true)
{
if(isCIBuild)
return;
if (!String.IsNullOrWhiteSpace(vsVersion))
includePrerelease = (vsVersion == "preview");
if(IsRunningOnWindows())
{
StartProcess("powershell",
new ProcessSettings
{
Arguments = new ProcessArgumentBuilder()
.Append("start")
.Append(sln)
});
var vsLatest = VSWhereLatest(new VSWhereLatestSettings { IncludePrerelease = includePrerelease, });
if (vsLatest == null)
throw new Exception("Unable to find Visual Studio!");
StartProcess(vsLatest.CombineWithFilePath("./Common7/IDE/devenv.exe"), sln);
}
else
StartProcess("open", new ProcessSettings{ Arguments = sln });

Просмотреть файл

@ -1,52 +1,48 @@
<Project>
<PropertyGroup>
<!-- Uncomment to use preview packages -->
<!-- <_AndroidXVersion>-net6preview03.4680155</_AndroidXVersion> -->
</PropertyGroup>
<ItemGroup>
<PackageReference
Update="Xamarin.AndroidX.AppCompat.AppCompatResources"
Version="1.2.0.7$(_AndroidXVersion)"
Version="1.3.1.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Browser"
Version="1.3.0.5$(_AndroidXVersion)"
Version="1.3.0.6"
/>
<PackageReference
Update="Xamarin.AndroidX.Legacy.Support.V4"
Version="1.0.0.7$(_AndroidXVersion)"
Version="1.0.0.8"
/>
<PackageReference
Update="Xamarin.AndroidX.Lifecycle.LiveData"
Version="2.3.1$(_AndroidXVersion)"
Version="2.3.1.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Navigation.UI"
Version="2.3.5$(_AndroidXVersion)"
Version="2.3.5.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Navigation.Fragment"
Version="2.3.5$(_AndroidXVersion)"
Version="2.3.5.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Navigation.Runtime"
Version="2.3.5$(_AndroidXVersion)"
Version="2.3.5.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Navigation.Common"
Version="2.3.5$(_AndroidXVersion)"
Version="2.3.5.1"
/>
<PackageReference
Update="Xamarin.AndroidX.MediaRouter"
Version="1.2.2.1$(_AndroidXVersion)"
Version="1.2.4.1"
/>
<PackageReference
Update="Xamarin.AndroidX.Palette"
Version="1.0.0.7$(_AndroidXVersion)"
Version="1.0.0.8"
/>
<PackageReference
Update="Xamarin.AndroidX.RecyclerView"
Version="1.2.0$(_AndroidXVersion)"
Version="1.2.1.1"
/>
<PackageReference
Update="Xamarin.Build.Download"
@ -54,7 +50,12 @@
/>
<PackageReference
Update="Xamarin.Google.Android.Material"
Version="1.3.0.1$(_AndroidXVersion)"
Version="1.4.0.2"
/>
<PackageReference
Update="Xamarin.AndroidX.Migration"
Version="1.0.8"
NoWarn="NU1701"
/>
</ItemGroup>
</Project>

Просмотреть файл

@ -3,30 +3,17 @@
<_UseNet6Packages Condition=" '$(TargetFramework.Contains(net6.0))' == 'true' or '$(PackageType)' == 'DotnetPlatform' ">true</_UseNet6Packages>
</PropertyGroup>
<PropertyGroup Condition=" '$(_UseNet6Packages)' != 'true' ">
<_MicrosoftHostingVersion>5.0.0</_MicrosoftHostingVersion>
<SystemCodeDomPackageVersion>4.7.0</SystemCodeDomPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>(_MicrosoftHostingVersion)</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>$(_MicrosoftHostingVersion)</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>5.0.6</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
</PropertyGroup>
<!-- Microsoft.Maui.Graphics related Packages -->
<PropertyGroup>
<_MicrosoftGraphicsWin2DVersion>0.8.0.21</_MicrosoftGraphicsWin2DVersion>
<_MicrosoftMauiGraphics>6.0.100-preview.7.332</_MicrosoftMauiGraphics>
<_MicrosoftMauiGraphicsWin2D>6.0.100-preview.7.332</_MicrosoftMauiGraphicsWin2D>
<_MicrosoftMauiGraphics>6.0.100-rc.1.382</_MicrosoftMauiGraphics>
<_MicrosoftMauiGraphicsWin2D>6.0.100-rc.1.382</_MicrosoftMauiGraphicsWin2D>
</PropertyGroup>
<!-- WINUI related Packages -->
<PropertyGroup>
<_MicrosoftProjectReunionVersion>0.8.1</_MicrosoftProjectReunionVersion>
<_MicrosoftWindowsAppSdkVersion>1.0.0-experimental1</_MicrosoftWindowsAppSdkVersion>
<_MicrosoftWebWebView2Version>1.0.705.50</_MicrosoftWebWebView2Version>
</PropertyGroup>
<!-- Android related Packages -->
@ -40,7 +27,7 @@
<ItemGroup>
<PackageReference
Update="Reloadify3000"
Version="1.0.6"
Version="1.0.7"
/>
<PackageReference
Update="Microsoft.Maui.Graphics"
@ -71,8 +58,8 @@
Version="$(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion)"
/>
<PackageReference
Update="Microsoft.Extensions.FileProviders.Embedded"
Version="$(MicrosoftExtensionsFileProvidersEmbeddedPackageVersion)"
Update="Microsoft.Extensions.Hosting"
Version="$(MicrosoftExtensionsHostingPackageVersion)"
/>
<PackageReference
Update="Microsoft.Extensions.Hosting.Abstractions"
@ -99,20 +86,20 @@
Version="$(MicrosoftExtensionsPrimitivesPackageVersion)"
/>
<PackageReference
Update="Microsoft.ProjectReunion"
Version="$(_MicrosoftProjectReunionVersion)"
Update="Microsoft.WindowsAppSDK"
Version="$(_MicrosoftWindowsAppSdkVersion)"
/>
<PackageReference
Update="Microsoft.ProjectReunion.Foundation"
Version="$(_MicrosoftProjectReunionVersion)"
Update="Microsoft.WindowsAppSDK.Foundation"
Version="$(_MicrosoftWindowsAppSdkVersion)"
/>
<PackageReference
Update="Microsoft.ProjectReunion.WinUI"
Version="$(_MicrosoftProjectReunionVersion)"
Update="Microsoft.WindowsAppSDK.WinUI"
Version="$(_MicrosoftWindowsAppSdkVersion)"
/>
<PackageReference
Update="Microsoft.ProjectReunion.InteractiveExperiences"
Version="$(_MicrosoftProjectReunionVersion)"
Update="Microsoft.WindowsAppSDK.InteractiveExperiences"
Version="$(_MicrosoftWindowsAppSdkVersion)"
NoWarn="NU1701"
/>
<PackageReference

Просмотреть файл

@ -1,108 +1,108 @@
<Dependencies>
<ProductDependencies>
<Dependency Name="Microsoft.Dotnet.Sdk.Internal" Version="6.0.100-preview.7.21377.35" CoherentParentDependency="Microsoft.Android.Sdk.Windows">
<Dependency Name="Microsoft.Dotnet.Sdk.Internal" Version="6.0.100-rc.2.21423.2" CoherentParentDependency="Microsoft.Android.Sdk.Windows">
<Uri>https://github.com/dotnet/installer</Uri>
<Sha>bb99a6213fdd6d2801b61353f636c18a4d59505a</Sha>
<Sha>eca586b5e70ee7f55557daed7fa00be974639bf5</Sha>
</Dependency>
<Dependency Name="Microsoft.NETCore.App.Ref" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.NETCore.App.Ref" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Android.Sdk.Windows" Version="30.0.100-preview.7.106">
<Dependency Name="Microsoft.Android.Sdk.Windows" Version="31.0.100-rc.2.12">
<Uri>https://github.com/xamarin/xamarin-android</Uri>
<Sha>ce2830613a0123d3fd8207e97e5ec7483706409e</Sha>
<Sha>846086707c53bb710008b8245c011e4273e5284c</Sha>
</Dependency>
<Dependency Name="Microsoft.MacCatalyst.Sdk" Version="15.0.100-preview.7221">
<Dependency Name="Microsoft.MacCatalyst.Sdk" Version="15.0.100-rc.1.1531">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>e685f6302ad7a05a99f1392f49a6ab084057463c</Sha>
<Sha>a0ad498842dc6288b14814a7ab9a6cac3763ea8c</Sha>
</Dependency>
<Dependency Name="Microsoft.iOS.Sdk" Version="15.0.100-preview.7221">
<Dependency Name="Microsoft.iOS.Sdk" Version="15.0.100-rc.1.1531">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>e685f6302ad7a05a99f1392f49a6ab084057463c</Sha>
<Sha>a0ad498842dc6288b14814a7ab9a6cac3763ea8c</Sha>
</Dependency>
<Dependency Name="Microsoft.tvOS.Sdk" Version="15.0.100-preview.7221">
<Dependency Name="Microsoft.tvOS.Sdk" Version="15.0.100-rc.1.1531">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>e685f6302ad7a05a99f1392f49a6ab084057463c</Sha>
<Sha>a0ad498842dc6288b14814a7ab9a6cac3763ea8c</Sha>
</Dependency>
<Dependency Name="Microsoft.macOS.Sdk" Version="12.0.100-preview.7221">
<Dependency Name="Microsoft.macOS.Sdk" Version="12.0.100-rc.1.1531">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>e685f6302ad7a05a99f1392f49a6ab084057463c</Sha>
<Sha>a0ad498842dc6288b14814a7ab9a6cac3763ea8c</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.App.Runtime.win-x64" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.AspNetCore.App.Runtime.win-x64" Version="6.0.0-rc.2.21420.26" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
<Sha>51deae0b18ab779e227b31688a6157441027ea15</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Primitives" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Hosting" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Configuration" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Logging" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Authorization" Version="6.0.0-rc.2.21420.26" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
<Sha>51deae0b18ab779e227b31688a6157441027ea15</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Authorization" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.AspNetCore.Components.WebView" Version="6.0.0-rc.2.21420.26" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
<Sha>51deae0b18ab779e227b31688a6157441027ea15</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Components.WebView" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.AspNetCore.Components.Web" Version="6.0.0-rc.2.21420.26" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
<Sha>51deae0b18ab779e227b31688a6157441027ea15</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Components.Web" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.JSInterop" Version="6.0.0-rc.2.21420.26" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
<Sha>51deae0b18ab779e227b31688a6157441027ea15</Sha>
</Dependency>
<Dependency Name="Microsoft.JSInterop" Version="6.0.0-preview.7.21377.13" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/aspnetcore</Uri>
<Sha>afa975487fb04102c1260dceb21ca543e3cd5533</Sha>
</Dependency>
<Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="6.0.0-preview.7.21377.9" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Dependency Name="Microsoft.WindowsDesktop.App.Runtime.win-x64" Version="6.0.0-rc.2.21419.14" CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal">
<Uri>https://github.com/dotnet/windowsdesktop</Uri>
<Sha>9a3f9f6abab4ed6f02ce3489e125005267fcf773</Sha>
<Sha>139cb9518e7bdd2219a552b5e23ac412f09000a4</Sha>
</Dependency>
<Dependency Name="System.CodeDom" Version="6.0.0-preview.7.21377.12" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Dependency Name="System.CodeDom" Version="6.0.0-rc.2.21420.29" CoherentParentDependency="Microsoft.AspNetCore.App.Runtime.win-x64">
<Uri>https://github.com/dotnet/runtime</Uri>
<Sha>d5e38a60fd747ca35386fbf50389fca0ce0dc58a</Sha>
<Sha>91406a13fb953d6ba8a6e274e8a6f6d240ac9436</Sha>
</Dependency>
</ProductDependencies>
</Dependencies>

9
eng/Versions.dev.targets Normal file
Просмотреть файл

@ -0,0 +1,9 @@
<!-- This file is an alternative to Versions.targets, when building locally and not for CI -->
<Project>
<Target Name="SetVersions">
<PropertyGroup>
<PackageReferenceVersion>$(PackageVersion)</PackageReferenceVersion>
<VSComponentVersion>$(PackageVersion)</VSComponentVersion>
</PropertyGroup>
</Target>
</Project>

Просмотреть файл

@ -1,32 +1,32 @@
<Project>
<!--Package versions-->
<PropertyGroup>
<MicrosoftDotnetSdkInternalPackageVersion>6.0.100-preview.7.21377.35</MicrosoftDotnetSdkInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>6.0.0-preview.7.21377.12</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftAndroidSdkWindowsPackageVersion>30.0.100-preview.7.106</MicrosoftAndroidSdkWindowsPackageVersion>
<MicrosoftMacCatalystSdkPackageVersion>15.0.100-preview.7221</MicrosoftMacCatalystSdkPackageVersion>
<MicrosoftiOSSdkPackageVersion>15.0.100-preview.7221</MicrosoftiOSSdkPackageVersion>
<MicrosofttvOSSdkPackageVersion>15.0.100-preview.7221</MicrosofttvOSSdkPackageVersion>
<MicrosoftmacOSSdkPackageVersion>12.0.100-preview.7221</MicrosoftmacOSSdkPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>6.0.0-preview.7.21377.12</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>6.0.0-preview.7.21377.13</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftAspNetCoreAuthorizationPackageVersion>6.0.0-preview.7.21377.13</MicrosoftAspNetCoreAuthorizationPackageVersion>
<MicrosoftAspNetCoreComponentsWebViewPackageVersion>6.0.0-preview.7.21377.13</MicrosoftAspNetCoreComponentsWebViewPackageVersion>
<MicrosoftAspNetCoreComponentsWebPackageVersion>6.0.0-preview.7.21377.13</MicrosoftAspNetCoreComponentsWebPackageVersion>
<MicrosoftJSInteropPackageVersion>6.0.0-preview.7.21377.13</MicrosoftJSInteropPackageVersion>
<MicrosoftAspNetCoreAppRuntimewinx64Version>6.0.0-preview.7.21377.13</MicrosoftAspNetCoreAppRuntimewinx64Version>
<MicrosoftWindowsDesktopAppRuntimewinx64Version>6.0.0-preview.7.21377.9</MicrosoftWindowsDesktopAppRuntimewinx64Version>
<SystemCodeDomPackageVersion>6.0.0-preview.7.21377.12</SystemCodeDomPackageVersion>
<MicrosoftDotnetSdkInternalPackageVersion>6.0.100-rc.2.21423.2</MicrosoftDotnetSdkInternalPackageVersion>
<MicrosoftNETCoreAppRefPackageVersion>6.0.0-rc.2.21420.29</MicrosoftNETCoreAppRefPackageVersion>
<MicrosoftAndroidSdkWindowsPackageVersion>31.0.100-rc.2.12</MicrosoftAndroidSdkWindowsPackageVersion>
<MicrosoftMacCatalystSdkPackageVersion>15.0.100-rc.1.521</MicrosoftMacCatalystSdkPackageVersion>
<MicrosoftiOSSdkPackageVersion>15.0.100-rc.1.521</MicrosoftiOSSdkPackageVersion>
<MicrosofttvOSSdkPackageVersion>15.0.100-rc.1.521</MicrosofttvOSSdkPackageVersion>
<MicrosoftmacOSSdkPackageVersion>12.0.100-rc.1.521</MicrosoftmacOSSdkPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>6.0.0-rc.2.21420.29</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftAspNetCoreAuthorizationPackageVersion>6.0.0-rc.2.21420.26</MicrosoftAspNetCoreAuthorizationPackageVersion>
<MicrosoftAspNetCoreComponentsWebViewPackageVersion>6.0.0-rc.2.21420.26</MicrosoftAspNetCoreComponentsWebViewPackageVersion>
<MicrosoftAspNetCoreComponentsWebPackageVersion>6.0.0-rc.2.21420.26</MicrosoftAspNetCoreComponentsWebPackageVersion>
<MicrosoftJSInteropPackageVersion>6.0.0-rc.2.21420.26</MicrosoftJSInteropPackageVersion>
<MicrosoftAspNetCoreAppRuntimewinx64Version>6.0.0-rc.2.21420.26</MicrosoftAspNetCoreAppRuntimewinx64Version>
<MicrosoftWindowsDesktopAppRuntimewinx64Version>6.0.0-rc.2.21419.14</MicrosoftWindowsDesktopAppRuntimewinx64Version>
<SystemCodeDomPackageVersion>6.0.0-rc.2.21420.29</SystemCodeDomPackageVersion>
</PropertyGroup>
<PropertyGroup>
<!-- Trim all characters after first `-` or `+` is encountered. -->

Просмотреть файл

@ -2,6 +2,7 @@
<Project>
<PropertyGroup>
<TargetName>Microsoft.NET.Sdk.Maui.Workload</TargetName>
<ManifestBuildVersion>@VS_COMPONENT_VERSION@</ManifestBuildVersion>
</PropertyGroup>
<ItemGroup>
<!-- Shorten package names to avoid long path caching issues in Visual Studio -->

Просмотреть файл

@ -3,79 +3,173 @@
var ext = IsRunningOnWindows() ? ".exe" : "";
var dotnetPath = $"./bin/dotnet/dotnet{ext}";
// Tasks for CI
Task("dotnet")
.Description("Provisions .NET 6 into bin/dotnet based on eng/Versions.props")
.Does(() =>
{
var binlog = $"artifacts/dotnet-{configuration}.binlog";
var settings = new DotNetCoreBuildSettings
if (!localDotnet)
return;
DotNetCoreBuild("./src/DotNet/DotNet.csproj", new DotNetCoreBuildSettings
{
MSBuildSettings = new DotNetCoreMSBuildSettings()
.EnableBinaryLogger(binlog)
.EnableBinaryLogger($"{logDirectory}/dotnet-{configuration}.binlog")
.SetConfiguration(configuration),
};
DotNetCoreBuild("./src/DotNet/DotNet.csproj", settings);
});
});
Task("dotnet-pack")
.Description("Build and create .NET 6 NuGet packages")
//.IsDependentOn("dotnet")
// .IsDependentOn("dotnet-buildtasks")
.Does(()=>
Task("dotnet-local-workloads")
.Does(() =>
{
var settings = new DotNetCoreToolSettings
if (!localDotnet)
return;
DotNetCoreBuild("./src/DotNet/DotNet.csproj", new DotNetCoreBuildSettings
{
DiagnosticOutput = true,
ArgumentCustomization = args => args.Append($"./eng/package.ps1 -configuration \"{configuration}\"")
};
MSBuildSettings = new DotNetCoreMSBuildSettings()
.EnableBinaryLogger($"{logDirectory}/dotnet-{configuration}.binlog")
.SetConfiguration(configuration)
.WithProperty("InstallWorkloadPacks", "false"),
});
DotNetCoreTool("pwsh", settings);
// RunMSBuildWithLocalDotNet("Microsoft.Maui-net6.sln", (settings) =>
// {
// if (settings is MSBuildSettings msbuildSettings)
// {
// msbuildSettings
// .WithProperty("Packing", "true")
// .WithProperty("CI", "true")
// .WithTarget("build");
// }
// else if( settings is DotNetCoreMSBuildSettings dotnetSettings )
// {
// dotnetSettings
// .WithProperty("Packing", "true")
// .WithProperty("CI", "true")
// .WithTarget("pack");
// }
// });
// if (IsRunningOnWindows())
// {
// RunMSBuildWithLocalDotNet("Microsoft.Maui-net6.sln", (settings) =>
// {
// if (settings is MSBuildSettings msbuildSettings)
// {
// msbuildSettings
// .WithProperty("Packing", "true")
// .WithProperty("CI", "true")
// .WithTarget("pack");
// }
// });
// }
DotNetCoreBuild("./src/DotNet/DotNet.csproj", new DotNetCoreBuildSettings
{
MSBuildSettings = new DotNetCoreMSBuildSettings()
.EnableBinaryLogger($"{logDirectory}/dotnet-install-{configuration}.binlog")
.SetConfiguration(configuration)
.WithTarget("Install"),
ToolPath = dotnetPath,
});
});
Task("dotnet-buildtasks")
.IsDependentOn("dotnet")
.Does(() =>
{
RunMSBuildWithLocalDotNet("./Microsoft.Maui.BuildTasks-net6.sln");
RunMSBuildWithDotNet("./Microsoft.Maui.BuildTasks-net6.slnf");
});
Task("dotnet-build")
.IsDependentOn("dotnet")
.Description("Build the solutions")
.Does(() =>
{
if (IsRunningOnWindows())
{
RunMSBuildWithDotNet("./Microsoft.Maui.BuildTasks-net6.slnf", new Dictionary<string, string> {
["BuildForWinUI"] = bool.TrueString,
});
RunMSBuildWithDotNet("./Microsoft.Maui-winui.sln");
}
else
{
RunMSBuildWithDotNet("./Microsoft.Maui.BuildTasks-net6.slnf");
RunMSBuildWithDotNet("./Microsoft.Maui-net6.sln");
}
});
Task("dotnet-build-winui")
.IsDependentOn("dotnet")
.Description("Build the solutions")
.Does(() =>
{
RunMSBuildWithDotNet("./Microsoft.Maui.BuildTasks-net6.slnf", new Dictionary<string, string> {
["BuildForWinUI"] = bool.TrueString,
});
RunMSBuildWithDotNet("./Microsoft.Maui-winui.sln");
});
Task("dotnet-build-net6")
.IsDependentOn("dotnet")
.Does(() =>
{
RunMSBuildWithDotNet("./Microsoft.Maui.BuildTasks-net6.slnf");
RunMSBuildWithDotNet("./Microsoft.Maui-net6.sln");
});
Task("dotnet-samples")
.Does(() =>
{
RunMSBuildWithDotNet("./Microsoft.Maui.Samples-net6.slnf", new Dictionary<string, string> {
["UseWorkload"] = bool.TrueString,
});
});
Task("dotnet-templates")
.Does(() =>
{
if (localDotnet)
SetDotNetEnvironmentVariables();
var dn = localDotnet ? dotnetPath : "dotnet";
CleanDirectories("./templatesTest/");
foreach (var template in new [] { "maui", "maui-blazor", "mauilib" })
{
var name = template.Replace("-", "");
StartProcess(dn, $"new {template} -o ./templatesTest/{name}");
RunMSBuildWithDotNet($"./templatesTest/{name}");
}
});
Task("dotnet-test")
.IsDependentOn("dotnet")
.Description("Build the solutions")
.Does(() =>
{
var tests = new []
{
"**/Controls.Core.UnitTests-net6.csproj",
"**/Controls.Xaml.UnitTests-net6.csproj",
"**/Core.UnitTests-net6.csproj",
"**/Essentials.UnitTests-net6.csproj",
"**/Resizetizer.UnitTests-net6.csproj",
};
var success = true;
foreach (var test in tests)
{
foreach (var project in GetFiles(test))
{
try
{
RunTestWithLocalDotNet(project.FullPath);
}
catch
{
success = false;
}
}
}
if (!success)
throw new Exception("Some tests failed. Check the logs or test results.");
});
Task("dotnet-pack")
.Description("Build and create .NET 6 NuGet packages")
.Does(() =>
{
DotNetCoreTool("pwsh", new DotNetCoreToolSettings
{
DiagnosticOutput = true,
ArgumentCustomization = args => args.Append($"./eng/package.ps1 -configuration \"{configuration}\"")
});
});
Task("dotnet-build-test")
.IsDependentOn("dotnet")
.IsDependentOn("dotnet-buildtasks")
.IsDependentOn("dotnet-build")
.IsDependentOn("dotnet-test");
// Tasks for Local Development
Task("VS-DOGFOOD")
.Description("Provisions .NET 6 and launches an instance of Visual Studio using it.")
.IsDependentOn("dotnet")
@ -93,28 +187,20 @@ Task("VS-NET6")
{
// VS has trouble building all the references correctly so this makes sure everything is built
// and we're ready to go right when VS launches
RunMSBuildWithLocalDotNet("./src/Controls/samples/Controls.Sample/Maui.Controls.Sample-net6.csproj");
RunMSBuildWithDotNet("./src/Compatibility/Android.FormsViewGroup/src/Compatibility.Android.FormsViewGroup-net6.csproj");
RunMSBuildWithDotNet("./src/Compatibility/Core/src/Compatibility-net6.csproj");
StartVisualStudioForDotNet6();
});
Task("VS-WINUI-CI")
.Description("Validates that WinUI can build with the cake scripts.")
.IsDependentOn("Clean")
.IsDependentOn("dotnet")
.Does(() =>
{
RunMSBuildWithLocalDotNet("./Microsoft.Maui.BuildTasks-net6.sln", settings => ((MSBuildSettings)settings).WithProperty("BuildForWinUI", "true"));
RunMSBuildWithLocalDotNet("./Microsoft.Maui.WinUI.sln");
});
Task("VS-WINUI")
.Description("Provisions .NET 6 and launches an instance of Visual Studio with WinUI projects.")
.IsDependentOn("Clean")
// .IsDependentOn("dotnet") WINUI currently can't launch application with local dotnet
// .IsDependentOn("dotnet") WINUI currently can't launch application with local dotnet
// .IsDependentOn("dotnet-buildtasks")
.Does(() =>
{
string sln = "./Microsoft.Maui.WinUI.sln";
string sln = "./Microsoft.Maui-winui.sln";
var msbuildSettings = new MSBuildSettings
{
Configuration = configuration,
@ -122,20 +208,20 @@ Task("VS-WINUI")
BinaryLogger = new MSBuildBinaryLogSettings
{
Enabled = true,
FileName = "artifacts/winui-buildtasks.binlog",
FileName = $"{logDirectory}/winui-buildtasks.binlog",
}
}.WithRestore().WithProperty("BuildForWinUI", "true");
MSBuild("./Microsoft.Maui.BuildTasks-net6.sln", msbuildSettings);
MSBuild("./Microsoft.Maui.BuildTasks-net6.slnf", msbuildSettings);
msbuildSettings = new MSBuildSettings
msbuildSettings = new MSBuildSettings
{
Configuration = configuration,
ToolPath = FindMSBuild(),
BinaryLogger = new MSBuildBinaryLogSettings
{
Enabled = true,
FileName = "artifacts/winui.binlog",
FileName = $"{logDirectory}/winui.binlog",
}
}.WithRestore();
@ -145,7 +231,7 @@ Task("VS-WINUI")
if (vsLatest == null)
throw new Exception("Unable to find Visual Studio!");
StartProcess(vsLatest.CombineWithFilePath("./Common7/IDE/devenv.exe"), sln);
});
@ -163,7 +249,7 @@ Task("VS-ANDROID")
// VS has trouble building all the references correctly so this makes sure everything is built
// and we're ready to go right when VS launches
RunMSBuildWithLocalDotNet("./src/Controls/samples/Controls.Sample/Maui.Controls.Sample-net6.csproj");
RunMSBuildWithDotNet("./src/Controls/samples/Controls.Sample/Maui.Controls.Sample-net6.csproj");
StartVisualStudioForDotNet6("./Microsoft.Maui.Droid.sln");
});
@ -173,7 +259,7 @@ Task("SAMPLE-ANDROID")
.IsDependentOn("dotnet-buildtasks")
.Does(() =>
{
RunMSBuildWithLocalDotNet("./src/Controls/samples/Controls.Sample.Droid/Maui.Controls.Sample.Droid-net6.csproj", deployAndRun:true);
RunMSBuildWithDotNet("./src/Controls/samples/Controls.Sample.Droid/Maui.Controls.Sample.Droid-net6.csproj", deployAndRun: true);
});
Task("SAMPLE-IOS")
@ -182,7 +268,7 @@ Task("SAMPLE-IOS")
.IsDependentOn("dotnet-buildtasks")
.Does(() =>
{
RunMSBuildWithLocalDotNet("./src/Controls/samples/Controls.Sample.iOS/Maui.Controls.Sample.iOS-net6.csproj", deployAndRun:true);
RunMSBuildWithDotNet("./src/Controls/samples/Controls.Sample.iOS/Maui.Controls.Sample.iOS-net6.csproj", deployAndRun: true);
});
Task("SAMPLE-MAC")
@ -191,7 +277,7 @@ Task("SAMPLE-MAC")
.IsDependentOn("dotnet-buildtasks")
.Does(() =>
{
RunMSBuildWithLocalDotNet("./src/Controls/samples/Controls.Sample.MacCatalyst/Maui.Controls.Sample.MacCatalyst-net6.csproj", deployAndRun:true);
RunMSBuildWithDotNet("./src/Controls/samples/Controls.Sample.MacCatalyst/Maui.Controls.Sample.MacCatalyst-net6.csproj", deployAndRun: true);
});
@ -208,7 +294,7 @@ string FindMSBuild()
var path = vsInstallation.CombineWithFilePath(@"MSBuild\Current\Bin\MSBuild.exe");
if (FileExists(path))
return path.FullPath;
path = vsInstallation.CombineWithFilePath(@"MSBuild\15.0\Bin\MSBuild.exe");
if (FileExists(path))
return path.FullPath;
@ -220,13 +306,13 @@ string FindMSBuild()
void SetDotNetEnvironmentVariables()
{
var dotnet = MakeAbsolute(Directory("./bin/dotnet/")).ToString();
var target = EnvironmentVariableTarget.Process;
Environment.SetEnvironmentVariable("DOTNET_INSTALL_DIR", dotnet, target);
Environment.SetEnvironmentVariable("DOTNET_ROOT", dotnet, target);
Environment.SetEnvironmentVariable("DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR", dotnet, target);
Environment.SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0", target);
Environment.SetEnvironmentVariable("MSBuildEnableWorkloadResolver", "true", target);
Environment.SetEnvironmentVariable("PATH", dotnet + System.IO.Path.PathSeparator + EnvironmentVariable("PATH"), target);
SetEnvironmentVariable("DOTNET_INSTALL_DIR", dotnet);
SetEnvironmentVariable("DOTNET_ROOT", dotnet);
SetEnvironmentVariable("DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR", dotnet);
SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0");
SetEnvironmentVariable("MSBuildEnableWorkloadResolver", "true");
SetEnvironmentVariable("PATH", dotnet, prepend: true);
}
void StartVisualStudioForDotNet6(string sln = "./Microsoft.Maui-net6.sln")
@ -242,62 +328,98 @@ void StartVisualStudioForDotNet6(string sln = "./Microsoft.Maui-net6.sln")
return;
}
var vsLatest = VSWhereLatest(new VSWhereLatestSettings { IncludePrerelease = true, });
bool includePrerelease = true;
if (!String.IsNullOrEmpty(vsVersion))
includePrerelease = (vsVersion == "preview");
var vsLatest = VSWhereLatest(new VSWhereLatestSettings { IncludePrerelease = includePrerelease, });
if (vsLatest == null)
throw new Exception("Unable to find Visual Studio!");
SetDotNetEnvironmentVariables();
Environment.SetEnvironmentVariable("_ExcludeMauiProjectCapability", "true", EnvironmentVariableTarget.Process);
if(localDotnet)
{
SetDotNetEnvironmentVariables();
SetEnvironmentVariable("_ExcludeMauiProjectCapability", "true");
}
StartProcess(vsLatest.CombineWithFilePath("./Common7/IDE/devenv.exe"), sln);
}
// NOTE: this method works as long as the DotNet target has already run
void RunMSBuildWithLocalDotNet(string sln, Action<object> settings = null, bool deployAndRun = false)
// NOTE: These methods work as long as the "dotnet" target has already run
void RunMSBuildWithDotNet(string sln, Dictionary<string, string> properties = null, bool deployAndRun = false)
{
var name = System.IO.Path.GetFileNameWithoutExtension(sln);
var binlog = $"artifacts/{name}-{configuration}.binlog";
SetDotNetEnvironmentVariables();
var binlog = $"{logDirectory}/{name}-{configuration}.binlog";
if(localDotnet)
SetDotNetEnvironmentVariables();
// If we're not on Windows, use ./bin/dotnet/dotnet
if (!IsRunningOnWindows() || deployAndRun)
{
var dotnetBuildSettings = new DotNetCoreMSBuildSettings
var msbuildSettings = new DotNetCoreMSBuildSettings()
.SetConfiguration(configuration)
.EnableBinaryLogger(binlog);
if (properties != null)
{
BinaryLogger = new MSBuildBinaryLoggerSettings
foreach (var property in properties)
{
Enabled = true,
FileName = binlog,
},
msbuildSettings.WithProperty(property.Key, property.Value);
}
}
if (deployAndRun)
msbuildSettings.WithTarget("Run");
var dotnetBuildSettings = new DotNetCoreBuildSettings
{
MSBuildSettings = msbuildSettings,
};
settings?.Invoke(dotnetBuildSettings);
DotNetCoreBuild(sln,
new DotNetCoreBuildSettings
{
Configuration = configuration,
ToolPath = dotnetPath,
MSBuildSettings = dotnetBuildSettings,
ArgumentCustomization = args=> { if(deployAndRun) { args.Append("-t:Run"); } return args; }
});
return;
}
if (localDotnet)
dotnetBuildSettings.ToolPath = dotnetPath;
// Otherwise we need to run MSBuild for WinUI support
var msbuildSettings = new MSBuildSettings
DotNetCoreBuild(sln, dotnetBuildSettings);
}
else
{
// Otherwise we need to run MSBuild for WinUI support
var msbuildSettings = new MSBuildSettings { ToolPath = FindMSBuild() }
.WithRestore()
.SetConfiguration(configuration)
.EnableBinaryLogger(binlog);
if (properties != null)
{
foreach (var property in properties)
{
msbuildSettings.WithProperty(property.Key, property.Value);
}
}
MSBuild(sln, msbuildSettings);
}
}
void RunTestWithLocalDotNet(string csproj)
{
var name = System.IO.Path.GetFileNameWithoutExtension(csproj);
var binlog = $"{logDirectory}/{name}-{configuration}.binlog";
var results = $"{name}-{configuration}.trx";
if(localDotnet)
SetDotNetEnvironmentVariables();
DotNetCoreTest(csproj,
new DotNetCoreTestSettings
{
Configuration = configuration,
BinaryLogger = new MSBuildBinaryLogSettings
{
Enabled = true,
FileName = binlog,
},
ToolPath = FindMSBuild(),
};
settings?.Invoke(msbuildSettings);
MSBuild(sln,
msbuildSettings
.WithRestore());
ToolPath = dotnetPath,
NoBuild = true,
Logger = $"trx;LogFileName={results}",
ResultsDirectory = testResultsDirectory,
ArgumentCustomization = args => args.Append($"-bl:{binlog}")
});
}

Просмотреть файл

@ -59,4 +59,28 @@ public void PrintEnvironmentVariables()
envVar.Value
);
};
}
}
void SetDotNetEnvironmentVariables(string dotnetDir)
{
var dotnet = dotnetDir ?? MakeAbsolute(Directory("./bin/dotnet/")).ToString();
SetEnvironmentVariable("DOTNET_INSTALL_DIR", dotnet);
SetEnvironmentVariable("DOTNET_ROOT", dotnet);
SetEnvironmentVariable("DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR", dotnet);
SetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP", "0");
SetEnvironmentVariable("MSBuildEnableWorkloadResolver", "true");
SetEnvironmentVariable("PATH", dotnet, prepend: true);
}
void SetEnvironmentVariable(string name, string value, bool prepend = false)
{
var target = EnvironmentVariableTarget.Process;
if (prepend)
value = value + System.IO.Path.PathSeparator + EnvironmentVariable(name);
Environment.SetEnvironmentVariable(name, value, target);
Information("Setting environment variable: {0} = '{1}'", name, value);
}

Просмотреть файл

@ -10,10 +10,11 @@ string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE
string DEVICE_NAME = Argument("skin", EnvironmentVariable("ANDROID_TEST_SKIN") ?? "Nexus 5X");
// optional
var USE_DOTNET = Argument("dotnet", false);
var USE_DOTNET = Argument("dotnet", true);
var DOTNET_PATH = Argument("dotnet-path", EnvironmentVariable("DOTNET_PATH"));
var TARGET_FRAMEWORK = Argument("tfm", EnvironmentVariable("TARGET_FRAMEWORK") ?? (USE_DOTNET ? "net6.0-android" : ""));
var BINLOG = Argument("binlog", EnvironmentVariable("ANDROID_TEST_BINLOG") ?? PROJECT + ".binlog");
var BINLOG_ARG = Argument("binlog", EnvironmentVariable("ANDROID_TEST_BINLOG") ?? "");
DirectoryPath BINLOG_DIR = string.IsNullOrEmpty(BINLOG_ARG) && !string.IsNullOrEmpty(PROJECT.FullPath) ? PROJECT.GetDirectory() : BINLOG_ARG;
var TEST_APP = Argument("app", EnvironmentVariable("ANDROID_TEST_APP") ?? "");
var TEST_APP_PACKAGE_NAME = Argument("package", EnvironmentVariable("ANDROID_TEST_APP_PACKAGE_NAME") ?? "");
var TEST_APP_INSTRUMENTATION = Argument("instrumentation", EnvironmentVariable("ANDROID_TEST_APP_INSTRUMENTATION") ?? "");
@ -30,15 +31,13 @@ bool DEVICE_BOOT_WAIT = Argument("wait", true);
// set up env
var ANDROID_SDK_ROOT = GetAndroidSDKPath();
System.Environment.SetEnvironmentVariable("PATH",
$"{ANDROID_SDK_ROOT}/tools/bin" + System.IO.Path.PathSeparator +
$"{ANDROID_SDK_ROOT}/platform-tools" + System.IO.Path.PathSeparator +
$"{ANDROID_SDK_ROOT}/emulator" + System.IO.Path.PathSeparator +
EnvironmentVariable("PATH"));
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/tools/bin", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/platform-tools", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/emulator", prepend: true);
Information("Android SDK Root: {0}", ANDROID_SDK_ROOT);
Information("Project File: {0}", PROJECT);
Information("Build Binary Log (binlog): {0}", BINLOG);
Information("Build Binary Log (binlog): {0}", BINLOG_DIR);
Information("Build Configuration: {0}", CONFIGURATION);
var avdSettings = new AndroidAvdManagerToolSettings { SdkRoot = ANDROID_SDK_ROOT };
@ -82,7 +81,8 @@ Setup(context =>
else
DEVICE_ARCH = "arm64-v8a";
}
DEVICE_ID = $"system-images;android-{api};google_apis;{DEVICE_ARCH}";
var sdk = api >= 24 ? "google_apis_playstore" : "google_apis";
DEVICE_ID = $"system-images;android-{api};{sdk};{DEVICE_ARCH}";
// we are not using a virtual device, so quit
if (!emulator)
@ -135,14 +135,19 @@ Task("Build")
.WithCriteria(!string.IsNullOrEmpty(PROJECT.FullPath))
.Does(() =>
{
var name = System.IO.Path.GetFileNameWithoutExtension(PROJECT.FullPath);
var binlog = $"{BINLOG_DIR}/{name}-{CONFIGURATION}-android.binlog";
if (USE_DOTNET)
{
SetDotNetEnvironmentVariables(DOTNET_PATH);
DotNetCoreBuild(PROJECT.FullPath, new DotNetCoreBuildSettings {
Configuration = CONFIGURATION,
Framework = TARGET_FRAMEWORK,
ArgumentCustomization = args => args
.Append("/p:EmbedAssembliesIntoApk=true")
.Append("/bl:" + BINLOG),
.Append("/bl:" + binlog),
ToolPath = DOTNET_PATH,
});
}
@ -159,7 +164,7 @@ Task("Build")
c.Targets.Add("SignAndroidPackage");
c.BinaryLogger = new MSBuildBinaryLogSettings {
Enabled = true,
FileName = BINLOG,
FileName = binlog,
};
});
}

Просмотреть файл

@ -1,4 +1,5 @@
#addin nuget:?package=Cake.AppleSimulator&version=0.2.0
#load "../cake/helpers.cake"
string TARGET = Argument("target", "Test");
@ -7,10 +8,11 @@ FilePath PROJECT = Argument("project", EnvironmentVariable("IOS_TEST_PROJECT") ?
string TEST_DEVICE = Argument("device", EnvironmentVariable("IOS_TEST_DEVICE") ?? "ios-simulator-64_14.4"); // comma separated in the form <platform>-<device|simulator>[-<32|64>][_<version>] (eg: ios-simulator-64_13.4,[...])
// optional
var USE_DOTNET = Argument("dotnet", false);
var USE_DOTNET = Argument("dotnet", true);
var DOTNET_PATH = Argument("dotnet-path", EnvironmentVariable("DOTNET_PATH"));
var TARGET_FRAMEWORK = Argument("tfm", EnvironmentVariable("TARGET_FRAMEWORK") ?? (USE_DOTNET ? "net6.0-ios" : ""));
var BINLOG = Argument("binlog", EnvironmentVariable("IOS_TEST_BINLOG") ?? PROJECT + ".binlog");
var BINLOG_ARG = Argument("binlog", EnvironmentVariable("IOS_TEST_BINLOG") ?? "");
DirectoryPath BINLOG_DIR = string.IsNullOrEmpty(BINLOG_ARG) && !string.IsNullOrEmpty(PROJECT.FullPath) ? PROJECT.GetDirectory() : BINLOG_ARG;
var TEST_APP = Argument("app", EnvironmentVariable("IOS_TEST_APP") ?? "");
var TEST_RESULTS = Argument("results", EnvironmentVariable("IOS_TEST_RESULTS") ?? "");
@ -21,7 +23,7 @@ string CONFIGURATION = "Release";
bool DEVICE_CLEANUP = Argument("cleanup", true);
Information("Project File: {0}", PROJECT);
Information("Build Binary Log (binlog): {0}", BINLOG);
Information("Build Binary Log (binlog): {0}", BINLOG_DIR);
Information("Build Platform: {0}", PLATFORM);
Information("Build Configuration: {0}", CONFIGURATION);
@ -79,14 +81,19 @@ Task("Build")
.WithCriteria(!string.IsNullOrEmpty(PROJECT.FullPath))
.Does(() =>
{
var name = System.IO.Path.GetFileNameWithoutExtension(PROJECT.FullPath);
var binlog = $"{BINLOG_DIR}/{name}-{CONFIGURATION}-ios.binlog";
if (USE_DOTNET)
{
SetDotNetEnvironmentVariables(DOTNET_PATH);
DotNetCoreBuild(PROJECT.FullPath, new DotNetCoreBuildSettings {
Configuration = CONFIGURATION,
Framework = TARGET_FRAMEWORK,
ArgumentCustomization = args => args
.Append("/p:BuildIpa=true")
.Append("/bl:" + BINLOG),
.Append("/bl:" + binlog),
ToolPath = DOTNET_PATH,
});
}
@ -104,7 +111,7 @@ Task("Build")
c.Targets.Add("Build");
c.BinaryLogger = new MSBuildBinaryLogSettings {
Enabled = true,
FileName = BINLOG,
FileName = binlog,
};
});
}

Просмотреть файл

@ -8,13 +8,13 @@ Write-Host "-msbuild: $msbuild"
Write-Host "MSBUILD_EXE: $env:MSBUILD_EXE"
$artifacts = Join-Path $PSScriptRoot ../artifacts
$sln = Join-Path $PSScriptRoot ../Microsoft.Maui-net6.sln
$blazorWebViewSln = Join-Path $PSScriptRoot ../BlazorWindowsDesktop-net6.sln
$slnTasks = Join-Path $PSScriptRoot ../Microsoft.Maui.BuildTasks-net6.sln
$logsDirectory = Join-Path $artifacts logs
$sln = Join-Path $PSScriptRoot ../Microsoft.Maui.Packages-net6.slnf
$blazorWebViewSln = Join-Path $PSScriptRoot ../Microsoft.Maui.Packages.Desktop-winui.slnf
# Bootstrap ./bin/dotnet/
$csproj = Join-Path $PSScriptRoot ../src/DotNet/DotNet.csproj
& dotnet build $csproj -bl:$artifacts/dotnet-$configuration.binlog
& dotnet build $csproj -bl:$logsDirectory/dotnet-$configuration.binlog
# Full path to dotnet folder
$dotnet = Join-Path $PSScriptRoot ../bin/dotnet/
@ -75,30 +75,22 @@ if ($IsWindows)
# Put our local dotnet.exe on PATH first so Visual Studio knows which one to use
$env:PATH=($dotnet + [IO.Path]::PathSeparator + $env:PATH)
# Have to build the solution tasks
& $msbuild $slnTasks `
/p:configuration=$configuration `
/p:SymbolPackageFormat=snupkg `
/restore `
/t:build `
/bl:"$artifacts/maui-build-tasks-$configuration.binlog"
# Have to build the solution first so the xbf files are there for pack
& $msbuild $sln `
/p:configuration=$configuration `
/p:SymbolPackageFormat=snupkg `
/restore `
/t:build `
/t:Build `
/p:Packing=true `
/bl:"$artifacts/maui-build-$configuration.binlog"
/bl:"$logsDirectory/maui-build-$configuration.binlog"
if (!$?) { throw "Build .NET MAUI failed." }
& $msbuild $sln `
/p:configuration=$configuration `
/p:SymbolPackageFormat=snupkg `
/t:pack `
/t:Pack `
/p:Packing=true `
/bl:"$artifacts/maui-pack-$configuration.binlog"
/bl:"$logsDirectory/maui-pack-$configuration.binlog"
if (!$?) { throw "Pack .NET MAUI failed." }
# Then build and pack the BlazorWebView projects for WPF/WinForms
@ -106,17 +98,17 @@ if ($IsWindows)
/p:configuration=$configuration `
/p:SymbolPackageFormat=snupkg `
/restore `
/t:build `
/t:Build `
/p:Packing=true `
/bl:"$artifacts/blazorwebview-build-$configuration.binlog"
/bl:"$logsDirectory/blazorwebview-build-$configuration.binlog"
if (!$?) { throw "Build BlazorWebView failed." }
& $msbuild $blazorWebViewSln `
/p:configuration=$configuration `
/p:SymbolPackageFormat=snupkg `
/t:pack `
/t:Pack `
/p:Packing=true `
/bl:"$artifacts/blazorwebview-pack-$configuration.binlog"
/bl:"$logsDirectory/blazorwebview-pack-$configuration.binlog"
if (!$?) { throw "Pack BlazorWebView failed." }
}
finally
@ -142,7 +134,7 @@ else
& $dotnet_tool pack $sln `
-c:$configuration `
-p:SymbolPackageFormat=snupkg `
-bl:$artifacts/maui-pack-$configuration.binlog
-bl:$logsDirectory/maui-pack-$configuration.binlog
if (!$?) { throw "Pack failed." }
}
finally

Просмотреть файл

@ -1,79 +0,0 @@
parameters:
msbuildExtraArguments : ''
artifactsTargetFolder: '$(build.artifactstagingdirectory)'
artifactsName: 'win_build'
nunitTestFolder: '$(build.sourcesdirectory)'
nunitTestAdapterFolder: 'packages/NUnitTestAdapter.AnyVersion/build/'
steps:
- checkout: self
clean: true
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provisionator'
condition: eq(variables['provisioning'], 'true')
inputs:
provisioning_script: $(provisionator.path)
provisioning_extra_args: $(provisionator.extraArguments)
- powershell: |
& dotnet build src\DotNet\DotNet.csproj -bl:${{ parameters.artifactsTargetFolder }}\$(BuildConfiguration)-dotnet.binlog
displayName: install .NET
- powershell: |
$(System.DefaultWorkingDirectory)/build.ps1 --target provision --TeamProject="$(System.TeamProject)"
displayName: 'Cake Provision'
condition: eq(variables['provisioningCake'], 'true')
- task: NuGetToolInstaller@1
displayName: 'Use NuGet $(NUGET_VERSION)'
condition: ne(variables['NUGET_VERSION'], '')
inputs:
versionSpec: $(NUGET_VERSION)
- task: CmdLine@2
displayName: 'install NUnit3TestAdapter'
inputs:
script: 'nuget install NUnit3TestAdapter'
- script: build.cmd -Target BuildUnitTests -ScriptArgs '--configuration="$(BuildConfiguration)"','--Build_ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)"'
name: winbuild
displayName: 'Build Projects For Nuget'
- task: VSTest@2
displayName: 'XAML Unit Tests'
inputs:
testAssemblyVer2: |
**/bin/$(BuildConfiguration)/**/Microsoft.Maui.Controls.Xaml.UnitTests.dll
searchFolder: ${{ parameters.nunitTestFolder }}
codeCoverageEnabled: true
testRunTitle: '$(BuildConfiguration)_UnitTests'
configuration: '$(BuildConfiguration)'
diagnosticsEnabled: true
# Disable code coverage in child processes
# See: https://github.com/Microsoft/vstest/issues/1263
otherConsoleOptions: -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.CodeCoverage.CollectFromChildProcesses=False
- task: DotNetCoreCLI@2
displayName: 'Unit Tests'
inputs:
command: test
projects: |
**/Controls.Core.UnitTests.csproj
**/Core.UnitTests.csproj
**/Essentials.UnitTests.csproj
**/Resizetizer.UnitTests.csproj
arguments: '--configuration $(BuildConfiguration)'
- task: CopyFiles@2
displayName: 'Copy Files dlls'
inputs:
Contents: |
src/**/bin/**/*.dll
TargetFolder: ${{ parameters.artifactsTargetFolder }}
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: ${{ parameters.artifactsName }}'
condition: always()
inputs:
ArtifactName: ${{ parameters.artifactsName }}

Просмотреть файл

@ -2,65 +2,25 @@ parameters:
platform: '' # [ android, ios ]
path: '' # path to csproj
device: '' # the xharness device to use
net6: false # whether or not this is a net6 build
cakeArgs: '' # additional cake args
steps:
- checkout: self
clean: true
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Xcode'
condition: ne(variables['REQUIRED_XCODE'], '')
inputs:
provisioning_script: $(provisionator.xcode)
- script: |
echo "##vso[task.prependpath]/Library/Frameworks/Mono.framework/Versions/Current/Commands/"
echo "##vso[task.prependpath]~/Library/Developer/Xamarin/android-sdk-macosx"
displayName: 'Setup SDK Paths'
condition: or(and(ne(variables['androidTestsVmPool'], 'Azure Pipelines'), ne('${{ parameters.platform }}', 'android')), and(ne(variables['iosTestsVmPool'], 'Azure Pipelines'), ne('${{ parameters.platform }}', 'ios')))
- ${{ if eq(parameters['platform'], 'ios') }}:
- task: InstallAppleCertificate@2
displayName: 'Install an Apple certificate'
inputs:
certSecureFile: 'Maui.p12'
certPwd: $(P12password)
- template: provision.yml
parameters:
platform: macos
skipXcode: ${{ eq(parameters.platform, 'android') }}
- task: InstallAppleProvisioningProfile@1
displayName: 'Install an Apple provisioning profile'
inputs:
provProfileSecureFile: 'Maui_iOS_Provisioning.mobileprovision'
- pwsh: ./build.ps1 --target=dotnet --configuration="Release"
displayName: 'Install .NET'
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provisionator'
condition: eq(variables['provisioning'], 'true')
inputs:
provisioning_script: $(provisionator.path)
provisioning_extra_args: $(provisionator.extraArguments)
- pwsh: echo "##vso[task.prependpath]$(DotNet.Dir)"
displayName: 'Add .NET to PATH'
- script: |
dotnet build src/DotNet/DotNet.csproj -bl:$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)-dotnet.binlog
echo "##vso[task.prependpath]$(DotNet.Dir)"
displayName: install .NET
- script: |
dotnet tool restore
dotnet tool update microsoft.dotnet.xharness.cli --version $(XHARNESS_VERSION)
displayName: install dotnet tools
- pwsh: |
./build.ps1 --target provision --TeamProject="$(System.TeamProject)"
displayName: 'Cake Provision'
condition: eq(variables['provisioningCake'], 'true')
- pwsh: |
./build.ps1 --target=${{ replace(replace(parameters.net6, 'true', 'dotnet-'), 'false', '') }}buildtasks --configuration=Debug --Build_ArtifactStagingDirectory="$(Build.ArtifactStagingDirectory)"
- pwsh: ./build.ps1 --target=dotnet-buildtasks --configuration="Release"
displayName: 'Build the MSBuild Tasks'
- pwsh: |
./build.ps1 -Script eng/devices/${{ parameters.platform }}.cake --project="${{ parameters.path }}" --device=${{ parameters.device }} --results="$(System.DefaultWorkingDirectory)/output/testlogs" ${{ replace(replace(parameters.net6, 'true', '--dotnet=true'), 'false', '') }} ${{ parameters.cakeArgs }}
- pwsh: ./build.ps1 -Script eng/devices/${{ parameters.platform }}.cake --project="${{ parameters.path }}" --device=${{ parameters.device }} --results="$(TestResultsDirectory)" --binlog="$(LogDirectory)" ${{ parameters.cakeArgs }}
displayName: $(Agent.JobName)
- task: PublishTestResults@2
@ -68,12 +28,11 @@ steps:
condition: always()
inputs:
testResultsFormat: xUnit
testResultsFiles: 'output/testlogs/**/TestResults.xml'
testResultsFiles: '$(TestResultsDirectory)/**/TestResults.xml'
testRunTitle: '$(System.PhaseName)'
- task: PublishBuildArtifacts@1
displayName: Publish the $(System.PhaseName) logs
displayName: Publish Artifacts
condition: always()
inputs:
artifactName: $(System.PhaseName)
pathToPublish: 'output/testlogs'

Просмотреть файл

@ -10,7 +10,6 @@ parameters:
desc: Human Description
android: /optional/path/to/android.csproj
ios: /optional/path/to/ios.csproj
net6: false
stages:
@ -29,7 +28,10 @@ stages:
name: ${{ parameters.androidVmPool }}
vmImage: ${{ parameters.androidVmImage }}
variables:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86"
${{ if ge(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86"
${{ if lt(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86"
REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE)
steps:
- template: device-tests-steps.yml
@ -37,7 +39,6 @@ stages:
platform: android
path: ${{ project.android }}
device: android-emulator-32_${{ api }}
net6: ${{ project.net6 }}
- stage: ios_device_tests
displayName: iOS Device Tests
@ -64,4 +65,3 @@ stages:
device: ios-simulator-64
${{ if ne(version, 'latest') }}:
device: ios-simulator-64_${{ version }}
net6: ${{ project.net6 }}

Просмотреть файл

@ -0,0 +1,89 @@
parameters:
platform : ''
skipXcode: false
steps:
# Prepare macOS
- ${{ if eq(parameters.platform, 'macos') }}:
# Provision Xcode
- ${{ if ne(parameters.skipXcode, 'true') }}:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Xcode'
condition: ne(variables['REQUIRED_XCODE'], '')
inputs:
provisioning_script: $(provisionator.xcode)
# Provision Additional Software
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Additional Software'
condition: eq(variables['provisioning'], 'true')
inputs:
provisioning_script: $(provisionator.path)
provisioning_extra_args: $(provisionator.extraArguments)
# Setup SDK Paths
- bash: |
echo "##vso[task.prependpath]/Library/Frameworks/Mono.framework/Versions/Current/Commands/"
echo "##vso[task.prependpath]~/Library/Developer/Xamarin/android-sdk-macosx"
displayName: 'Setup SDK Paths'
condition: ne(variables['osx2019VmPool'], 'Azure Pipelines')
# Setup JDK Paths
- bash: |
echo "##vso[task.setvariable variable=JI_JAVA_HOME]$(JAVA_HOME_11_X64)"
displayName: 'Setup JDK Paths'
# Configure VS Mac for Xcode
- bash: |
set -x
mkdir -p ~/Library/Preferences/Xamarin
rm -f ~/Library/Preferences/Xamarin/Settings.plist
/usr/libexec/PlistBuddy -c "add :AppleSdkRoot string $(dirname $(dirname $(xcode-select -p)))" ~/Library/Preferences/Xamarin/Settings.plist || true
cat ~/Library/Preferences/Xamarin/Settings.plist || true
displayName: 'Configure Visual Studio'
# Install Certificates and Provisioning Profiles
- task: InstallAppleProvisioningProfile@1
displayName: 'Install the iOS provisioning profile'
inputs:
provProfileSecureFile: 'Components iOS Provisioning.mobileprovision'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install the macOS provisioning profile'
inputs:
provProfileSecureFile: 'Components Mac Provisioning.mobileprovision'
- task: InstallAppleProvisioningProfile@1
displayName: 'Install the tvOS provisioning profile'
inputs:
provProfileSecureFile: 'Components tvOS Provisioning.mobileprovision'
- task: InstallAppleCertificate@2
displayName: 'Install the iOS certificate'
inputs:
certSecureFile: 'Components iOS Certificate.p12'
- task: InstallAppleCertificate@2
condition: eq(variables['System.JobName'], 'macos')
displayName: 'Install the macOS certificate'
inputs:
certSecureFile: 'Components Mac Certificate.p12'
# Prepare Windows
- ${{ if eq(parameters.platform, 'windows') }}:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Visual Studio'
inputs:
provisioning_script: $(provisionator.vs)
- powershell: |
if (-not $(where.exe pwsh)) {
$url = "https://github.com/PowerShell/PowerShell/releases/download/v$env:POWERSHELL_VERSION/PowerShell-$env:POWERSHELL_VERSION-win-x64.msi"
$output = "$env:TEMP\PowerShell.msi"
Remove-Item $output
Invoke-WebRequest -Uri $url -OutFile $output
msiexec.exe /package $output /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1
}
displayName: 'Install PowerShell Core'
- pwsh: |
$msbuild = "$env:ProgramFiles/Microsoft Visual Studio/2022/Preview/MSBuild/Current/Bin/MSBuild.exe"
echo "##vso[task.setvariable variable=MSBUILD_EXE]$msbuild"
displayName: 'Setup MSBuild Paths'
# Prepare Both
- pwsh: ./build.ps1 --target provision
displayName: 'Cake Provision'
condition: eq(variables['provisioningCake'], 'true')

Просмотреть файл

@ -7,8 +7,6 @@ variables:
value: true
- name: DOTNET_VERSION
value: 5.0.201
- name: XHARNESS_VERSION
value: 1.0.0-prerelease.21372.1
- name: LocBranchPrefix
value: 'loc-hb'
- name: LocBranch
@ -27,9 +25,11 @@ variables:
value: $[eq(variables['Build.Reason'], 'PullRequest')]
# Common Agent Pools in use
- name: HostedWinVS2019
value: Hosted Windows 2019 with VS2019
value: Hosted Windows 2019 with VS2019
- name: LogDirectory
value: $(Build.ArtifactStagingDirectory)/logs
- name: TestResultsDirectory
value: $(Build.ArtifactStagingDirectory)/test-results
- name: provisionator.xcode
value: '$(System.DefaultWorkingDirectory)/eng/provisioning/xcode.csx'
- name: provisionator.path
@ -44,3 +44,5 @@ variables:
value: $(System.DefaultWorkingDirectory)/bin/dotnet/dotnet
- name: TeamName
value: Maui
- name: POWERSHELL_VERSION
value: 7.1.3

Просмотреть файл

@ -0,0 +1,67 @@
trigger:
branches:
include:
- main
- release/*
- loc
tags:
include:
- '*'
paths:
include:
- '*'
exclude:
- .github/*
- docs/*
- CODE-OF-CONDUCT.md
- CONTRIBUTING.md
- LICENSE.TXT
- PATENTS.TXT
- README.md
- SECURITY.md
- THIRD-PARTY-NOTICES.TXT
pr:
branches:
include:
- main
- release/*
paths:
include:
- '*'
exclude:
- .github/*
- docs/*
- CODE-OF-CONDUCT.md
- CONTRIBUTING.md
- LICENSE.TXT
- PATENTS.TXT
- README.md
- SECURITY.md
- THIRD-PARTY-NOTICES.TXT
variables:
- template: /eng/pipelines/common/variables.yml
parameters:
- name: BuildEverything
type: boolean
default: false
stages:
- template: common/device-tests.yml
parameters:
${{ if or(parameters.BuildEverything, and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'devdiv'))) }}:
androidApiLevels: [ 30, 29, 28, 27, 26, 25, 24, 23 ]
# androidApiLevels: [ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21 ] # fix the issue of getting the test results off
iosVersions: [ 'latest', '14.5', '13.7', '12.4', '11.4' ]
projects:
- name: essentials
desc: Essentials
android: $(System.DefaultWorkingDirectory)/src/Essentials/test/DeviceTests/Essentials.DeviceTests.csproj
ios: $(System.DefaultWorkingDirectory)/src/Essentials/test/DeviceTests/Essentials.DeviceTests.csproj
- name: core
desc: Core
android: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests/Core.DeviceTests.csproj
ios: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests/Core.DeviceTests.csproj

Просмотреть файл

@ -62,13 +62,13 @@ parameters:
- name: BuildPlatforms
type: object
default:
- name: windows
- name: Windows
poolName: $(windowsNet6VmPool)
vmImage: $(windowsNet6VmImage)
bootsAndroid: $(Android.Msi)
bootsiOS: $(iOS.Msi)
artifact: net6-windows
- name: macos
- name: macOS
poolName: $(macOSXNet6VmPool)
vmImage: $(macOSXNet6VmImage)
bootsAndroid: $(Android.Pkg)
@ -78,13 +78,13 @@ parameters:
- name: PackPlatforms
type: object
default:
- name: windows
- name: Windows
poolName: $(windowsNet6VmPool)
vmImage: $(windowsNet6VmImage)
bootsAndroid: $(Android.Msi)
bootsiOS: $(iOS.Msi)
artifact: nuget
- name: macos
- name: macOS
poolName: $(macOSXNet6VmPool)
vmImage: $(macOSXNet6VmImage)
bootsAndroid: $(Android.Pkg)
@ -102,105 +102,44 @@ resources:
stages:
- stage: windows
displayName: Build Windows
jobs:
- ${{ each BuildCondition in parameters.BuildConfigurations }}:
- job: win_hosted_${{ BuildCondition }}
workspace:
clean: all
displayName: Build Windows Phase (${{ BuildCondition }})
condition: or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
eq('${{ BuildCondition }}', 'Release'))
timeoutInMinutes: 60
pool:
name: $(vs2019VmPool)
vmImage: $(vs2019VmImage)
demands: [ msbuild ]
steps:
- template: common/build-windows.yml
- stage: windows_cake_validation
displayName: Windows Cake Validation
- stage: build_net6
displayName: Build .NET 6
dependsOn: []
jobs:
- ${{ each BuildCondition in parameters.BuildConfigurations }}:
- job: win_hosted_${{ BuildCondition }}
workspace:
clean: all
displayName: Build Windows Phase (${{ BuildCondition }})
condition: or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
eq('${{ BuildCondition }}', 'Release'))
timeoutInMinutes: 60
pool:
name: $(vs2019VmPool)
vmImage: $(vs2019VmImage)
demands: [ msbuild ]
steps:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision VSWindows'
inputs:
provisioning_script: $(provisionator.vs)
- script: dotnet tool restore
displayName: install dotnet tools
- powershell: |
$msbuild = "$env:ProgramFiles/Microsoft Visual Studio/2022/Preview/MSBuild/Current/Bin/MSBuild.exe"
$env:MSBUILD_EXE = "$msbuild"
& dotnet cake --target=VS-WINUI-CI --configuration=${{ BuildCondition }} --msbuild="$msbuild"
displayName: 'Build WinUI SLN'
- task: CopyFiles@2
displayName: 'Copy Bin Log Files'
condition: always()
inputs:
Contents: |
**/*.binlog
TargetFolder: $(build.artifactstagingdirectory)
flattenFolders: true
- task: PublishBuildArtifacts@1
condition: always()
displayName: publish artifacts
inputs:
ArtifactName: win_build_cake
- stage: build_osx
displayName: iOS
dependsOn: []
jobs:
- job: ios
workspace:
clean: all
displayName: Build ControlGallery iOS
timeoutInMinutes: 120
pool:
name: $(macOSXVmPool)
vmImage: $(macOSXVmImage)
demands:
- sh
- Xamarin.iOS
steps:
- template: common/controlgallery-ios.yml
- stage: build_android
displayName: Android
dependsOn: []
jobs:
- job: android
workspace:
clean: all
displayName: Build ControlGallery Android
timeoutInMinutes: 120
pool:
name: $(macOSXVmPool)
vmImage: $(macOSXVmImage)
variables:
renderers: 'FAST'
outputfolder: 'newRenderers'
steps:
- template: common/controlgallery-android.yml
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
- ${{ each BuildConfiguration in parameters.BuildConfigurations }}:
- job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }}
workspace:
clean: all
displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }})
timeoutInMinutes: 120
condition: or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
eq('${{ BuildConfiguration }}', 'Release'))
pool:
name: ${{ BuildPlatform.poolName }}
vmImage: ${{ BuildPlatform.vmImage }}
steps:
- template: common/provision.yml
parameters:
platform: ${{ BuildPlatform.name }}
- pwsh: ./build.ps1 --target=dotnet --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Install .NET'
- pwsh: ./build.ps1 --target=dotnet-build --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Build .NET Maui'
- pwsh: ./build.ps1 --target=dotnet-test --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Run Unit Tests'
- task: PublishTestResults@2
condition: always()
inputs:
testRunner: VSTest
testResultsFiles: '$(build.artifactstagingdirectory)/**/*.trx'
- task: PublishBuildArtifacts@1
condition: always()
displayName: Publish Artifacts (${{ BuildPlatform.artifact }})
inputs:
ArtifactName: ${{ BuildPlatform.artifact }}
- stage: pack_net6
displayName: Pack .NET 6
@ -210,75 +149,34 @@ stages:
- job: pack_net6_${{ BuildPlatform.name }}
workspace:
clean: all
displayName: Pack .NET 6 (${{ BuildPlatform.name }})
displayName: ${{ BuildPlatform.name }}
timeoutInMinutes: 120
pool:
name: ${{ BuildPlatform.poolName }}
vmImage: ${{ BuildPlatform.vmImage }}
steps:
- ${{ if eq(BuildPlatform.name, 'macos') }}:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Xcode'
condition: ne(variables['REQUIRED_XCODE'], '')
inputs:
provisioning_script: $(provisionator.xcode)
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provisionator'
condition: eq(variables['provisioning'], 'true')
inputs:
provisioning_script: $(provisionator.path)
provisioning_extra_args: $(provisionator.extraArguments)
- script: |
echo "##vso[task.prependpath]/Library/Frameworks/Mono.framework/Versions/Current/Commands/"
echo "##vso[task.prependpath]~/Library/Developer/Xamarin/android-sdk-macosx"
displayName: 'Setup SDK Paths'
condition: ne(variables['osx2019VmPool'], 'Azure Pipelines')
- bash: |
set -x
mkdir -p ~/Library/Preferences/Xamarin
rm -f ~/Library/Preferences/Xamarin/Settings.plist
/usr/libexec/PlistBuddy -c "add :AppleSdkRoot string $(dirname $(dirname $(xcode-select -p)))" ~/Library/Preferences/Xamarin/Settings.plist || true
cat ~/Library/Preferences/Xamarin/Settings.plist || true
displayName: configure vsmac xcode
- script: echo '##vso[task.setvariable variable=JI_JAVA_HOME]$(JAVA_HOME_11_X64)'
displayName: set JI_JAVA_HOME
- ${{ if eq(BuildPlatform.name, 'windows') }}:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision VSWindows'
inputs:
provisioning_script: $(provisionator.vs)
- powershell: |
$msbuild = "$env:ProgramFiles/Microsoft Visual Studio/2022/Preview/MSBuild/Current/Bin/MSBuild.exe"
echo "MSBUILD_EXE: $msbuild"
echo "##vso[task.setvariable variable=MSBUILD_EXE]$msbuild"
displayName: set MSBUILD_EXE
- script: dotnet tool restore
displayName: install dotnet tools
- powershell: dotnet cake --configuration=Release
displayName: pack nugets
- template: common/provision.yml
parameters:
platform: ${{ BuildPlatform.name }}
- pwsh: ./build.ps1 --target=dotnet-pack --configuration="Release" --verbosity=diagnostic
displayName: 'Pack .NET Maui'
- task: CopyFiles@2
condition: always()
displayName: 'Copy files to staging'
inputs:
Contents: |
artifacts/*nupkg
artifacts/**/*.*nupkg
artifacts/vs-workload.props
**/SignList.xml
eng/automation/SignList.xml
TargetFolder: $(build.artifactstagingdirectory)
flattenFolders: true
- task: CopyFiles@2
displayName: 'Copy Bin Log Files'
displayName: 'Copy Log Files'
condition: always()
inputs:
Contents: |
**/*.binlog
TargetFolder: $(build.artifactstagingdirectory)
artifacts/logs/**
TargetFolder: $(build.artifactstagingdirectory)/logs
flattenFolders: true
- task: PublishBuildArtifacts@1
condition: always()
@ -286,99 +184,92 @@ stages:
inputs:
ArtifactName: ${{ BuildPlatform.artifact }}
- stage: build_net6
displayName: .NET 6 Samples
- stage: samples_net6
displayName: Build .NET 6 Samples
dependsOn: pack_net6
jobs:
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
- ${{ each BuildCondition in parameters.BuildConfigurations }}:
- job: build_net6_${{ BuildPlatform.name }}_${{ BuildCondition }}
- ${{ each BuildConfiguration in parameters.BuildConfigurations }}:
- job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }}
workspace:
clean: all
displayName: .NET 6 Samples (${{ BuildPlatform.name }} | ${{ BuildCondition }})
displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }})
timeoutInMinutes: 120
condition: or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
eq('${{ BuildCondition }}', 'Release'))
eq('${{ BuildConfiguration }}', 'Release'))
pool:
name: ${{ BuildPlatform.poolName }}
vmImage: ${{ BuildPlatform.vmImage }}
steps:
- ${{ if eq(BuildPlatform.name, 'macos') }}:
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provision Xcode'
condition: ne(variables['REQUIRED_XCODE'], '')
inputs:
provisioning_script: $(provisionator.xcode)
- task: xamops.azdevex.provisionator-task.provisionator@1
displayName: 'Provisionator'
condition: eq(variables['provisioning'], 'true')
inputs:
provisioning_script: $(provisionator.path)
provisioning_extra_args: $(provisionator.extraArguments)
- script: |
echo "##vso[task.prependpath]/Library/Frameworks/Mono.framework/Versions/Current/Commands/"
echo "##vso[task.prependpath]~/Library/Developer/Xamarin/android-sdk-macosx"
displayName: 'Setup SDK Paths'
condition: ne(variables['osx2019VmPool'], 'Azure Pipelines')
- bash: |
set -x
mkdir -p ~/Library/Preferences/Xamarin
rm -f ~/Library/Preferences/Xamarin/Settings.plist
/usr/libexec/PlistBuddy -c "add :AppleSdkRoot string $(dirname $(dirname $(xcode-select -p)))" ~/Library/Preferences/Xamarin/Settings.plist || true
cat ~/Library/Preferences/Xamarin/Settings.plist || true
displayName: configure vsmac xcode
- script: echo '##vso[task.setvariable variable=JI_JAVA_HOME]$(JAVA_HOME_11_X64)'
displayName: set JI_JAVA_HOME
- task: DownloadPipelineArtifact@2
displayName: download nuget
- template: common/provision.yml
parameters:
platform: ${{ BuildPlatform.name }}
- task: DownloadBuildArtifacts@0
displayName: 'Download Packages'
inputs:
artifact: nuget
patterns: '**/*.nupkg'
path: $(System.DefaultWorkingDirectory)/artifacts
- pwsh: |
& dotnet build src/DotNet/DotNet.csproj -p:InstallWorkloadPacks=false -bl:$(LogDirectory)/$(BuildConfiguration)-dotnet.binlog
$env:PATH = (Join-Path '$(System.DefaultWorkingDirectory)' 'bin/dotnet') + [IO.Path]::PathSeparator + $env:PATH
& $(DotNet.Path) build src/DotNet/DotNet.csproj -t:Install -bl:$(LogDirectory)/$(BuildConfiguration)-dotnet-install.binlog
& $(DotNet.Path) build Microsoft.Maui.Samples-net6.slnf -c $(BuildConfiguration) -p:UseWorkload=true -bl:$(LogDirectory)/$(BuildConfiguration)-samples.binlog
displayName: build samples
errorActionPreference: stop
artifactName: nuget
itemPattern: '**/*.nupkg'
downloadPath: $(System.DefaultWorkingDirectory)/artifacts
- pwsh: Move-Item -Path artifacts\nuget\*.nupkg -Destination artifacts -Force
displayName: Move the downloaded artifacts
- pwsh: ./build.ps1 --target=dotnet-local-workloads --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Install .NET (Local Workloads)'
- pwsh: ./build.ps1 --target=dotnet-samples --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Build .NET 6 Samples'
- task: PublishBuildArtifacts@1
condition: always()
displayName: publish artifacts
inputs:
ArtifactName: ${{ BuildPlatform.artifact }}
- template: common/device-tests.yml
parameters:
${{ if or(parameters.BuildEverything, ne(variables['Build.Reason'], 'PullRequest')) }}:
androidApiLevels: [ 30, 29, 21 ]
iosVersions: [ 'latest' ]
projects:
- name: essentials
desc: Essentials
android: $(System.DefaultWorkingDirectory)/src/Essentials/test/DeviceTests.Android/Essentials.DeviceTests.Android.csproj
ios: $(System.DefaultWorkingDirectory)/src/Essentials/test/DeviceTests.iOS/Essentials.DeviceTests.iOS.csproj
- name: core
desc: Core
android: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests.Android/Core.DeviceTests.Android.csproj
ios: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests.iOS/Core.DeviceTests.iOS.csproj
# - name: core_net6
# desc: Core .NET 6
# android: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests/Core.DeviceTests-net6.csproj
# ios: $(System.DefaultWorkingDirectory)/src/Core/tests/DeviceTests/Core.DeviceTests-net6.csproj
# net6: true
- stage: templates_net6
displayName: Build .NET 6 Templates
dependsOn: pack_net6
jobs:
- ${{ each BuildPlatform in parameters.BuildPlatforms }}:
- ${{ each BuildConfiguration in parameters.BuildConfigurations }}:
- job: build_net6_${{ BuildPlatform.name }}_${{ BuildConfiguration }}
workspace:
clean: all
displayName: ${{ BuildPlatform.name }} (${{ BuildConfiguration }})
timeoutInMinutes: 120
condition: or(
${{ parameters.BuildEverything }},
ne(variables['Build.Reason'], 'PullRequest'),
eq('${{ BuildConfiguration }}', 'Release'))
pool:
name: ${{ BuildPlatform.poolName }}
vmImage: ${{ BuildPlatform.vmImage }}
steps:
- template: common/provision.yml
parameters:
platform: ${{ BuildPlatform.name }}
- task: DownloadBuildArtifacts@0
displayName: 'Download Packages'
inputs:
artifactName: nuget
itemPattern: '**/*.nupkg'
downloadPath: $(System.DefaultWorkingDirectory)/artifacts
- pwsh: Move-Item -Path artifacts\nuget\*.nupkg -Destination artifacts -Force
displayName: Move the downloaded artifacts
- pwsh: ./build.ps1 --target=dotnet-local-workloads --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Install .NET (Local Workloads)'
- pwsh: ./build.ps1 --target=dotnet-templates --configuration="${{ BuildConfiguration }}" --verbosity=diagnostic
displayName: 'Build .NET 6 Templates'
- task: PublishBuildArtifacts@1
condition: always()
displayName: publish artifacts
inputs:
ArtifactName: ${{ BuildPlatform.artifact }}
- template: common/security_compliance.yml
- template: common/localization-handoff.yml # Process outgoing strings [Localization Handoff]
- template: common/localization-handback.yml # Process incoming translations and Create PR to main [Localization Handback]
- template: common/merge-translations-update.yml # Validating incoming translations strings and merge PR [Localization Handback]
- ${{ if eq(variables['System.TeamProject'], 'devdiv') }}:
- template: common/localization-handoff.yml # Process outgoing strings [Localization Handoff]
- template: common/localization-handback.yml # Process incoming translations and Create PR to main [Localization Handback]
- template: common/merge-translations-update.yml # Validating incoming translations strings and merge PR [Localization Handback]
- ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: # Sign only using the private server
- stage: nuget_signing
@ -411,3 +302,7 @@ stages:
parameters:
dependsOn: nuget_signing
approvalTimeoutInMinutes: 30
symbolArtifactName: nuget
symbolArtifactPatterns: |
**/signed/*.nupkg
**/*.snupkg

Просмотреть файл

@ -104,6 +104,7 @@ if(String.IsNullOrWhiteSpace(ANDROID_API_SDKS))
.ApiLevel((AndroidApiLevel)28)
.ApiLevel((AndroidApiLevel)29)
.ApiLevel((AndroidApiLevel)30)
.ApiLevel((AndroidApiLevel)31)
.SdkManagerPackage ("build-tools;29.0.3");
}
else{

Просмотреть файл

@ -5,48 +5,51 @@ using static Xamarin.Provisioning.ProvisioningScript;
using System;
using System.Linq;
var desiredXcode = Environment.GetEnvironmentVariable ("REQUIRED_XCODE");
if (string.IsNullOrEmpty (desiredXcode)) {
Console.WriteLine ("The environment variable 'REQUIRED_XCODE' must be exported and the value must be a valid value from the 'XreItem' enumeration.");
return;
var desiredXcode = Environment.GetEnvironmentVariable("REQUIRED_XCODE");
if (string.IsNullOrEmpty(desiredXcode)) {
Console.WriteLine("The environment variable 'REQUIRED_XCODE' must be exported and the value must be a valid value from the 'XreItem' enumeration.");
return;
}
desiredXcode = desiredXcode.Replace("Xcode_", "").Replace("_", ".");
Console.WriteLine("Desired Xcode: {0}", desiredXcode);
// Find the best version
Item item;
if(desiredXcode == "Latest")
if (desiredXcode == "Latest")
{
item = XcodeBeta();
if(item.Version.StartsWith("12.0.0-beta."))
{
Console.WriteLine ("CheckInstalledDevOpsBetaXcodeAndSymlink");
int expectedBeta = Convert.ToInt32(item.Version.Replace("12.0.0-beta.", ""));
CheckInstalledDevOpsBetaXcodeAndSymlink("17200.1", expectedBeta: expectedBeta);
}
// // Fix up the case where the beta did not make it to the machine
// var latestVersion = GetAvailableXcodes().First().Version;
// Console.WriteLine($"Found the latest version: {latestVersion}");
// var newVersion = TryMapBetaToStable(latestVersion);
// if (newVersion != latestVersion)
// {
// Console.WriteLine($"Found a better version: {latestVersion} -> {newVersion}");
// latestVersion = newVersion;
// }
// item = Xcode(latestVersion);
item = XcodeBeta();
}
else if (desiredXcode == "Stable")
item = XcodeStable();
item = XcodeStable();
else
item = Xcode(desiredXcode);
item = Xcode(desiredXcode);
Console.WriteLine ("InstallPath: {0}", item.Version);
item.XcodeSelect ();
Console.WriteLine("Selected version: {0}", item.Version);
item.XcodeSelect();
LogInstalledXcodes();
var appleSdkOverride = Path.Combine(Environment.GetFolderPath (Environment.SpecialFolder.Personal), "Library", "Preferences", "Xamarin", "Settings.plist");
var appleSdkOverride = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Library", "Preferences", "Xamarin", "Settings.plist");
Item("Override Apple SDK Settings")
.Condition(item => !File.Exists(appleSdkOverride) || GetSettingValue(appleSdkOverride, "AppleSdkRoot") != GetSelectedXcodePath())
.Action (item => {
.Action(item =>
{
DeleteSafe(appleSdkOverride);
CreateSetting(appleSdkOverride, "AppleSdkRoot", GetSelectedXcodePath ());
Console.WriteLine($"New VSMac iOS SDK Location: {GetSelectedXcodePath ()}");
CreateSetting(appleSdkOverride, "AppleSdkRoot", GetSelectedXcodePath());
Console.WriteLine($"New VSMac iOS SDK Location: {GetSelectedXcodePath()}");
});
void DeleteSafe(string file)
{
if (File.Exists(file))
@ -63,32 +66,33 @@ string GetSettingValue(string settingFile, string keyName)
return Exec("defaults", "read", settingFile, keyName).FirstOrDefault();
}
bool CheckInstalledDevOpsBetaXcodeAndSymlink (string expectedBundleVersion, int expectedBeta)
void SafeSymlink(string source, string destination)
{
var devOpsXcodeBetaPath = "/Applications/Xcode_12_beta.app";
if (!Directory.Exists (devOpsXcodeBetaPath))
return false;
var infoPlist = Plist (devOpsXcodeBetaPath);
var bundleVersion = (string)infoPlist.CFBundleVersion;
if (bundleVersion != expectedBundleVersion)
return false;
if (RunningInCI) {
SafeSymlink (devOpsXcodeBetaPath, $"/Applications/Xcode_12.0.0-beta{expectedBeta}.app");
SafeSymlink (devOpsXcodeBetaPath, $"/Applications/Xcode_12_beta_{expectedBeta}.app");
}
Console.WriteLine ($"CFBundleVersion found: {bundleVersion}");
return true;
}
void SafeSymlink (string source, string destination)
{
if (Directory.Exists (destination) || Config.DryRun)
if (Directory.Exists(destination) || Config.DryRun)
return;
Console.WriteLine ($"ln -sf {source} {destination}");
Exec ("/bin/ln", "-sf", source, destination);
Console.WriteLine ($"Symlink created: '{source}' links to '{destination}'");
Console.WriteLine($"ln -sf {source} {destination}");
Exec("/bin/ln", "-sf", source, destination);
Console.WriteLine($"Symlink created: '{source}' links to '{destination}'");
}
string TryMapBetaToStable(string betaVersion)
{
var index = betaVersion.IndexOf("-beta");
if (index == -1)
return betaVersion;
var stableVersion = betaVersion.Substring(0, index);
if (stableVersion.EndsWith(".0"))
{
stableVersion = stableVersion.Substring(0, stableVersion.Length - 2);
if (Directory.Exists($"/Applications/Xcode_{stableVersion}.app"))
return stableVersion;
}
else if (Directory.Exists($"/Applications/Xcode_{stableVersion}.app"))
{
return stableVersion;
}
return betaVersion;
}

Просмотреть файл

@ -1,5 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">
<Import Project="..\..\src\WindowsForms\build\Microsoft.AspNetCore.Components.WebView.WindowsForms.props" />
<PropertyGroup>
<TargetFrameworks>net6.0-windows</TargetFrameworks>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
@ -19,4 +21,6 @@
</Content>
</ItemGroup>
<Import Project="..\..\src\WindowsForms\build\Microsoft.AspNetCore.Components.WebView.WindowsForms.targets" />
</Project>

Просмотреть файл

@ -1,5 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">
<Import Project="..\..\src\Wpf\build\Microsoft.AspNetCore.Components.WebView.Wpf.props" />
<PropertyGroup>
<TargetFrameworks>net6.0-windows</TargetFrameworks>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
@ -19,4 +21,6 @@
</Content>
</ItemGroup>
<Import Project="..\..\src\Wpf\build\Microsoft.AspNetCore.Components.WebView.Wpf.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,115 @@
using System;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Android.Content.Res;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
/// <summary>
/// A minimal implementation of an IFileProvider to be used by the BlazorWebView and WebViewManager types.
/// </summary>
internal sealed class AndroidMauiAssetFileProvider : IFileProvider
{
private readonly AssetManager _assets;
private readonly string _contentRootDir;
public AndroidMauiAssetFileProvider(AssetManager? assets, string contentRootDir)
{
_assets = assets ?? throw new ArgumentNullException(nameof(assets));
_contentRootDir = contentRootDir;
}
public IDirectoryContents GetDirectoryContents(string subpath)
=> new AndroidMauiAssetDirectoryContents(_assets, Path.Combine(_contentRootDir, subpath));
public IFileInfo GetFileInfo(string subpath)
=> new AndroidMauiAssetFileInfo(_assets, Path.Combine(_contentRootDir, subpath));
public IChangeToken? Watch(string filter)
=> null;
private sealed class AndroidMauiAssetFileInfo : IFileInfo
{
private readonly AssetManager _assets;
private readonly string _filePath;
private readonly Lazy<bool> _lazyAssetExists;
private readonly Lazy<long> _lazyAssetLength;
public AndroidMauiAssetFileInfo(AssetManager assets, string filePath)
{
_assets = assets;
_filePath = filePath;
Name = Path.GetFileName(filePath);
_lazyAssetExists = new Lazy<bool>(() =>
{
try
{
using var stream = _assets.Open(_filePath);
return true;
}
catch
{
return false;
}
});
_lazyAssetLength = new Lazy<long>(() =>
{
try
{
// The stream returned by AssetManager.Open() is not seekable, so we have to read
// the contents to get its length. In practice, Length is never called by BlazorWebView,
// so it's here "just in case."
using var stream = _assets.Open(_filePath);
var buffer = ArrayPool<byte>.Shared.Rent(4096);
long length = 0;
while (length != (length += stream.Read(buffer)))
{
// just read the stream to get its length; we don't need the contents here
}
ArrayPool<byte>.Shared.Return(buffer);
return length;
}
catch
{
return -1;
}
});
}
public bool Exists => _lazyAssetExists.Value;
public long Length => _lazyAssetLength.Value;
public string PhysicalPath { get; } = null!;
public string Name { get; }
public DateTimeOffset LastModified { get; } = DateTimeOffset.FromUnixTimeSeconds(0);
public bool IsDirectory => false;
public Stream CreateReadStream()
=> _assets.Open(_filePath);
}
// This is never used by BlazorWebView or WebViewManager
private sealed class AndroidMauiAssetDirectoryContents : IDirectoryContents
{
public AndroidMauiAssetDirectoryContents(AssetManager assets, string filePath)
{
}
public bool Exists => false;
public IEnumerator<IFileInfo> GetEnumerator()
=> throw new NotImplementedException();
IEnumerator IEnumerable.GetEnumerator()
=> throw new NotImplementedException();
}
}
}

Просмотреть файл

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using Android.Webkit;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.FileProviders;
using AWebView = Android.Webkit.WebView;
@ -29,8 +30,8 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
/// <param name="dispatcher">A <see cref="Dispatcher"/> instance that can marshal calls to the required thread or sync context.</param>
/// <param name="fileProvider">Provides static content to the webview.</param>
/// <param name="hostPageRelativePath">Path to the host page within the <paramref name="fileProvider"/>.</param>
public AndroidWebKitWebViewManager(BlazorWebViewHandler blazorMauiWebViewHandler, AWebView webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, hostPageRelativePath)
public AndroidWebKitWebViewManager(BlazorWebViewHandler blazorMauiWebViewHandler, AWebView webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, jsComponents, hostPageRelativePath)
{
_blazorWebViewHandler = blazorMauiWebViewHandler ?? throw new ArgumentNullException(nameof(blazorMauiWebViewHandler));
_webview = webview ?? throw new ArgumentNullException(nameof(webview));

Просмотреть файл

@ -1,8 +1,14 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using Android.Webkit;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
using Microsoft.Maui.Handlers;
using static Android.Views.ViewGroup;
using AWebView = Android.Webkit.WebView;
@ -47,6 +53,20 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
{
nativeView.StopLoading();
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?
.DisposeAsync()
.AsTask()
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
_webviewManager = null;
}
_webViewClient?.Dispose();
_webChromeClient?.Dispose();
}
@ -68,16 +88,15 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
throw new InvalidOperationException($"Can't start {nameof(BlazorWebView)} without native web view instance.");
}
var assetConfig = Services!.GetRequiredService<BlazorAssetsAssemblyConfiguration>()!;
// 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.
var contentRootDir = Path.GetDirectoryName(HostPage!) ?? string.Empty;
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage!);
var fileProvider = new ManifestEmbeddedFileProvider(assetConfig.AssetsAssembly, root: contentRootDir);
var mauiAssetFileProvider = new AndroidMauiAssetFileProvider(Context.Assets, contentRootDir);
_webviewManager = new AndroidWebKitWebViewManager(this, NativeView, Services!, MauiDispatcher.Instance, fileProvider, hostPageRelativePath);
var jsComponents = new JSComponentConfigurationStore();
_webviewManager = new AndroidWebKitWebViewManager(this, NativeView, Services!, MauiDispatcher.Instance, mauiAssetFileProvider, jsComponents, hostPageRelativePath);
if (RootComponents != null)
{
foreach (var rootComponent in RootComponents)

Просмотреть файл

@ -1,14 +0,0 @@
using System.Reflection;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
internal class BlazorAssetsAssemblyConfiguration
{
public BlazorAssetsAssemblyConfiguration(Assembly assetsAssembly)
{
AssetsAssembly = assetsAssembly;
}
public Assembly AssetsAssembly { get; set; }
}
}

Просмотреть файл

@ -1,40 +1,19 @@
using System;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Maui;
using Microsoft.Maui.Hosting;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
public static class BlazorWebViewRegistrationExtensions
{
public static TAppHostBuilder RegisterBlazorMauiWebView<TAppHostBuilder>(this TAppHostBuilder appHostBuilder) where TAppHostBuilder : IAppHostBuilder
{
var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly == null)
{
throw new InvalidOperationException(
$"The entry assembly for this application could not be found for loading static web assets. " +
$"Call the overload of {nameof(RegisterBlazorMauiWebView)} that accepts a parameter to specify the assembly in the project that contains static web assets.");
}
return RegisterBlazorMauiWebView(appHostBuilder, entryAssembly);
}
public static TAppHostBuilder RegisterBlazorMauiWebView<TAppHostBuilder>(this TAppHostBuilder appHostBuilder, Assembly assetsAssembly) where TAppHostBuilder : IAppHostBuilder
public static MauiAppBuilder RegisterBlazorMauiWebView(this MauiAppBuilder appHostBuilder)
{
if (appHostBuilder is null)
{
throw new ArgumentNullException(nameof(appHostBuilder));
}
if (assetsAssembly is null)
{
throw new ArgumentNullException(nameof(assetsAssembly));
}
appHostBuilder.ConfigureServices(services =>
{
services.AddSingleton(new BlazorAssetsAssemblyConfiguration(assetsAssembly));
});
appHostBuilder.ConfigureMauiHandlers((_, handlers) => handlers.AddHandler<IBlazorWebView, BlazorWebViewHandler>());
appHostBuilder.ConfigureMauiHandlers(handlers => handlers.AddHandler<IBlazorWebView, BlazorWebViewHandler>());
return appHostBuilder;
}

Просмотреть файл

@ -25,10 +25,13 @@
</Content>
</ItemGroup>
<ItemGroup>
<Compile Include="..\WebView2\Internal\StaticContentProvider.cs" Link="Windows\SharedSource\StaticContentProvider.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authorization" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" />
<PackageReference Include="Microsoft.JSInterop" />
</ItemGroup>

Просмотреть файл

@ -1,5 +1,6 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
@ -19,10 +20,19 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
protected override void DisconnectHandler(WebView2Control nativeView)
{
//nativeView.StopLoading();
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?
.DisposeAsync()
.AsTask()
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
//_webViewClient?.Dispose();
//_webChromeClient?.Dispose();
_webviewManager = null;
}
}
private bool RequiredStartupPropertiesSet =>
@ -42,16 +52,18 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
throw new InvalidOperationException($"Can't start {nameof(BlazorWebView)} without native web view instance.");
}
var assetConfig = Services!.GetRequiredService<BlazorAssetsAssemblyConfiguration>()!;
// 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.
var contentRootDir = Path.GetDirectoryName(HostPage!) ?? string.Empty;
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage!);
var fileProvider = new ManifestEmbeddedFileProvider(assetConfig.AssetsAssembly, root: contentRootDir);
// On Windows we don't use IFileProvider because it is sync-only, whereas in WinUI all the
// file storage APIs are async-only. So instead we override HandleWebResourceRequest in
// WinUIWebViewManager so that loading static assets is done entirely there.
var mauiAssetFileProvider = new NullFileProvider();
_webviewManager = new WinUIWebViewManager(NativeView, new WinUIWebView2Wrapper(NativeView), Services!, MauiDispatcher.Instance, fileProvider, hostPageRelativePath);
var jsComponents = new JSComponentConfigurationStore();
_webviewManager = new WinUIWebViewManager(NativeView, new WinUIWebView2Wrapper(NativeView), Services!, MauiDispatcher.Instance, mauiAssetFileProvider, jsComponents, hostPageRelativePath, contentRootDir);
if (RootComponents != null)
{
foreach (var rootComponent in RootComponents)

Просмотреть файл

@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Windows.Foundation;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
internal class DeferralWrapper : IDeferralWrapper
{
private readonly Deferral _deferral;
public DeferralWrapper(Deferral deferral)
{
_deferral = deferral ?? throw new System.ArgumentNullException(nameof(deferral));
}
public void Complete()
{
_deferral.Complete();
}
public void Dispose()
{
_deferral.Dispose();
}
}
}

Просмотреть файл

@ -1,7 +1,7 @@
// 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.IO;
using Windows.Storage.Streams;
namespace Microsoft.AspNetCore.Components.WebView.WebView2
{
@ -33,6 +33,8 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
/// <param name="statusCode"></param>
/// <param name="statusMessage"></param>
/// <param name="headerString"></param>
void SetResponse(Stream content, int statusCode, string statusMessage, string headerString);
}
void SetResponse(IRandomAccessStream content, int statusCode, string statusMessage, string headerString);
IDeferralWrapper GetDeferral();
}
}

Просмотреть файл

@ -0,0 +1,12 @@
// 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.WebView2
{
public interface IDeferralWrapper : IDisposable
{
void Complete();
}
}

Просмотреть файл

@ -3,9 +3,15 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebView.WebView2.Internal;
using Microsoft.Extensions.FileProviders;
using Windows.ApplicationModel;
using Windows.Storage.Streams;
namespace Microsoft.AspNetCore.Components.WebView.WebView2
{
@ -18,7 +24,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
// 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.
private const string AppOrigin = "https://0.0.0.0/";
protected private const string AppOrigin = "https://0.0.0.0/";
private readonly IWebView2Wrapper _webview;
private readonly Task _webviewReadyTask;
@ -31,8 +37,8 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
/// <param name="dispatcher">A <see cref="Dispatcher"/> instance that can marshal calls to the required thread or sync context.</param>
/// <param name="fileProvider">Provides static content to the webview.</param>
/// <param name="hostPageRelativePath">Path to the host page within the <paramref name="fileProvider"/>.</param>
public WebView2WebViewManager(IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, hostPageRelativePath)
public WebView2WebViewManager(IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, jsComponents, hostPageRelativePath)
{
_webview = webview ?? throw new ArgumentNullException(nameof(webview));
@ -63,20 +69,9 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
ApplyDefaultWebViewSettings();
_webview.CoreWebView2.AddWebResourceRequestedFilter($"{AppOrigin}*", CoreWebView2WebResourceContextWrapper.All);
var removeResourceCallback = _webview.CoreWebView2.AddWebResourceRequestedHandler((s, eventArgs) =>
var removeResourceCallback = _webview.CoreWebView2.AddWebResourceRequestedHandler(async (s, eventArgs) =>
{
// Unlike server-side code, we get told exactly why the browser is making the request,
// so we can be smarter about fallback. We can ensure that 'fetch' requests never result
// in fallback, for example.
var allowFallbackOnHostPage =
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Document ||
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Other; // e.g., dev tools requesting page source
if (TryGetResponseContent(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers))
{
var headerString = GetHeaderString(headers);
eventArgs.SetResponse(content, statusCode, statusMessage, headerString);
}
await HandleWebResourceRequest(eventArgs);
});
// The code inside blazor.webview.js is meant to be agnostic to specific webview technologies,
@ -98,6 +93,31 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
=> MessageReceived(new Uri(e.Source), e.WebMessageAsString));
}
protected virtual async Task HandleWebResourceRequest(ICoreWebView2WebResourceRequestedEventArgsWrapper eventArgs)
{
// Unlike server-side code, we get told exactly why the browser is making the request,
// so we can be smarter about fallback. We can ensure that 'fetch' requests never result
// in fallback, for example.
var allowFallbackOnHostPage =
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Document ||
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Other; // e.g., dev tools requesting page source
// First, call into WebViewManager to see if it has a framework file for this request. It will
// fall back to an IFileProvider, but on WinUI it's always a NullFileProvider, so that will never
// return a file.
if (TryGetResponseContent(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers))
{
// NOTE: This is stream copying is to work around a hanging bug in WinRT with managed streams
var memStream = new MemoryStream();
content.CopyTo(memStream);
var ms = new InMemoryRandomAccessStream();
await ms.WriteAsync(memStream.GetWindowsRuntimeBuffer());
var headerString = GetHeaderString(headers);
eventArgs.SetResponse(ms, statusCode, statusMessage, headerString);
}
}
/// <summary>
/// Override this method to queue a call to Blazor.start(). Not all platforms require this.
/// </summary>
@ -105,7 +125,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
{
}
private static string GetHeaderString(IDictionary<string, string> headers) =>
protected private static string GetHeaderString(IDictionary<string, string> headers) =>
string.Join(Environment.NewLine, headers.Select(kvp => $"{kvp.Key}: {kvp.Value}"));
private void ApplyDefaultWebViewSettings()

Просмотреть файл

@ -1,7 +1,4 @@
using System;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.Web.WebView2.Core;
using Windows.Storage.Streams;
@ -25,15 +22,14 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
public CoreWebView2WebResourceContextWrapper ResourceContext { get; }
public void SetResponse(Stream content, int statusCode, string statusMessage, string headerString)
public IDeferralWrapper GetDeferral()
{
// NOTE: This is stream copying is to work around a hanging bug in WinRT with managed streams
var memStream = new MemoryStream();
content.CopyTo(memStream);
var ms = new InMemoryRandomAccessStream();
ms.WriteAsync(memStream.GetWindowsRuntimeBuffer()).AsTask().Wait();
return new DeferralWrapper(_webResourceRequestedEventArgs.GetDeferral());
}
_webResourceRequestedEventArgs.Response = _environment.CreateWebResourceResponse(ms, statusCode, statusMessage, headerString);
public void SetResponse(IRandomAccessStream content, int statusCode, string statusMessage, string headerString)
{
_webResourceRequestedEventArgs.Response = _environment.CreateWebResourceResponse(content, statusCode, statusMessage, headerString);
}
}
}

Просмотреть файл

@ -1,6 +1,13 @@
using System;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.AspNetCore.Components.WebView.WebView2.Internal;
using Microsoft.Extensions.FileProviders;
using Windows.ApplicationModel;
using Windows.Storage.Streams;
using WebView2Control = Microsoft.UI.Xaml.Controls.WebView2;
namespace Microsoft.AspNetCore.Components.WebView.Maui
@ -11,11 +18,76 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
/// </summary>
public class WinUIWebViewManager : WebView2WebViewManager
{
readonly WebView2Control _nativeWebView2;
private readonly WebView2Control _nativeWebView2;
private readonly string _hostPageRelativePath;
private readonly string _contentRootDir;
public WinUIWebViewManager(WebView2Control nativeWebView2, IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, string hostPageRelativePath) : base(webview, services, dispatcher, fileProvider, hostPageRelativePath)
public WinUIWebViewManager(WebView2Control nativeWebView2, IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string hostPageRelativePath, string contentRootDir)
: base(webview, services, dispatcher, fileProvider, jsComponents, hostPageRelativePath)
{
_nativeWebView2 = nativeWebView2;
_hostPageRelativePath = hostPageRelativePath;
_contentRootDir = contentRootDir;
}
protected override async Task HandleWebResourceRequest(ICoreWebView2WebResourceRequestedEventArgsWrapper eventArgs)
{
// Unlike server-side code, we get told exactly why the browser is making the request,
// so we can be smarter about fallback. We can ensure that 'fetch' requests never result
// in fallback, for example.
var allowFallbackOnHostPage =
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Document ||
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Other; // e.g., dev tools requesting page source
// Get a deferral object so that WebView2 knows there's some async stuff going on. We call Complete() at the end of this method.
using var deferral = eventArgs.GetDeferral();
// First, call into WebViewManager to see if it has a framework file for this request. It will
// fall back to an IFileProvider, but on WinUI it's always a NullFileProvider, so that will never
// return a file.
if (TryGetResponseContent(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers)
&& statusCode != 404)
{
// NOTE: This is stream copying is to work around a hanging bug in WinRT with managed streams.
// See issue https://github.com/microsoft/CsWinRT/issues/670
var memStream = new MemoryStream();
content.CopyTo(memStream);
var ms = new InMemoryRandomAccessStream();
await ms.WriteAsync(memStream.GetWindowsRuntimeBuffer());
var headerString = GetHeaderString(headers);
eventArgs.SetResponse(ms, statusCode, statusMessage, headerString);
}
else
{
// Next, try to go through WinUI Storage to find a static web asset
var uri = new Uri(eventArgs.Request.Uri);
if (new Uri(AppOrigin).IsBaseOf(uri))
{
var relativePath = new Uri(AppOrigin).MakeRelativeUri(uri).ToString();
if (allowFallbackOnHostPage && string.IsNullOrEmpty(relativePath))
{
relativePath = _hostPageRelativePath;
}
relativePath = Path.Combine("Assets", _contentRootDir, relativePath.Replace("/", "\\"));
var winUIItem = await Package.Current.InstalledLocation.TryGetItemAsync(relativePath);
if (winUIItem != null)
{
statusCode = 200;
statusMessage = "OK";
var contentType = StaticContentProvider.GetResponseContentTypeOrDefault(relativePath);
headers = StaticContentProvider.GetResponseHeaders(contentType);
var headerString = GetHeaderString(headers);
var winUIFile = await Package.Current.InstalledLocation.GetFileAsync(relativePath);
eventArgs.SetResponse(await winUIFile.OpenReadAsync(), statusCode, statusMessage, headerString);
}
}
}
// Notify WebView2 that the deferred (async) operation is complete and we set a response.
deferral.Complete();
}
protected override void QueueBlazorStart()

Просмотреть файл

@ -9,14 +9,25 @@
as RazorComponent instead of Content. -->
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
<Content Remove="**\*.razor" />
<RazorComponent Include="**\*.razor" />
<RazorComponent Include="**\*.razor" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<PropertyGroup>
<StaticWebAssetBasePath>/</StaticWebAssetBasePath>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<StaticWebAssetProjectMode>Root</StaticWebAssetProjectMode>
</PropertyGroup>
<Target Name="ConvertStaticWebAssetsToMauiAssets" BeforeTargets="GetMauiItems;ResizetizeCollectItems" DependsOnTargets="StaticWebAssetsPrepareForRun;StaticWebAssetsPrepareForPublish;LoadStaticWebAssetsPublishManifest">
<ComputeStaticWebAssetsTargetPaths Assets="@(StaticWebAsset)" PathPrefix="wwwroot">
<Output TaskParameter="AssetsWithTargetPath" ItemName="_MauiStaticWebAssetWithTargetPath" />
</ComputeStaticWebAssetsTargetPaths>
<ItemGroup>
<MauiAsset Include="%(_MauiStaticWebAssetWithTargetPath.Identity)">
<Link>%(_MauiStaticWebAssetWithTargetPath.TargetPath)</Link>
<TargetPath>%(_MauiStaticWebAssetWithTargetPath.TargetPath)</TargetPath>
</MauiAsset>
</ItemGroup>
</Target>
<!-- Targets temporarily remove Content items in the wwwroot folder so that they don't conflict with iOS/MacCatalyst SDK tasks -->
<Target Name="HideContentFromBundleResources" BeforeTargets="_CollectBundleResources">
@ -37,57 +48,4 @@
</ItemGroup>
</Target>
<!-- Targets for converting Static Web Assets to embedded resources -->
<Target Name="CopyStaticWebAssetsToOutputFolder" BeforeTargets="GetCopyToOutputDirectoryItems" DependsOnTargets="ResolveStaticWebAssetsInputs">
<ItemGroup>
<AllItemsFullPathWithTargetPath Include="%(StaticWebAsset.Identity)" Condition="'%(StaticWebAsset.SourceType)' != ''">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>$([System.String]::Copy('wwwroot\%(StaticWebAsset.BasePath)\%(StaticWebAsset.RelativePath)').Replace('/','\').Replace('\\\','\').Replace('\\','\'))</TargetPath>
</AllItemsFullPathWithTargetPath>
<AllItemsFullPathWithTargetPath Include="%(StaticWebAsset.Identity)" Condition="'%(StaticWebAsset.SourceType)' == ''">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>wwwroot\%(StaticWebAsset.RelativePath)</TargetPath>
</AllItemsFullPathWithTargetPath>
</ItemGroup>
</Target>
<Target Name="ConvertToEmbeddedFilesManifestItems" DependsOnTargets="ResolveStaticWebAssetsInputs" BeforeTargets="SplitResourcesByCulture">
<ItemGroup>
<!-- Prevent any previously-existing embedded resources from being included in the manifest. We want only
StaticWebAssets to be included in the manifest. -->
<EmbeddedResource>
<ExcludeFromManifest>true</ExcludeFromManifest>
</EmbeddedResource>
</ItemGroup>
<ComputeStaticWebAssetsTargetPaths Assets="@(StaticWebAsset)" PathPrefix="wwwroot">
<Output TaskParameter="AssetsWithTargetPath" ItemName="_MauiStaticWebAssetWithTargetPath" />
</ComputeStaticWebAssetsTargetPaths>
<ItemGroup>
<EmbeddedResource
Include="%(_MauiStaticWebAssetWithTargetPath.Identity)"
Link="%(_MauiStaticWebAssetWithTargetPath.TargetPath)"
TargetPath="%(_MauiStaticWebAssetWithTargetPath.TargetPath)"
OriginalItemSpec="%(_MauiStaticWebAssetWithTargetPath.OriginalItemSpec)" />
</ItemGroup>
</Target>
<Target Name="EnsureBundles" BeforeTargets="CoreCompile" DependsOnTargets="BundleScopedCssFiles" />
<Target Name="_FixUpMauiReference"
BeforeTargets="ComputeReferencedProjectsPublishAssets"
AfterTargets="LoadStaticWebAssetsBuildManifest">
<ItemGroup>
<_MauiManifestsToUpdate Include="@(StaticWebAssetManifest)" Condition="'%(ManifestType)' == 'Publish'" />
<_MauiManifestsToUpdate>
<AdditionalPublishPropertiesToRemove Condition="$([System.String]::Copy('%(_MauiManifestsToUpdate.AdditionalPublishProperties)').Contains('TargetFramework')) == 'false'">@(_MauiManifestsToUpdate->'%(AdditionalPublishPropertiesToRemove)');TargetFramework</AdditionalPublishPropertiesToRemove>
</_MauiManifestsToUpdate>
<StaticWebAssetManifest Remove="@(_MauiManifestsToUpdate)" />
<StaticWebAssetManifest Include="@(_MauiManifestsToUpdate)" />
</ItemGroup>
</Target>
</Project>

Просмотреть файл

@ -5,6 +5,7 @@ using System.Globalization;
using System.IO;
using System.Linq;
using Foundation;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Maui.Controls;
@ -71,30 +72,23 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
_webviewManager?.MessageReceivedInternal(uri, message);
}
public override Size GetDesiredSize(double widthConstraint, double heightConstraint)
{
SetDesiredSize(widthConstraint, heightConstraint);
return base.GetDesiredSize(widthConstraint, heightConstraint);
}
void SetDesiredSize(double width, double height)
{
if (NativeView != null)
{
var x = NativeView.Frame.X;
var y = NativeView.Frame.Y;
NativeView.Frame = new RectangleF(x, y, width, height);
}
}
protected override void DisconnectHandler(WKWebView nativeView)
{
//nativeView.StopLoading();
nativeView.StopLoading();
//_webViewClient?.Dispose();
//_webChromeClient?.Dispose();
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?
.DisposeAsync()
.AsTask()
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
_webviewManager = null;
}
}
private bool RequiredStartupPropertiesSet =>
@ -114,16 +108,15 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
throw new InvalidOperationException($"Can't start {nameof(BlazorWebView)} without native web view instance.");
}
var assetConfig = Services!.GetRequiredService<BlazorAssetsAssemblyConfiguration>()!;
// 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.
var contentRootDir = Path.GetDirectoryName(HostPage!) ?? string.Empty;
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage!);
var fileProvider = new ManifestEmbeddedFileProvider(assetConfig.AssetsAssembly, root: contentRootDir);
var mauiAssetFileProvider = new iOSMauiAssetFileProvider(contentRootDir);
_webviewManager = new IOSWebViewManager(this, NativeView, Services!, MauiDispatcher.Instance, fileProvider, hostPageRelativePath);
var jsComponents = new JSComponentConfigurationStore();
_webviewManager = new IOSWebViewManager(this, NativeView, Services!, MauiDispatcher.Instance, mauiAssetFileProvider, jsComponents, hostPageRelativePath);
if (RootComponents != null)
{
foreach (var rootComponent in RootComponents)
@ -132,6 +125,7 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
_ = rootComponent.AddToWebViewManagerAsync(_webviewManager);
}
}
_webviewManager.Navigate("/");
}

Просмотреть файл

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text.Encodings.Web;
using Foundation;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.FileProviders;
using WebKit;
@ -15,8 +16,8 @@ namespace Microsoft.AspNetCore.Components.WebView.Maui
private readonly BlazorWebViewHandler _blazorMauiWebViewHandler;
private readonly WKWebView _webview;
public IOSWebViewManager(BlazorWebViewHandler blazorMauiWebViewHandler, WKWebView webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, hostPageRelativePath)
public IOSWebViewManager(BlazorWebViewHandler blazorMauiWebViewHandler, WKWebView webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, jsComponents, hostPageRelativePath)
{
_blazorMauiWebViewHandler = blazorMauiWebViewHandler ?? throw new ArgumentNullException(nameof(blazorMauiWebViewHandler));
_webview = webview ?? throw new ArgumentNullException(nameof(webview));

Просмотреть файл

@ -0,0 +1,74 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Foundation;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
namespace Microsoft.AspNetCore.Components.WebView.Maui
{
/// <summary>
/// A minimal implementation of an IFileProvider to be used by the BlazorWebView and WebViewManager types.
/// </summary>
internal sealed class iOSMauiAssetFileProvider : IFileProvider
{
private readonly string _bundleRootDir;
public iOSMauiAssetFileProvider(string contentRootDir)
{
_bundleRootDir = Path.Combine(NSBundle.MainBundle.ResourcePath, contentRootDir);
}
public IDirectoryContents GetDirectoryContents(string subpath)
=> new iOSMauiAssetDirectoryContents(Path.Combine(_bundleRootDir, subpath));
public IFileInfo GetFileInfo(string subpath)
=> new iOSMauiAssetFileInfo(Path.Combine(_bundleRootDir, subpath));
public IChangeToken? Watch(string filter)
=> null;
private sealed class iOSMauiAssetFileInfo : IFileInfo
{
private readonly string _filePath;
public iOSMauiAssetFileInfo(string filePath)
{
_filePath = filePath;
Name = Path.GetFileName(_filePath);
var fileInfo = new FileInfo(_filePath);
Exists = fileInfo.Exists;
Length = Exists ? fileInfo.Length : -1;
}
public bool Exists { get; }
public long Length { get; }
public string PhysicalPath { get; } = null!;
public string Name { get; }
public DateTimeOffset LastModified { get; } = DateTimeOffset.FromUnixTimeSeconds(0);
public bool IsDirectory => false;
public Stream CreateReadStream()
=> File.OpenRead(_filePath);
}
// This is never used by BlazorWebView or WebViewManager
private sealed class iOSMauiAssetDirectoryContents : IDirectoryContents
{
public iOSMauiAssetDirectoryContents(string filePath)
{
}
public bool Exists => false;
public IEnumerator<IFileInfo> GetEnumerator()
=> throw new NotImplementedException();
IEnumerator IEnumerable.GetEnumerator()
=> throw new NotImplementedException();
}
}
}

Просмотреть файл

@ -1,391 +0,0 @@
// 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;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.FileSystemGlobbing;
using Microsoft.Extensions.Primitives;
namespace Microsoft.AspNetCore.Components.WebView.WebView2.Tmp
{
internal sealed class ManifestStaticWebAssetFileProvider : IFileProvider
{
private static readonly StringComparison _fsComparison = OperatingSystem.IsWindows() ?
StringComparison.OrdinalIgnoreCase :
StringComparison.Ordinal;
private static readonly IEqualityComparer<IFileInfo> _nameComparer = new FileNameComparer();
private readonly IFileProvider[] _fileProviders;
private readonly StaticWebAssetNode _root;
public ManifestStaticWebAssetFileProvider(StaticWebAssetManifest manifest, Func<string, IFileProvider> fileProviderFactory)
{
_fileProviders = new IFileProvider[manifest.ContentRoots.Length];
for (int i = 0; i < manifest.ContentRoots.Length; i++)
{
_fileProviders[i] = fileProviderFactory(manifest.ContentRoots[i]);
}
_root = manifest.Root;
}
public IDirectoryContents GetDirectoryContents(string subpath)
{
if (subpath == null)
{
throw new ArgumentNullException(nameof(subpath));
}
var segments = Normalize(subpath).Split('/', StringSplitOptions.RemoveEmptyEntries);
var candidate = _root;
// Iterate over the path segments until we reach the destination. Whenever we encounter
// a pattern, we start tracking it as well as the content root directory. On every segment
// we evalutate the directory to see if there is a subfolder with the current segment and
// replace it on the dictionary if it exists or remove it if it does not.
// When we reach our destination we enumerate the files in that folder and evalute them against
// the pattern to compute the final list.
HashSet<IFileInfo> files = null;
for (var i = 0; i < segments.Length; i++)
{
files = GetFilesForCandidatePatterns(segments, candidate, files);
if (candidate.HasChildren() && candidate.Children.TryGetValue(segments[i], out var child))
{
candidate = child;
}
else
{
candidate = null;
break;
}
}
if ((candidate == null || (!candidate.HasChildren() && !candidate.HasPatterns())) && files == null)
{
return NotFoundDirectoryContents.Singleton;
}
else
{
// We do this to make sure we account for the patterns on the last segment which are not covered by the loop above
files = GetFilesForCandidatePatterns(segments, candidate, files);
if (candidate != null && candidate.HasChildren())
{
files ??= new(_nameComparer);
GetCandidateFilesForNode(candidate, files);
}
return new StaticWebAssetsDirectoryContents((files as IEnumerable<IFileInfo>) ?? Array.Empty<IFileInfo>());
}
HashSet<IFileInfo> GetFilesForCandidatePatterns(string[] segments, StaticWebAssetNode candidate, HashSet<IFileInfo> files)
{
if (candidate != null && candidate.HasPatterns())
{
var depth = candidate.Patterns[0].Depth;
var candidateDirectoryPath = string.Join('/', segments[depth..]);
foreach (var pattern in candidate.Patterns)
{
var contentRoot = _fileProviders[pattern.ContentRoot];
var matcher = new Matcher(_fsComparison);
matcher.AddInclude(pattern.Pattern);
foreach (var result in contentRoot.GetDirectoryContents(candidateDirectoryPath))
{
var fileCandidate = string.IsNullOrEmpty(candidateDirectoryPath) ? result.Name : $"{candidateDirectoryPath}/{result.Name}";
if (result.Exists && (result.IsDirectory || matcher.Match(fileCandidate).HasMatches))
{
files ??= new(_nameComparer);
if (!files.Contains(result))
{
// Multiple patterns might match the same file (even at different locations on disk) at runtime. We don't
// try to disambiguate anything here, since there is already a build step for it. We just pick the first
// file that matches the pattern. The manifest entries are ordered, so while this choice is random, it is
// nonetheless deterministic.
files.Add(result);
}
}
}
}
}
return files;
}
void GetCandidateFilesForNode(StaticWebAssetNode candidate, HashSet<IFileInfo> files)
{
foreach (var child in candidate.Children!)
{
var match = child.Value.Match;
if (match == null)
{
// This is a folder
var file = new StaticWebAssetsDirectoryInfo(child.Key);
// Entries from the manifest always win over any content based on patterns,
// so remove any potentially existing file or folder in favor of the manifest
// entry.
files.Remove(file);
files.Add(file);
}
else
{
// This is a file.
files.RemoveWhere(f => string.Equals(match.Path, f.Name, _fsComparison));
var file = _fileProviders[match.ContentRoot].GetFileInfo(match.Path);
files.Add(string.Equals(child.Key, match.Path, _fsComparison) ? file :
// This means that this file was mapped, there is a chance that we added it to the list
// of files by one of the patterns, so we need to replace it with the mapped file.
new StaticWebAssetsFileInfo(child.Key, file));
}
}
}
}
private string Normalize(string path)
{
return path.Replace('\\', '/');
}
public IFileInfo GetFileInfo(string subpath)
{
if (subpath == null)
{
throw new ArgumentNullException(nameof(subpath));
}
var segments = subpath.Split('/', StringSplitOptions.RemoveEmptyEntries);
StaticWebAssetNode candidate = _root;
List<StaticWebAssetPattern> patterns = null;
// Iterate over the path segments until we reach the destination, collecting
// all pattern candidates along the way except for any pattern at the root.
for (var i = 0; i < segments.Length; i++)
{
if (candidate.HasPatterns())
{
patterns ??= new();
patterns.AddRange(candidate.Patterns);
}
if (candidate.HasChildren() && candidate.Children.TryGetValue(segments[i], out var child))
{
candidate = child;
}
else
{
candidate = null;
break;
}
}
var match = candidate?.Match;
if (match != null)
{
// If we found a file, that wins over anything else. If there are conflicts with files added after
// we've built the manifest, we'll be notified the next time we do a build. This is not different
// from previous Static Web Assets versions.
var file = _fileProviders[match.ContentRoot].GetFileInfo(match.Path);
if (!file.Exists || string.Equals(subpath, Normalize(match.Path), _fsComparison))
{
return file;
}
else
{
return new StaticWebAssetsFileInfo(segments[^1], file);
}
}
// The list of patterns is ordered by pattern depth, so we compute the string to check for patterns only
// once per level. We don't aim to solve conflicts here where multiple files could match a given path,
// we have a build check that takes care of that.
var currentDepth = 0;
var candidatePath = subpath;
if (patterns != null)
{
for (var i = 0; i < patterns.Count; i++)
{
var pattern = patterns[i];
if (pattern.Depth != currentDepth)
{
currentDepth = pattern.Depth;
candidatePath = string.Join('/', segments[currentDepth..]);
}
var result = _fileProviders[pattern.ContentRoot].GetFileInfo(candidatePath);
if (result.Exists)
{
if (!result.IsDirectory)
{
var matcher = new Matcher();
matcher.AddInclude(pattern.Pattern);
if (!matcher.Match(candidatePath).HasMatches)
{
continue;
}
return result;
}
}
}
}
return new NotFoundFileInfo(subpath);
}
public IChangeToken Watch(string filter) => NullChangeToken.Singleton;
private sealed class StaticWebAssetsDirectoryContents : IDirectoryContents
{
private readonly IEnumerable<IFileInfo> _files;
public StaticWebAssetsDirectoryContents(IEnumerable<IFileInfo> files) =>
_files = files;
public bool Exists => true;
public IEnumerator<IFileInfo> GetEnumerator() => _files.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
private sealed class StaticWebAssetsDirectoryInfo : IFileInfo
{
private static readonly DateTimeOffset _lastModified = DateTimeOffset.FromUnixTimeSeconds(0);
public StaticWebAssetsDirectoryInfo(string name)
{
Name = name;
}
public bool Exists => true;
public long Length => 0;
public string PhysicalPath => null;
public DateTimeOffset LastModified => _lastModified;
public bool IsDirectory => true;
public string Name { get; }
public Stream CreateReadStream() => throw new InvalidOperationException("Can not create a stream for a directory.");
}
private sealed class StaticWebAssetsFileInfo : IFileInfo
{
private readonly IFileInfo _source;
public StaticWebAssetsFileInfo(string name, IFileInfo source)
{
Name = name;
_source = source;
}
public bool Exists => _source.Exists;
public long Length => _source.Length;
public string PhysicalPath => _source.PhysicalPath;
public DateTimeOffset LastModified => _source.LastModified;
public bool IsDirectory => _source.IsDirectory;
public string Name { get; }
public Stream CreateReadStream() => _source.CreateReadStream();
}
private sealed class FileNameComparer : IEqualityComparer<IFileInfo>
{
public bool Equals(IFileInfo x, IFileInfo y) => string.Equals(x?.Name, y?.Name, _fsComparison);
public int GetHashCode(IFileInfo obj) => obj.Name.GetHashCode(_fsComparison);
}
internal sealed class StaticWebAssetManifest
{
internal static readonly StringComparer PathComparer =
OperatingSystem.IsWindows() ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal;
public string[] ContentRoots { get; set; } = Array.Empty<string>();
public StaticWebAssetNode Root { get; set; } = null!;
internal static StaticWebAssetManifest Parse(Stream manifest)
{
return JsonSerializer.Deserialize<StaticWebAssetManifest>(manifest)!;
}
}
internal sealed class StaticWebAssetNode
{
[JsonPropertyName("Asset")]
public StaticWebAssetMatch Match { get; set; }
[JsonConverter(typeof(OSBasedCaseConverter))]
public Dictionary<string, StaticWebAssetNode> Children { get; set; }
public StaticWebAssetPattern[] Patterns { get; set; }
[MemberNotNullWhen(true, nameof(Children))]
internal bool HasChildren() => Children != null && Children.Count > 0;
[MemberNotNullWhen(true, nameof(Patterns))]
internal bool HasPatterns() => Patterns != null && Patterns.Length > 0;
}
internal sealed class StaticWebAssetMatch
{
[JsonPropertyName("ContentRootIndex")]
public int ContentRoot { get; set; }
[JsonPropertyName("SubPath")]
public string Path { get; set; } = null!;
}
internal sealed class StaticWebAssetPattern
{
[JsonPropertyName("ContentRootIndex")]
public int ContentRoot { get; set; }
public int Depth { get; set; }
public string Pattern { get; set; } = null!;
}
private sealed class OSBasedCaseConverter : JsonConverter<Dictionary<string, StaticWebAssetNode>>
{
public override Dictionary<string, StaticWebAssetNode> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return new Dictionary<string, StaticWebAssetNode>(
JsonSerializer.Deserialize<IDictionary<string, StaticWebAssetNode>>(ref reader, options)!,
StaticWebAssetManifest.PathComparer);
}
public override void Write(Utf8JsonWriter writer, Dictionary<string, StaticWebAssetNode> value, JsonSerializerOptions options)
{
JsonSerializer.Serialize(writer, value, options);
}
}
}
}

Просмотреть файл

@ -1,4 +1,5 @@
// Copyright (c) .NET Foundation. All rights reserved.
#nullable disable
// 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;
@ -9,132 +10,20 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebView.WebView2.Tmp;
using Microsoft.Extensions.FileProviders;
namespace Microsoft.AspNetCore.Components.WebView.WebView2.Internal
{
internal class StaticContentProvider
internal partial class StaticContentProvider
{
private readonly IFileProvider _fileProvider;
private readonly Uri _appBaseUri;
private readonly string _hostPageRelativePath;
private static readonly FileExtensionContentTypeProvider ContentTypeProvider = new();
private static readonly ManifestEmbeddedFileProvider _manifestProvider =
new ManifestEmbeddedFileProvider(typeof(WebViewManager).Assembly);
public static StaticContentProvider ResolveFromStaticWebAssetsManifest(IFileProvider fileProvider, Uri uri, string hostPageRelativePath)
{
var assembly = Assembly.GetEntryAssembly();
if (string.IsNullOrEmpty(assembly?.Location))
{
return null;
}
var name = Path.GetFileNameWithoutExtension(assembly.Location);
var manifestPath = Path.Combine(Path.GetDirectoryName(assembly.Location)!, $"{name}.staticwebassets.runtime.json");
if (!File.Exists(manifestPath))
{
return null;
}
using var stream = File.OpenRead(Path.Combine(Path.GetDirectoryName(assembly.Location)!, $"{name}.staticwebassets.runtime.json"));
var manifest = ManifestStaticWebAssetFileProvider.StaticWebAssetManifest.Parse(stream);
var provider = new ManifestStaticWebAssetFileProvider(manifest, (p) => new PhysicalFileProvider(p));
return new StaticContentProvider(provider, uri, hostPageRelativePath);
}
public StaticContentProvider(IFileProvider fileProvider, Uri appBaseUri, string hostPageRelativePath)
{
_fileProvider = fileProvider ?? throw new ArgumentNullException(nameof(fileProvider));
_appBaseUri = appBaseUri ?? throw new ArgumentNullException(nameof(appBaseUri));
_hostPageRelativePath = hostPageRelativePath ?? throw new ArgumentNullException(nameof(hostPageRelativePath));
}
public bool TryGetResponseContent(string requestUri, bool allowFallbackOnHostPage, out int statusCode, out string statusMessage, out Stream content, out IDictionary<string, string> headers)
{
var fileUri = new Uri(requestUri);
if (_appBaseUri.IsBaseOf(fileUri))
{
var relativePath = _appBaseUri.MakeRelativeUri(fileUri).ToString();
// Content in the file provider takes first priority
// Next we may fall back on supplying the host page to support deep linking
// If there's no match, fall back on serving embedded framework content
string contentType;
var found = TryGetFromFileProvider(relativePath, out content, out contentType)
|| (allowFallbackOnHostPage && TryGetFromFileProvider(_hostPageRelativePath, out content, out contentType))
|| TryGetFrameworkFile(relativePath, out content, out contentType);
if (found)
{
statusCode = 200;
statusMessage = "OK";
headers = GetResponseHeaders(contentType);
}
else
{
content = new MemoryStream(Encoding.UTF8.GetBytes($"There is no content at {relativePath}"));
statusCode = 404;
statusMessage = "Not found";
headers = GetResponseHeaders("text/plain");
}
// Always respond to requests within the base URI, even if there's no matching file
return true;
}
else
{
// URL isn't within application base path, so let the network handle it
statusCode = default;
statusMessage = default;
headers = default;
content = default;
return false;
}
}
private bool TryGetFromFileProvider(string relativePath, out Stream content, out string contentType)
{
if (!string.IsNullOrEmpty(relativePath))
{
var fileInfo = _fileProvider.GetFileInfo(relativePath);
if (fileInfo.Exists)
{
content = fileInfo.CreateReadStream();
contentType = GetResponseContentTypeOrDefault(fileInfo.Name);
return true;
}
}
content = default;
contentType = default;
return false;
}
private static bool TryGetFrameworkFile(string relativePath, out Stream content, out string contentType)
{
// We're not trying to simulate everything a real webserver does. We don't need to
// support querystring parameters, for example. It's enough to require an exact match.
var file = _manifestProvider.GetFileInfo(relativePath);
if (file.Exists)
{
content = file.CreateReadStream();
contentType = GetResponseContentTypeOrDefault(relativePath);
return true;
}
content = default;
contentType = default;
return false;
}
private static string GetResponseContentTypeOrDefault(string path)
internal static string GetResponseContentTypeOrDefault(string path)
=> ContentTypeProvider.TryGetContentType(path, out var matchedContentType)
? matchedContentType
: "application/octet-stream";
private static IDictionary<string, string> GetResponseHeaders(string contentType)
internal static IDictionary<string, string> GetResponseHeaders(string contentType)
=> new Dictionary<string, string>()
{
{ "Content-Type", contentType },

Просмотреть файл

@ -6,8 +6,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.WebView.WebView2.Internal;
using Microsoft.AspNetCore.Components.WebView.WebView2.Tmp;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.FileProviders;
namespace Microsoft.AspNetCore.Components.WebView.WebView2
@ -24,7 +23,6 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
private const string AppOrigin = "https://0.0.0.0/";
private readonly IWebView2Wrapper _webview;
private readonly StaticContentProvider _staticContentProvider = null;
private readonly Task _webviewReadyTask;
/// <summary>
@ -35,11 +33,10 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
/// <param name="dispatcher">A <see cref="Dispatcher"/> instance that can marshal calls to the required thread or sync context.</param>
/// <param name="fileProvider">Provides static content to the webview.</param>
/// <param name="hostPageRelativePath">Path to the host page within the <paramref name="fileProvider"/>.</param>
public WebView2WebViewManager(IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, hostPageRelativePath)
public WebView2WebViewManager(IWebView2Wrapper webview, IServiceProvider services, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string hostPageRelativePath)
: base(services, dispatcher, new Uri(AppOrigin), fileProvider, jsComponents, hostPageRelativePath)
{
_webview = webview ?? throw new ArgumentNullException(nameof(webview));
_staticContentProvider = StaticContentProvider.ResolveFromStaticWebAssetsManifest(fileProvider, new Uri(AppOrigin), hostPageRelativePath);
// Unfortunately the CoreWebView2 can only be instantiated asynchronously.
// We want the external API to behave as if initalization is synchronous,
@ -77,7 +74,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Document ||
eventArgs.ResourceContext == CoreWebView2WebResourceContextWrapper.Other; // e.g., dev tools requesting page source
if (TryGetResponseContentNewManifest(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers))
if (TryGetResponseContent(eventArgs.Request.Uri, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers))
{
var headerString = GetHeaderString(headers);
eventArgs.SetResponse(content, statusCode, statusMessage, headerString);
@ -135,8 +132,5 @@ namespace Microsoft.AspNetCore.Components.WebView.WebView2
}
});
}
private bool TryGetResponseContentNewManifest(string uri, bool allowFallbackOnHostPage, out int statusCode, out string statusMessage, out Stream content, out IDictionary<string, string> headers) =>
_staticContentProvider.TryGetResponseContent(uri, allowFallbackOnHostPage, out statusCode, out statusMessage, out content, out headers);
}
}

Просмотреть файл

@ -7,7 +7,9 @@ using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.Extensions.FileProviders;
using WebView2Control = Microsoft.Web.WebView2.WinForms.WebView2;
@ -17,7 +19,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WindowsForms
/// <summary>
/// A Windows Forms control for hosting Blazor web components locally in Windows desktop applications.
/// </summary>
public class BlazorWebView : ContainerControl, IDisposable
public class BlazorWebView : ContainerControl
{
private readonly WebView2Control _webview;
private WebView2WebViewManager _webviewManager;
@ -108,7 +110,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WindowsForms
private void OnServicesPropertyChanged() => StartWebViewCoreIfPossible();
private bool IsAncestorSiteInDesignMode =>
private bool IsAncestorSiteInDesignMode2 =>
GetSitedParentSite(this) is ISite parentSite && parentSite.DesignMode;
private ISite GetSitedParentSite(Control control) =>
@ -128,7 +130,7 @@ namespace Microsoft.AspNetCore.Components.WebView.WindowsForms
{
// We never start the Blazor code in design time because it doesn't make sense to run
// a Blazor component in the designer.
if (!IsAncestorSiteInDesignMode && (!RequiredStartupPropertiesSet || _webviewManager != null))
if (!IsAncestorSiteInDesignMode2 && (!RequiredStartupPropertiesSet || _webviewManager != null))
{
return;
}
@ -139,7 +141,8 @@ namespace Microsoft.AspNetCore.Components.WebView.WindowsForms
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage);
var fileProvider = new PhysicalFileProvider(contentRootDir);
_webviewManager = new WebView2WebViewManager(new WindowsFormsWebView2Wrapper(_webview), Services, Dispatcher, fileProvider, hostPageRelativePath);
var jsComponents = new JSComponentConfigurationStore();
_webviewManager = new WebView2WebViewManager(new WindowsFormsWebView2Wrapper(_webview), Services, Dispatcher, fileProvider, jsComponents, hostPageRelativePath);
foreach (var rootComponent in RootComponents)
{
// Since the page isn't loaded yet, this will always complete synchronously
@ -177,9 +180,16 @@ namespace Microsoft.AspNetCore.Components.WebView.WindowsForms
{
if (disposing)
{
// Dispose this component's contents before calling base.Dispose() because that will dispose the WebView2 control, likely
// preventing user-written disposal logic from working (because it might try to use Blazor stuff, which wouldn't work anymore).
_webviewManager?.Dispose();
// Dispose this component's contents and block on completion so that user-written disposal logic and
// Blazor disposal logic will complete first. Then call base.Dispose(), which will dispose the WebView2
// control. This order is critical because once the WebView2 is disposed it will prevent and Blazor
// code from working because it requires the WebView to exist.
_webviewManager?
.DisposeAsync()
.AsTask()
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
}
base.Dispose(disposing);
}

Просмотреть файл

@ -20,4 +20,8 @@
<ProjectReference Include="..\WebView2\Microsoft.AspNetCore.Components.WebView.WebView2.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="build\**" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" Pack="true" PackagePath="build\" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,2 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

Просмотреть файл

@ -0,0 +1,18 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StaticWebAssetBasePath>/</StaticWebAssetBasePath>
<StaticWebAssetProjectMode>Root</StaticWebAssetProjectMode>
<CoreCompileDependsOn Condition="'$(PublishProtocol)' == 'ClickOnce'">$(CoreCompileDependsOn);StaticWebAssetsPrepareForRun</CoreCompileDependsOn>
</PropertyGroup>
<Target Name="AddStaticWebAssetsForClickOnce" AfterTargets="ComputeFilesToPublish" Condition="'$(PublishProtocol)' == 'ClickOnce'">
<ComputeStaticWebAssetsTargetPaths Assets="@(StaticWebAsset)" PathPrefix="wwwroot">
<Output TaskParameter="AssetsWithTargetPath" ItemName="_ClickOnceAssetCandidate" />
</ComputeStaticWebAssetsTargetPaths>
<ItemGroup>
<ContentWithTargetPath Include="@(_ClickOnceAssetCandidate)" KeepMetadata="TargetPath" />
</ItemGroup>
</Target>
</Project>

Просмотреть файл

@ -7,8 +7,10 @@ using System.Collections.Specialized;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebView.WebView2;
using Microsoft.Extensions.FileProviders;
using WebView2Control = Microsoft.Web.WebView2.Wpf.WebView2;
@ -18,7 +20,7 @@ namespace Microsoft.AspNetCore.Components.WebView.Wpf
/// <summary>
/// A Windows Presentation Foundation (WPF) control for hosting Blazor web components locally in Windows desktop applications.
/// </summary>
public class BlazorWebView : Control, IDisposable
public class BlazorWebView : Control, IAsyncDisposable
{
#region Dependency property definitions
/// <summary>
@ -155,7 +157,8 @@ namespace Microsoft.AspNetCore.Components.WebView.Wpf
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage);
var fileProvider = new PhysicalFileProvider(contentRootDir);
_webviewManager = new WebView2WebViewManager(new WpfWebView2Wrapper(_webview), Services, WpfDispatcher.Instance, fileProvider, hostPageRelativePath);
var jsComponents = new JSComponentConfigurationStore();
_webviewManager = new WebView2WebViewManager(new WpfWebView2Wrapper(_webview), Services, WpfDispatcher.Instance, fileProvider, jsComponents, hostPageRelativePath);
foreach (var rootComponent in RootComponents)
{
// Since the page isn't loaded yet, this will always complete synchronously
@ -190,42 +193,6 @@ namespace Microsoft.AspNetCore.Components.WebView.Wpf
}
}
private void Dispose(bool disposing)
{
if (!_isDisposed)
{
if (disposing)
{
// Dispose managed state (managed objects)
_webviewManager?.Dispose();
_webview?.Dispose();
}
// Also: free unmanaged resources (unmanaged objects) and override finalizer
// Also: set large fields to null
_isDisposed = true;
}
}
/// <summary>
/// Performs the final cleanup before the garbage collector destroys the object.
/// </summary>
~BlazorWebView()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: false);
}
/// <summary>
/// Releases all resources used by the control.
/// </summary>
public void Dispose()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
private void CheckDisposed()
{
if (_isDisposed)
@ -233,5 +200,38 @@ namespace Microsoft.AspNetCore.Components.WebView.Wpf
throw new ObjectDisposedException(GetType().Name);
}
}
protected virtual async ValueTask DisposeAsyncCore()
{
// Dispose this component's contents that user-written disposal logic and Blazor disposal logic will complete
// first. Then dispose the WebView2 control. This order is critical because once the WebView2 is disposed it
// will prevent and Blazor code from working because it requires the WebView to exist.
if (_webviewManager != null)
{
await _webviewManager.DisposeAsync()
.ConfigureAwait(false);
_webviewManager = null;
}
_webview?.Dispose();
_webview = null;
}
public async ValueTask DisposeAsync()
{
if (_isDisposed)
{
return;
}
_isDisposed = true;
// Perform async cleanup.
await DisposeAsyncCore();
#pragma warning disable CA1816 // Dispose methods should call SuppressFinalize
// Suppress finalization.
GC.SuppressFinalize(this);
#pragma warning restore CA1816 // Dispose methods should call SuppressFinalize
}
}
}

Просмотреть файл

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Use TargetFrameworks (plural) instead of TargetFramework (singular) here even though there is only one target
@ -20,4 +20,8 @@
<ProjectReference Include="..\WebView2\Microsoft.AspNetCore.Components.WebView.WebView2.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="build\**" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" Pack="true" PackagePath="build\" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,2 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

Просмотреть файл

@ -0,0 +1,18 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<StaticWebAssetBasePath>/</StaticWebAssetBasePath>
<StaticWebAssetProjectMode>Root</StaticWebAssetProjectMode>
<CoreCompileDependsOn Condition="'$(PublishProtocol)' == 'ClickOnce'">$(CoreCompileDependsOn);StaticWebAssetsPrepareForRun</CoreCompileDependsOn>
</PropertyGroup>
<Target Name="AddStaticWebAssetsForClickOnce" AfterTargets="ComputeFilesToPublish" Condition="'$(PublishProtocol)' == 'ClickOnce'">
<ComputeStaticWebAssetsTargetPaths Assets="@(StaticWebAsset)" PathPrefix="wwwroot">
<Output TaskParameter="AssetsWithTargetPath" ItemName="_ClickOnceAssetCandidate" />
</ComputeStaticWebAssetsTargetPaths>
<ItemGroup>
<ContentWithTargetPath Include="@(_ClickOnceAssetCandidate)" KeepMetadata="TargetPath" />
</ItemGroup>
</Target>
</Project>

Просмотреть файл

@ -1,29 +1,22 @@
<Project Sdk="MSBuild.Sdk.Extras">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Android AppLinks support for Xamarin.Forms</Description>
<TargetFramework>net6.0-android</TargetFramework>
<AssemblyName>Microsoft.Maui.Controls.Compatibility.Android.AppLinks</AssemblyName>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>$(AndroidTargetFrameworks)</TargetFrameworks>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<RootNamespace>Microsoft.Maui.Controls.Compatibility.Android.AppLinks</RootNamespace>
<IsPackable>false</IsPackable>
<Nullable>disable</Nullable>
<NoWarn>0618</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)'=='Debug' ">
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Remove="Resources\values\Strings.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values\Strings.xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Firebase.AppIndexing" Version="119.1.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'MonoAndroid10.0'">
<ProjectReference Include="..\..\..\Controls\src\Core\Controls.Core.csproj" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" />
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" />
</ItemGroup>
</Project>
<ItemGroup>
<ProjectReference Include="..\..\..\Controls\src\Core\Controls.Core-net6.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -1,44 +0,0 @@
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.
For example, a sample Android app that contains a user interface layout (main.axml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:
Resources/
drawable/
icon.png
layout/
main.axml
values/
strings.xml
In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called "R"
(this is an Android convention) that contains the tokens for each one of the resources
included. For example, for the above Resources layout, this is what the R class would expose:
public class R {
public class drawable {
public const int icon = 0x123;
}
public class layout {
public const int main = 0x456;
}
public class strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
to reference the layout/main.axml file, or R.strings.first_string to reference the first
string in the dictionary file values/strings.xml.

Просмотреть файл

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="library_name">Xamarin.Forms.Platform.Android.AppLinks</string>
</resources>

Просмотреть файл

@ -1,343 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Condition="'$(EnvironmentBuildPropsImported)' != 'True'" Project="..\..\..\..\..\eng\Environment.Build.props" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{BB933AF2-9498-4C4E-9F76-AF66A550BED3}</ProjectGuid>
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<TargetFramework>net6.0-android</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>Microsoft.Maui.Controls.Compatibility.ControlGallery.Android</RootNamespace>
<AssemblyName>Microsoft.Maui.Controls.Compatibility.ControlGallery.Android</AssemblyName>
<FileAlignment>512</FileAlignment>
<AndroidApplication>true</AndroidApplication>
<AndroidUseIntermediateDesignerFile>true</AndroidUseIntermediateDesignerFile>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<AndroidTargetFrameworkVersion Condition="'$(AndroidTargetFrameworkVersion)' == ''">v11.0</AndroidTargetFrameworkVersion>
<TargetFrameworkVersion>$(AndroidTargetFrameworkVersion)</TargetFrameworkVersion>
<AndroidManifest Condition="$(AndroidTargetFrameworkVersion) == 'v11.0'">Properties\AndroidManifest.xml</AndroidManifest>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<AndroidEnableMultiDex>true</AndroidEnableMultiDex>
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<IsPackable>false</IsPackable>
<Nullable>disable</Nullable>
<!--<DefineConstants>$(DefineConstants);HAVE_OPENTK</DefineConstants>-->
<AndroidLinkMode>None</AndroidLinkMode>
<NoWarn>IL2036;0618</NoWarn>
</PropertyGroup>
<!--
default locally to using fast renderers but if we're running on CI don't set a value for ANDROID_RENDERERS.
This will let the old and new yaml configurations coexist
-->
<PropertyGroup>
<!-- default locally to using fast renderers but if we're running on CI don't set a value for ANDROID_RENDERERS.
This will let the old and new yaml configurations coexist -->
<ANDROID_RENDERERS Condition="'$(ANDROID_RENDERERS)' == ''">FAST</ANDROID_RENDERERS>
<DefineConstants Condition="'$(ANDROID_RENDERERS)' == 'FAST'">$(DefineConstants)</DefineConstants>
<DefineConstants Condition="'$(ANDROID_RENDERERS)' == 'LEGACY'">$(DefineConstants);LEGACY_RENDERERS</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DefineConstants>$(DefineConstants);HAVE_OPENTK;ENABLE_TEST_CLOUD</DefineConstants>
<DefineConstants>$(DefineConstants);ENABLE_TEST_CLOUD</DefineConstants>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>$(MSBuildThisFileDirectory)../../../../../eng/debug.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>android</AndroidSigningStorePass>
<AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>android</AndroidSigningKeyPass>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>$(DefineConstants);TRACE;DEBUG;HAVE_OPENTK</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidLinkMode>None</AndroidLinkMode>
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
<AndroidSupportedAbis>armeabi-v7a;x86</AndroidSupportedAbis>
<Debugger>Xamarin</Debugger>
<DevInstrumentationEnabled>True</DevInstrumentationEnabled>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>$(DefineConstants);TRACE;HAVE_OPENTK</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidLinkMode>SdkOnly</AndroidLinkMode>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AndroidDexTool>d8</AndroidDexTool>
<AndroidLinkTool>r8</AndroidLinkTool>
<AndroidEnableMultiDex>false</AndroidEnableMultiDex>
</PropertyGroup>
<PropertyGroup Condition="'$(CI)' == 'true'">
<AndroidLinkMode>Full</AndroidLinkMode>
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<AndroidSupportedAbis>armeabi-v7a,x86</AndroidSupportedAbis>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Mono.Android" />
<Reference Include="Mono.Android.Export" />
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Xml" />
<Reference Include="OpenTK-1.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="Activity1.cs" />
<Compile Include="AttachedStateEffectRenderer.cs" />
<Compile Include="BorderEffect.cs" />
<Compile Include="BrokenNativeControl.cs" />
<Compile Include="CacheService.cs" />
<Compile Include="DrawableExtensions.cs" />
<Compile Include="DisposeLabelRenderer.cs" />
<Compile Include="DisposePageRenderer.cs" />
<Compile Include="FormsAppCompatActivity.cs" />
<Compile Include="Issue10182Activity.cs" />
<Compile Include="MainApplication.cs" />
<Compile Include="MultiWindowService.cs" />
<Compile Include="PerformanceTrackerRenderer.cs" />
<Compile Include="PlatformSpecificCoreGalleryFactory.cs" />
<Compile Include="Tests\TestingPlatformService.cs" />
<Compile Include="Tests\PlatformTestSettings.cs" />
<Compile Include="PreApplicationClassActivity.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RegistrarValidationService.cs" />
<Compile Include="CustomRenderers.cs" />
<Compile Include="ColorPicker.cs" />
<Compile Include="SampleNativeControl.cs" />
<Compile Include="StaggeredCollectionViewRenderer.cs" />
<Compile Include="TestCloudService.cs" />
<Compile Include="_1909CustomRenderer.cs" />
<Compile Include="_2489CustomRenderer.cs" />
<Compile Include="_38989CustomRenderer.cs" />
<Compile Include="BrokenImageSourceHandler.cs" />
<Compile Include="_50787CustomRenderer.cs" />
<Compile Include="_57114CustomRenderer.cs" />
<Compile Include="_5749CustomRenderer.cs" />
<Compile Include="_58406EffectRenderer.cs" />
<Compile Include="_59457CustomRenderer.cs" />
<Compile Include="_60122ImageRenderer.cs" />
<Compile Include="ContentDescriptionEffectRenderer.cs" />
<Compile Include="..\Core\GalleryPages\OpenGLGalleries\AdvancedOpenGLGallery.cs">
<Link>GalleryPages\AdvancedOpenGLGallery.cs</Link>
</Compile>
<Compile Include="ApiLabelRenderer.cs" />
<Compile Include="Issue7249SwitchRenderer.cs" />
<Compile Include="_9087CustomRenderer.cs" />
<Compile Include="_10940CustomRenderer.cs" />
<Compile Include="RippleEffect.cs" />
<Compile Include="_12484CustomRenderer.cs" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Assets\default.css" />
<AndroidResource Include="Resources\drawable\bank.png" />
<AndroidResource Include="Resources\drawable\crimson.jpg" />
<AndroidResource Include="Resources\drawable\oasis.jpg" />
<AndroidResource Include="Resources\drawable\cover1small.jpg" />
<AndroidResource Include="Resources\drawable\crimsonsmall.jpg" />
<AndroidResource Include="Resources\drawable\oasissmall.jpg" />
<AndroidResource Include="Resources\drawable\calculator.png" />
<AndroidResource Include="Resources\drawable\seth.png" />
<AndroidResource Include="Resources\drawable\menuIcon.png" />
<AndroidResource Include="Resources\drawable\photo.jpg" />
<AndroidAsset Include="Assets\WebImages\XamarinLogo.png" />
<AndroidAsset Include="Assets\local.html" />
<AndroidResource Include="Resources\values\Colors.xml" />
<AndroidResource Include="Resources\layout\NativeAndroidCell.axml" />
<AndroidResource Include="Resources\layout\NativeAndroidListViewCell.axml" />
<AndroidResource Include="Resources\drawable\CustomSelector.xml" />
<AndroidResource Include="Resources\drawable\CustomSelector2.xml" />
<AndroidResource Include="Resources\drawable\FlowerBuds.jpg" />
<AndroidResource Include="Resources\drawable\Fruits.jpg" />
<AndroidResource Include="Resources\drawable\Legumes.jpg" />
<AndroidResource Include="Resources\drawable\Vegetables.jpg" />
<AndroidResource Include="Resources\values\styles.xml" />
<AndroidResource Include="Resources\drawable\coffee.png" />
<AndroidResource Include="Resources\drawable\toolbar_close.png" />
<AndroidResource Include="Resources\drawable\test.jpg" />
<AndroidResource Include="Resources\drawable\invalidimage.jpg" />
<AndroidResource Include="Resources\values\strings.xml" />
<AndroidResource Include="Resources\drawable\icon_search.png" />
<AndroidResource Include="Resources\drawable\icon_bookmark.png" />
<AndroidResource Include="Resources\drawable\button_add.png" />
<AndroidResource Include="Resources\drawable\gamesflyout.png" />
<AndroidResource Include="Resources\drawable\filmflyout.png" />
<AndroidResource Include="Resources\drawable\headphoneflyout.png" />
<AndroidResource Include="Resources\drawable\newspaperflyout.png" />
<AndroidResource Include="Resources\drawable\booksflyout.png" />
<AndroidResource Include="Resources\drawable\homeflyout.png" />
<AndroidResource Include="Resources\drawable\xamarinlogo.png" />
<AndroidResource Include="Resources\drawable\cardBackground.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\Icon.png" />
<AndroidResource Include="Resources\drawable\cover1.jpg" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Compatibility\Maps\src\Android\Compatibility.Maps.Android.csproj">
<Project>{1d11ec11-4734-47d4-9b62-4d03cff67090}</Project>
<Name>Compatibility.Maps.Android</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Controls\Maps\src\Controls.Maps.csproj">
<Project>{f137fac5-3385-4b19-988b-4a14ed84ccc6}</Project>
<Name>Controls.Maps</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj">
<Project>{2964f669-7cd9-4d78-b4d9-804a965d58c0}</Project>
<Name>Controls.CustomAttributes</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Core\src\Core.csproj">
<Project>{29913989-0f70-48d8-8ede-b1dd217f21d1}</Project>
<Name>Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Android.AppLinks\src\Compatibility.Android.AppLinks.csproj">
<Project>{10553575-8e27-4e2c-9e88-90b015e80f1c}</Project>
<Name>Compatibility.Android.AppLinks</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Core\src\Compatibility.csproj">
<Project>{8e86f0da-ed1c-409e-a7a9-df3e58498620}</Project>
<Name>Compatibility</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Core\tests\Android\Compatibility.Android.UnitTests.csproj">
<Project>{a4c57790-71d1-467c-a69e-2bd84cb6666c}</Project>
<Name>Compatibility.Android.UnitTests</Name>
</ProjectReference>
<ProjectReference Include="..\Core\Compatibility.ControlGallery.Core.csproj">
<Project>{E7D17A14-8399-4139-BDAA-EE4C1A3447FC}</Project>
<Name>Compatibility.ControlGallery.Core</Name>
</ProjectReference>
<ProguardConfiguration Include="..\..\..\..\..\.nuspec\proguard.cfg">
<Link>proguard.cfg</Link>
</ProguardConfiguration>
<ProjectReference Include="..\..\..\Android.FormsViewGroup\src\Compatibility.Android.FormsViewGroup.csproj">
<Project>{3b72465b-acae-43ae-9327-10f372fe5f80}</Project>
<Name>Compatibility.Android.FormsViewGroup</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Controls\src\Core\Controls.Core.csproj">
<Project>{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}</Project>
<Name>Controls.Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\Toolbar.axml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidResource Include="Resources\layout\Tabbar.axml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidResource Include="Resources\layout\Layout38989.axml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<None Include="Properties\AndroidManifest.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\error.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\heart.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\cartman.xml" />
</ItemGroup>
<ItemGroup>
<BundleResource Include="Resources\drawable\caret_r.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\synchronize.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\synchronize_disabled.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\synchronize_enabled.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\anim\enter_from_left.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\anim\enter_from_right.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\anim\exit_to_left.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\anim\exit_to_right.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\red_button.xml" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Assets\test.jpg" />
<AndroidResource Include="Resources\drawable\grid.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\bell.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\loop.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\home.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\games.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\film.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\books.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\headphone.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\newspaper.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\xamarinstore.jpg" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\person.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\card.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\star.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\jet.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\gear.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\mic.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>12.0.3</Version>
</PackageReference>
<PackageReference Include="NUnit">
<Version>3.13.1</Version>
</PackageReference>
<PackageReference Include="Xam.Plugin.DeviceInfo">
<Version>3.0.2</Version>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NUnit" Version="3.13.1" />
<PackageReference Include="Xam.Plugin.DeviceInfo" Version="3.0.2" />
<PackageReference Include="Xamarin.Build.Download" />
<PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" />
<PackageReference Include="Xamarin.AndroidX.Browser" />
@ -345,48 +40,27 @@
<PackageReference Include="Xamarin.AndroidX.Palette" />
<PackageReference Include="Xamarin.Google.Android.Material" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Assets\fonts\ionicons.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</AndroidAsset>
<ProjectReference Include="..\..\..\..\Compatibility\Maps\src\Android\Compatibility.Maps.Android.csproj" />
<ProjectReference Include="..\..\..\..\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj" />
<ProjectReference Include="..\..\..\..\Controls\Maps\src\Controls.Maps-net6.csproj" />
<ProjectReference Include="..\..\..\..\Controls\src\Core\Controls.Core-net6.csproj" />
<ProjectReference Include="..\..\..\..\Core\src\Core-net6.csproj" />
<ProjectReference Include="..\..\..\..\Compatibility\Android.FormsViewGroup\src\Compatibility.Android.FormsViewGroup-net6.csproj" />
<ProjectReference Include="..\..\..\..\Compatibility\Core\src\Compatibility-net6.csproj" />
<ProjectReference Include="..\..\..\..\Compatibility\Android.AppLinks\src\Compatibility.Android.AppLinks.csproj" />
<ProjectReference Include="..\..\..\..\Compatibility\Core\tests\Android\Compatibility.Android.UnitTests.csproj" />
<ProjectReference Include="..\Core\Compatibility.ControlGallery.Core-net6.csproj" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Assets\fonts\icons.xml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
</TransformFile>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\GifOne.gif" />
<Compile Include="..\Core\GalleryPages\OpenGLGalleries\AdvancedOpenGLGallery.cs" Link="GalleryPages\AdvancedOpenGLGallery.cs" />
<ProguardConfiguration Include="..\..\..\..\..\.nuspec\proguard.cfg" />
<AndroidAsset Include="Assets\**" />
<AndroidResource Include="Resources\**" />
<AndroidEnvironment Include="Environment.txt" />
<Compile Include="Properties\MapsKey.cs" Condition="Exists('Properties\MapsKey.cs')" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\GifTwo.gif" />
</ItemGroup>
<ItemGroup>
<LinkDescription Include="LinkDescription.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\rb_unchecked.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\rb_checked.png" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Assets\googlemap.html" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Assets\googlemapsearch.html" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\coffee2.png">
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup Condition="Exists('Properties\MapsKey.cs')">
<Compile Include="Properties\MapsKey.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</Project>

Просмотреть файл

@ -183,14 +183,13 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Android
}
}
public class NativeDroidFlyoutPage : Microsoft.Maui.Controls.Compatibility.Platform.Android.AppCompat.MasterDetailPageRenderer
public class NativeDroidFlyoutPage : FlyoutPageRenderer
{
FlyoutPage _page;
bool _disposed;
public NativeDroidFlyoutPage(Context context) : base(context)
{
System.Diagnostics.Debug.WriteLine($">>>>> NativeDroidMasterDetail NativeDroidMasterDetail 53: This is the obsolete constructor being selected");
}
protected override void OnElementChanged(VisualElement oldElement, VisualElement newElement)

Просмотреть файл

@ -57,11 +57,11 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Android
FormsMaps.Init(this, bundle);
#if ENABLE_TEST_CLOUD
ViewHandler
.ViewMapper[nameof(IView.AutomationId)] = (h, v) =>
ViewHandler.ViewMapper
.Add(nameof(IView.AutomationId), (h, v) =>
{
((global::Android.Views.View)h.NativeView).ContentDescription = v.AutomationId;
};
h.NativeView.ContentDescription = v.AutomationId;
});
#endif
//FormsMaterial.Init(this, bundle);

Просмотреть файл

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="Microsoft.Maui.Controls.Compatibility.ControlGallery.Android">
<namespace fullname="Microsoft.Maui.Controls.Compatibility.ControlGallery.Android.Tests" />
<namespace fullname="Microsoft.Maui.Controls.Compatibility.ControlGallery.Issues" />
<type fullname="*Renderer" />
</assembly>
<assembly fullname="Microsoft.Maui.Controls.Compatibility.ControlGallery">
<namespace fullname="Maui.Controls.Tests" />
<namespace fullname="Maui.Controls.Compatibility.Tests" />
</assembly>
<assembly fullname="nunit.framework"/>
<assembly fullname="mscorlib">
<!-- If we don't preserve these, we can't run async unit tests on the platform -->
<type fullname="System.Runtime.CompilerServices.INotifyCompletion" />
<type fullname="System.Runtime.CompilerServices.TaskAwaiter" />
</assembly>
<assembly fullname="Microsoft.Maui.Controls.Compatibility.Android.UnitTests" />
<assembly fullname="Microsoft.Maui" />
</linker>

Просмотреть файл

@ -6,9 +6,6 @@ using Microsoft.Maui.Controls.Compatibility.ControlGallery.Android;
using Microsoft.Maui.Controls.Compatibility.ControlGallery;
using Microsoft.Maui.Controls.Compatibility;
[assembly: AssemblyTitle("Microsoft.Maui.Controls.ControlGallery.Android")]
[assembly: ComVisible(false)]
// Add some common permissions, these can be removed if not needed
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

Просмотреть файл

@ -1,44 +0,0 @@
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.
For example, a sample Android app that contains a user interface layout (main.axml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:
Resources/
drawable/
icon.png
layout/
main.axml
values/
strings.xml
In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called "R"
(this is an Android convention) that contains the tokens for each one of the resources
included. For example, for the above Resources layout, this is what the R class would expose:
public class R {
public class drawable {
public const int icon = 0x123;
}
public class layout {
public const int main = 0x456;
}
public class strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
to reference the layout/main.axml file, or R.strings.first_string to reference the first
string in the dictionary file values/strings.xml.

Просмотреть файл

@ -4,15 +4,17 @@ using System.Linq;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Controls.ControlGallery.Android;
using Microsoft.Maui.Controls.Compatibility.Platform.Android.AppCompat;
using Microsoft.Maui.Controls.ControlGallery.Issues;
using System.ComponentModel;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Issues;
using Microsoft.Maui.Controls.Platform;
[assembly: ExportRenderer(typeof(Issue5724.CustomButton), typeof(CustomButtonRenderer5724))]
namespace Microsoft.Maui.Controls.ControlGallery.Android
{
public class CustomButtonRenderer5724 :
#if !LEGACY_RENDERERS
Platform.Android.FastRenderers.ButtonRenderer
Compatibility.Platform.Android.FastRenderers.ButtonRenderer
#else
ButtonRenderer
#endif
@ -21,7 +23,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
{
}
protected override void OnElementChanged(Platform.Android.ElementChangedEventArgs<Button> e)
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
}
@ -33,7 +35,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
public class CustomImageRenderer5724 :
#if !LEGACY_RENDERERS
Platform.Android.FastRenderers.ImageRenderer
Compatibility.Platform.Android.FastRenderers.ImageRenderer
#else
ImageRenderer
#endif
@ -42,7 +44,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
{
}
protected override void OnElementChanged(Platform.Android.ElementChangedEventArgs<Image> e)
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
}
@ -54,7 +56,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
public class CustomFrameRenderer5724 :
#if !LEGACY_RENDERERS
Platform.Android.FastRenderers.FrameRenderer
Compatibility.Platform.Android.FastRenderers.FrameRenderer
#else
FrameRenderer
#endif
@ -63,7 +65,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
{
}
protected override void OnElementChanged(Platform.Android.ElementChangedEventArgs<Frame> e)
protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
{
base.OnElementChanged(e);
}
@ -77,7 +79,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
public class CustomLabelRenderer5724 :
#if !LEGACY_RENDERERS
Platform.Android.FastRenderers.LabelRenderer
Compatibility.Platform.Android.FastRenderers.LabelRenderer
#else
LabelRenderer
#endif
@ -86,7 +88,7 @@ namespace Microsoft.Maui.Controls.ControlGallery.Android
{
}
protected override void OnElementChanged(Platform.Android.ElementChangedEventArgs<Label> e)
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
}

Просмотреть файл

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Просмотреть файл

@ -111,7 +111,7 @@
<ProjectReference Include="..\..\..\..\Controls\src\Core\Controls.Core-net6.csproj" />
<ProjectReference Include="..\..\..\..\Controls\src\Xaml\Controls.Xaml-net6.csproj" />
<ProjectReference Include="..\..\..\..\Core\src\Core-net6.csproj" />
<ProjectReference Include="..\..\..\Core\src\Compatibility-net6.csproj" />
<ProjectReference Include="..\..\..\..\Compatibility\Core\src\Compatibility-net6.csproj" />
</ItemGroup>
<ItemGroup>

Просмотреть файл

@ -9,7 +9,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
public class AppearingGalleryPage : ContentPage
{
const string NavPageTitle = "NavAppearingPage";
const string MasterPageTitle = "MasterAppearingPage";
const string FlyoutPageTitle = "FlyoutPageAppearingPage";
const string TabbedPageTitle = "TabbedAppearingPage";
const string CarouselPageTitle = "CarouselAppearingPage";
@ -27,9 +27,9 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
Application.Current.MainPage = new NavAppearingPage(initalPage);
})
},
new Button { Text = MasterPageTitle, Command = new Command (() => {
new Button { Text = FlyoutPageTitle, Command = new Command (() => {
var page = new FlyoutPage {
Title = MasterPageTitle,
Title = FlyoutPageTitle,
Flyout = new ContentPage { Title = "Flyout", BackgroundColor = Colors.Red },
Detail = new NavAppearingPage(initalPage)
};

Просмотреть файл

@ -22,6 +22,7 @@ using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;
using Microsoft.Maui.Graphics;
using AbsoluteLayoutFlags = Microsoft.Maui.Layouts.AbsoluteLayoutFlags;
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
{

Просмотреть файл

@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks;
using Microsoft.Maui.Controls.Internals;
using Microsoft.Maui.Graphics;
using AbsoluteLayoutFlags = Microsoft.Maui.Layouts.AbsoluteLayoutFlags;
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
{

Просмотреть файл

@ -86,7 +86,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
});
};
var master = new Button { Text = "MasterDetail" };
var master = new Button { Text = "FlyoutPage" };
master.Clicked += async (sender, args) =>
{
await Navigation.PushModalAsync(new FlyoutPage

Просмотреть файл

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Maui.Graphics;
using AbsoluteLayoutFlags = Microsoft.Maui.Layouts.AbsoluteLayoutFlags;
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
{

Просмотреть файл

@ -5,6 +5,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.Maui.Controls.Internals;
using Microsoft.Maui.Graphics;
using AbsoluteLayoutFlags = Microsoft.Maui.Layouts.AbsoluteLayoutFlags;
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.GalleryPages.CollectionViewGalleries.CarouselViewGalleries
{

Просмотреть файл

@ -7,7 +7,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
{
public FlyoutPageTabletPage()
{
Title = "MasterDetail FlyoutLayoutBehavior Gallery";
Title = "FlyoutPage FlyoutLayoutBehavior Gallery";
var btn = new Button { Text = "Default (old behavior)" };
btn.Clicked += async (sender, e) => await Navigation.PushModalAsync(new Issue1461Page(FlyoutLayoutBehavior.Default, null));

Просмотреть файл

@ -11,8 +11,8 @@
</NavigationPage.TitleView>
<ScrollView>
<StackLayout BackgroundColor="Pink">
<Button Clicked="masterDetailsPage_Clicked" Text="Flyout Details Page"></Button>
<Button Clicked="masterDetailsPageIcon_Clicked" Text="Toggle MDP Icon"></Button>
<Button Clicked="flyoutPagesPage_Clicked" Text="Flyout Details Page"></Button>
<Button Clicked="flyoutPagesPageIcon_Clicked" Text="Toggle MDP Icon"></Button>
<Button Clicked="tabbedPage_Clicked" Text="Tabbed Page"></Button>
<Button Clicked="navigationPage_Clicked" Text="Navigation Page"></Button>
<Button Clicked="nextPage_Clicked" Text="Push a Page"></Button>

Просмотреть файл

@ -21,7 +21,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.GalleryPages
if (initialLoad)
{
Device.BeginInvokeOnMainThread(() => masterDetailsPage_Clicked(this, EventArgs.Empty));
Device.BeginInvokeOnMainThread(() => flyoutPagesPage_Clicked(this, EventArgs.Empty));
}
}
@ -48,7 +48,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.GalleryPages
}
}
void masterDetailsPage_Clicked(object sender, EventArgs e)
void flyoutPagesPage_Clicked(object sender, EventArgs e)
{
App.Current.MainPage =
new FlyoutPage()
@ -195,7 +195,7 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.GalleryPages
NavigationPage.SetTitleIconImageSource(page, null);
}
void masterDetailsPageIcon_Clicked(object sender, EventArgs e)
void flyoutPagesPageIcon_Clicked(object sender, EventArgs e)
{
if (App.Current.MainPage is FlyoutPage mdp)
{

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше