diff --git a/build/repo.props b/build/repo.props index 53ad942288..500a42773e 100644 --- a/build/repo.props +++ b/build/repo.props @@ -166,6 +166,7 @@ $(RepositoryRoot)src\MusicStore\**\*.*proj; $(RepositoryRoot)src\SignalR\**\*.csproj; $(RepositoryRoot)src\Components\**\*.csproj; + $(RepositoryRoot)src\Analyzers\**\*.csproj; $(RepositoryRoot)src\ProjectTemplates\*\*.csproj; $(RepositoryRoot)src\ProjectTemplates\testassets\*\*.csproj; " diff --git a/eng/Versions.props b/eng/Versions.props index 2ae50f6f34..e36b083079 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -150,9 +150,9 @@ 10.0.1 15.8.166 15.8.166 - 2.8.0 - 2.8.0 - 2.8.0 + 3.0.0 + 3.0.0 + 3.0.0 3.19.8 5.3.0 5.3.0 diff --git a/src/Analyzers/Analyzers.sln b/src/Analyzers/Analyzers.sln new file mode 100644 index 0000000000..e247944f6a --- /dev/null +++ b/src/Analyzers/Analyzers.sln @@ -0,0 +1,794 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28903.44 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{E20BC57F-1881-40B0-BEAF-338BBDA87956}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc", "..\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj", "{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR", "..\SignalR\server\SignalR\src\Microsoft.AspNetCore.SignalR.csproj", "{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Server", "..\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj", "{476B2742-74FD-4009-92DE-7B1214EAF244}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery", "..\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj", "{E38BD375-143D-4928-8814-924597931A07}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Abstractions", "..\Http\Authentication.Abstractions\src\Microsoft.AspNetCore.Authentication.Abstractions.csproj", "{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core", "..\Http\Authentication.Core\src\Microsoft.AspNetCore.Authentication.Core.csproj", "{31B70151-7A3F-47F9-87DE-B279E93B3915}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization", "..\Security\Authorization\Core\src\Microsoft.AspNetCore.Authorization.csproj", "{D345FDA8-05A0-4141-BCEF-1A11AF01480A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Policy", "..\Security\Authorization\Policy\src\Microsoft.AspNetCore.Authorization.Policy.csproj", "{34CCB39F-37E7-46E7-AC58-E9197F4A5380}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components", "..\Components\Components\src\Microsoft.AspNetCore.Components.csproj", "{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Browser", "..\Components\Browser\src\Microsoft.AspNetCore.Components.Browser.csproj", "{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Connections.Abstractions", "..\Servers\Connections.Abstractions\src\Microsoft.AspNetCore.Connections.Abstractions.csproj", "{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors", "..\Middleware\CORS\src\Microsoft.AspNetCore.Cors.csproj", "{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal", "..\DataProtection\Cryptography.Internal\src\Microsoft.AspNetCore.Cryptography.Internal.csproj", "{D8F56A11-8961-4BD4-8846-C5483BA500F8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection", "..\DataProtection\DataProtection\src\Microsoft.AspNetCore.DataProtection.csproj", "{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions", "..\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "{52055C8F-9A92-48D4-B4F7-33F287173456}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Abstractions", "..\Middleware\Diagnostics.Abstractions\src\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj", "{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Abstractions", "..\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj", "{DF11316F-4166-415D-B610-01603DADFED1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Server.Abstractions", "..\Hosting\Server.Abstractions\src\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", "{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Html.Abstractions", "..\Html\Abstractions\src\Microsoft.AspNetCore.Html.Abstractions.csproj", "{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "..\Http\Http\src\Microsoft.AspNetCore.Http.csproj", "{3090F751-B421-4853-829C-C0CC5ADE3D83}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions", "..\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj", "{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections", "..\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj", "{4B501200-A3FD-4F3B-B8AC-582108B13A05}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Common", "..\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj", "{99F7E758-9327-4A16-8AB7-72B35B1D2C92}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions", "..\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj", "{04C932ED-58DA-4EB9-90CD-2835C67B9952}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features", "..\Http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj", "{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization", "..\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj", "{9D5B4D52-7E1B-4981-8994-5288262577B2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions", "..\Mvc\Mvc.Abstractions\src\Microsoft.AspNetCore.Mvc.Abstractions.csproj", "{06091041-72DA-4C68-8FC1-AD65E495993D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer", "..\Mvc\Mvc.ApiExplorer\src\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj", "{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core", "..\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj", "{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors", "..\Mvc\Mvc.Cors\src\Microsoft.AspNetCore.Mvc.Cors.csproj", "{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations", "..\Mvc\Mvc.DataAnnotations\src\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj", "{2E4394A2-9863-4B60-B9EA-906FA6C46854}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "..\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{470CD0EE-3C90-462A-B003-3403AB4558A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization", "..\Mvc\Mvc.Localization\src\Microsoft.AspNetCore.Mvc.Localization.csproj", "{0192C192-BE48-4BC4-8308-9497407FA054}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor", "..\Mvc\Mvc.Razor\src\Microsoft.AspNetCore.Mvc.Razor.csproj", "{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages", "..\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj", "{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers", "..\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj", "{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures", "..\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj", "{47E04D89-C2F0-4339-B439-E097AD1ABC09}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor", "..\Razor\Razor\src\Microsoft.AspNetCore.Razor.csproj", "{10588AC3-7F69-47F3-B58D-387ED27C9A50}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime", "..\Razor\Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj", "{3EEBE055-DD80-4256-B71F-48C9489E2FC2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Abstractions", "..\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj", "{F871786B-8DF5-4BA7-A5CA-D128651F69AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "..\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj", "{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Abstractions", "..\Http\Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common", "..\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj", "{D3A17614-4C31-455F-ADA4-0FD746C569BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Core", "..\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj", "{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.Json", "..\SignalR\common\Protocols.Json\src\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj", "{01E8A2FA-4591-4D85-81BE-341CA3C61A90}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "..\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{894DE066-00B0-44E6-88B9-46F91A17EE26}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets", "..\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj", "{0684DA04-DFBA-499D-8D07-2649C3C1068D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities", "..\Http\WebUtilities\src\Microsoft.AspNetCore.WebUtilities.csproj", "{66456C7C-8CE9-4E01-95A3-399B59CA3438}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "..\Http\Headers\src\Microsoft.Net.Http.Headers.csproj", "{BDF0389F-B502-4D71-8ADF-206A59F9D32A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers", "Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj", "{95534D16-E720-4435-9867-5D3E2B288406}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers.Test", "Analyzers\test\Microsoft.AspNetCore.Analyzers.Test.csproj", "{63A928CC-792F-400A-97D3-F455C0A78B8F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_dependencies", "_dependencies", "{15FC976B-4FFC-47E1-A047-194F21C3CA9F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x64.ActiveCfg = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x64.Build.0 = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x86.ActiveCfg = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x86.Build.0 = Debug|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|Any CPU.Build.0 = Release|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x64.ActiveCfg = Release|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x64.Build.0 = Release|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x86.ActiveCfg = Release|Any CPU + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x86.Build.0 = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x64.ActiveCfg = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x64.Build.0 = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x86.Build.0 = Debug|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|Any CPU.Build.0 = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x64.ActiveCfg = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x64.Build.0 = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x86.ActiveCfg = Release|Any CPU + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x86.Build.0 = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|Any CPU.Build.0 = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x64.ActiveCfg = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x64.Build.0 = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x86.ActiveCfg = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x86.Build.0 = Debug|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|Any CPU.ActiveCfg = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|Any CPU.Build.0 = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x64.ActiveCfg = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x64.Build.0 = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x86.ActiveCfg = Release|Any CPU + {476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x86.Build.0 = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|x64.ActiveCfg = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|x64.Build.0 = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|x86.ActiveCfg = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Debug|x86.Build.0 = Debug|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|Any CPU.Build.0 = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|x64.ActiveCfg = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|x64.Build.0 = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|x86.ActiveCfg = Release|Any CPU + {E38BD375-143D-4928-8814-924597931A07}.Release|x86.Build.0 = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x64.ActiveCfg = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x64.Build.0 = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x86.ActiveCfg = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x86.Build.0 = Debug|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x64.ActiveCfg = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x64.Build.0 = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x86.ActiveCfg = Release|Any CPU + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x86.Build.0 = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x64.ActiveCfg = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x64.Build.0 = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x86.ActiveCfg = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x86.Build.0 = Debug|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|Any CPU.Build.0 = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x64.ActiveCfg = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x64.Build.0 = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x86.ActiveCfg = Release|Any CPU + {31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x86.Build.0 = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x64.ActiveCfg = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x64.Build.0 = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x86.ActiveCfg = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x86.Build.0 = Debug|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|Any CPU.Build.0 = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x64.ActiveCfg = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x64.Build.0 = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x86.ActiveCfg = Release|Any CPU + {D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x86.Build.0 = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x64.ActiveCfg = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x64.Build.0 = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x86.ActiveCfg = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x86.Build.0 = Debug|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|Any CPU.Build.0 = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x64.ActiveCfg = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x64.Build.0 = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x86.ActiveCfg = Release|Any CPU + {34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x86.Build.0 = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x64.ActiveCfg = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x64.Build.0 = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x86.Build.0 = Debug|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|Any CPU.Build.0 = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x64.ActiveCfg = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x64.Build.0 = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x86.ActiveCfg = Release|Any CPU + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x86.Build.0 = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x64.Build.0 = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x86.Build.0 = Debug|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|Any CPU.Build.0 = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x64.ActiveCfg = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x64.Build.0 = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x86.ActiveCfg = Release|Any CPU + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x86.Build.0 = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x64.Build.0 = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x86.ActiveCfg = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x86.Build.0 = Debug|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|Any CPU.Build.0 = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x64.ActiveCfg = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x64.Build.0 = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x86.ActiveCfg = Release|Any CPU + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x86.Build.0 = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x64.ActiveCfg = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x64.Build.0 = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x86.ActiveCfg = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x86.Build.0 = Debug|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|Any CPU.Build.0 = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x64.ActiveCfg = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x64.Build.0 = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x86.ActiveCfg = Release|Any CPU + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x86.Build.0 = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x64.ActiveCfg = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x64.Build.0 = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x86.ActiveCfg = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x86.Build.0 = Debug|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|Any CPU.Build.0 = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x64.ActiveCfg = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x64.Build.0 = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x86.ActiveCfg = Release|Any CPU + {D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x86.Build.0 = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x64.Build.0 = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x86.Build.0 = Debug|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|Any CPU.Build.0 = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x64.ActiveCfg = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x64.Build.0 = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x86.ActiveCfg = Release|Any CPU + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x86.Build.0 = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x64.ActiveCfg = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x64.Build.0 = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x86.ActiveCfg = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x86.Build.0 = Debug|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|Any CPU.Build.0 = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x64.ActiveCfg = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x64.Build.0 = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x86.ActiveCfg = Release|Any CPU + {52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x86.Build.0 = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x64.ActiveCfg = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x64.Build.0 = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x86.ActiveCfg = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x86.Build.0 = Debug|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|Any CPU.Build.0 = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x64.ActiveCfg = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x64.Build.0 = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x86.ActiveCfg = Release|Any CPU + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x86.Build.0 = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|x64.ActiveCfg = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|x64.Build.0 = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|x86.ActiveCfg = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Debug|x86.Build.0 = Debug|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|Any CPU.Build.0 = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|x64.ActiveCfg = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|x64.Build.0 = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|x86.ActiveCfg = Release|Any CPU + {DF11316F-4166-415D-B610-01603DADFED1}.Release|x86.Build.0 = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x64.ActiveCfg = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x64.Build.0 = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x86.ActiveCfg = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x86.Build.0 = Debug|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|Any CPU.Build.0 = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x64.ActiveCfg = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x64.Build.0 = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x86.ActiveCfg = Release|Any CPU + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x86.Build.0 = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x64.ActiveCfg = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x64.Build.0 = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x86.ActiveCfg = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x86.Build.0 = Debug|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|Any CPU.Build.0 = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x64.ActiveCfg = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x64.Build.0 = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x86.ActiveCfg = Release|Any CPU + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x86.Build.0 = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x64.ActiveCfg = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x64.Build.0 = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x86.ActiveCfg = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x86.Build.0 = Debug|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|Any CPU.Build.0 = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x64.ActiveCfg = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x64.Build.0 = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x86.ActiveCfg = Release|Any CPU + {3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x86.Build.0 = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x64.ActiveCfg = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x64.Build.0 = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x86.ActiveCfg = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x86.Build.0 = Debug|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|Any CPU.Build.0 = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x64.ActiveCfg = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x64.Build.0 = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x86.ActiveCfg = Release|Any CPU + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x86.Build.0 = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x64.Build.0 = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x86.Build.0 = Debug|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|Any CPU.Build.0 = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x64.ActiveCfg = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x64.Build.0 = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x86.ActiveCfg = Release|Any CPU + {4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x86.Build.0 = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x64.ActiveCfg = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x64.Build.0 = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x86.ActiveCfg = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x86.Build.0 = Debug|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|Any CPU.Build.0 = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x64.ActiveCfg = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x64.Build.0 = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x86.ActiveCfg = Release|Any CPU + {99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x86.Build.0 = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x64.ActiveCfg = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x64.Build.0 = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x86.ActiveCfg = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x86.Build.0 = Debug|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|Any CPU.Build.0 = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x64.ActiveCfg = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x64.Build.0 = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x86.ActiveCfg = Release|Any CPU + {04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x86.Build.0 = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x64.ActiveCfg = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x64.Build.0 = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x86.ActiveCfg = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x86.Build.0 = Debug|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|Any CPU.Build.0 = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x64.ActiveCfg = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x64.Build.0 = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x86.ActiveCfg = Release|Any CPU + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x86.Build.0 = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x64.Build.0 = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x86.Build.0 = Debug|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|Any CPU.Build.0 = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x64.ActiveCfg = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x64.Build.0 = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x86.ActiveCfg = Release|Any CPU + {9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x86.Build.0 = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x64.ActiveCfg = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x64.Build.0 = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x86.ActiveCfg = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x86.Build.0 = Debug|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|Any CPU.Build.0 = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x64.ActiveCfg = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x64.Build.0 = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x86.ActiveCfg = Release|Any CPU + {06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x86.Build.0 = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x64.ActiveCfg = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x64.Build.0 = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x86.ActiveCfg = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x86.Build.0 = Debug|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|Any CPU.Build.0 = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x64.ActiveCfg = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x64.Build.0 = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x86.ActiveCfg = Release|Any CPU + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x86.Build.0 = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x64.ActiveCfg = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x64.Build.0 = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x86.Build.0 = Debug|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|Any CPU.Build.0 = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x64.ActiveCfg = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x64.Build.0 = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x86.ActiveCfg = Release|Any CPU + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x86.Build.0 = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x64.ActiveCfg = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x64.Build.0 = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x86.ActiveCfg = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x86.Build.0 = Debug|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|Any CPU.Build.0 = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x64.ActiveCfg = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x64.Build.0 = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x86.ActiveCfg = Release|Any CPU + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x86.Build.0 = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x64.Build.0 = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x86.Build.0 = Debug|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|Any CPU.Build.0 = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x64.ActiveCfg = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x64.Build.0 = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x86.ActiveCfg = Release|Any CPU + {2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x86.Build.0 = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x64.Build.0 = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x86.Build.0 = Debug|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|Any CPU.Build.0 = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x64.ActiveCfg = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x64.Build.0 = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x86.ActiveCfg = Release|Any CPU + {470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x86.Build.0 = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x64.ActiveCfg = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x64.Build.0 = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x86.ActiveCfg = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x86.Build.0 = Debug|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|Any CPU.Build.0 = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|x64.ActiveCfg = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|x64.Build.0 = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|x86.ActiveCfg = Release|Any CPU + {0192C192-BE48-4BC4-8308-9497407FA054}.Release|x86.Build.0 = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x64.ActiveCfg = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x64.Build.0 = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x86.ActiveCfg = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x86.Build.0 = Debug|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|Any CPU.Build.0 = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x64.ActiveCfg = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x64.Build.0 = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x86.ActiveCfg = Release|Any CPU + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x86.Build.0 = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x64.ActiveCfg = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x64.Build.0 = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x86.ActiveCfg = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x86.Build.0 = Debug|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|Any CPU.Build.0 = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x64.ActiveCfg = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x64.Build.0 = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x86.ActiveCfg = Release|Any CPU + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x86.Build.0 = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x64.ActiveCfg = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x64.Build.0 = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x86.ActiveCfg = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x86.Build.0 = Debug|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|Any CPU.Build.0 = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x64.ActiveCfg = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x64.Build.0 = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x86.ActiveCfg = Release|Any CPU + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x86.Build.0 = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x64.ActiveCfg = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x64.Build.0 = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x86.ActiveCfg = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x86.Build.0 = Debug|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|Any CPU.Build.0 = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x64.ActiveCfg = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x64.Build.0 = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x86.ActiveCfg = Release|Any CPU + {47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x86.Build.0 = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x64.ActiveCfg = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x64.Build.0 = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x86.ActiveCfg = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x86.Build.0 = Debug|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|Any CPU.Build.0 = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x64.ActiveCfg = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x64.Build.0 = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x86.ActiveCfg = Release|Any CPU + {10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x86.Build.0 = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x64.ActiveCfg = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x64.Build.0 = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x86.Build.0 = Debug|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|Any CPU.Build.0 = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x64.ActiveCfg = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x64.Build.0 = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x86.ActiveCfg = Release|Any CPU + {3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x86.Build.0 = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x64.ActiveCfg = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x64.Build.0 = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x86.ActiveCfg = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x86.Build.0 = Debug|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|Any CPU.Build.0 = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x64.ActiveCfg = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x64.Build.0 = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x86.ActiveCfg = Release|Any CPU + {F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x86.Build.0 = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x64.ActiveCfg = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x64.Build.0 = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x86.ActiveCfg = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x86.Build.0 = Debug|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|Any CPU.Build.0 = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x64.ActiveCfg = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x64.Build.0 = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x86.ActiveCfg = Release|Any CPU + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x86.Build.0 = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x64.ActiveCfg = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x64.Build.0 = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x86.ActiveCfg = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x86.Build.0 = Debug|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|Any CPU.Build.0 = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x64.ActiveCfg = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x64.Build.0 = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x86.ActiveCfg = Release|Any CPU + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x86.Build.0 = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x64.ActiveCfg = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x64.Build.0 = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x86.ActiveCfg = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x86.Build.0 = Debug|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|Any CPU.Build.0 = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x64.ActiveCfg = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x64.Build.0 = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x86.ActiveCfg = Release|Any CPU + {D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x86.Build.0 = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x64.ActiveCfg = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x64.Build.0 = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x86.ActiveCfg = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x86.Build.0 = Debug|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|Any CPU.Build.0 = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x64.ActiveCfg = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x64.Build.0 = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x86.ActiveCfg = Release|Any CPU + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x86.Build.0 = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x64.ActiveCfg = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x64.Build.0 = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x86.ActiveCfg = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x86.Build.0 = Debug|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|Any CPU.Build.0 = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x64.ActiveCfg = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x64.Build.0 = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x86.ActiveCfg = Release|Any CPU + {01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x86.Build.0 = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|Any CPU.Build.0 = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x64.ActiveCfg = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x64.Build.0 = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x86.ActiveCfg = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x86.Build.0 = Debug|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|Any CPU.Build.0 = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x64.ActiveCfg = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x64.Build.0 = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x86.ActiveCfg = Release|Any CPU + {894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x86.Build.0 = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x64.ActiveCfg = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x64.Build.0 = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x86.ActiveCfg = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x86.Build.0 = Debug|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|Any CPU.Build.0 = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x64.ActiveCfg = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x64.Build.0 = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x86.ActiveCfg = Release|Any CPU + {0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x86.Build.0 = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x64.ActiveCfg = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x64.Build.0 = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x86.ActiveCfg = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x86.Build.0 = Debug|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|Any CPU.Build.0 = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x64.ActiveCfg = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x64.Build.0 = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x86.ActiveCfg = Release|Any CPU + {66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x86.Build.0 = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x64.ActiveCfg = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x64.Build.0 = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x86.ActiveCfg = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x86.Build.0 = Debug|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|Any CPU.Build.0 = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x64.ActiveCfg = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x64.Build.0 = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x86.ActiveCfg = Release|Any CPU + {BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x86.Build.0 = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|x64.ActiveCfg = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|x64.Build.0 = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|x86.ActiveCfg = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Debug|x86.Build.0 = Debug|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|Any CPU.Build.0 = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|x64.ActiveCfg = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|x64.Build.0 = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|x86.ActiveCfg = Release|Any CPU + {95534D16-E720-4435-9867-5D3E2B288406}.Release|x86.Build.0 = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x64.ActiveCfg = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x64.Build.0 = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x86.ActiveCfg = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x86.Build.0 = Debug|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|Any CPU.Build.0 = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x64.ActiveCfg = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x64.Build.0 = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x86.ActiveCfg = Release|Any CPU + {63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {E60ADC05-55CE-46FD-9CBF-31E31FEF79D6} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {476B2742-74FD-4009-92DE-7B1214EAF244} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {E38BD375-143D-4928-8814-924597931A07} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {B0E13EEA-7E85-4265-BC1C-AFA1526FB36D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {31B70151-7A3F-47F9-87DE-B279E93B3915} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {D345FDA8-05A0-4141-BCEF-1A11AF01480A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {34CCB39F-37E7-46E7-AC58-E9197F4A5380} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {34522BFF-D1D8-44A3-891E-77C6BE7C81F1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {9C20C5AB-E609-4167-922D-0E7C7C6ED1EC} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {A21D03D7-5D69-47E7-B32C-4D7067D71B0E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {48A3DFDD-C975-42CA-87BA-3B8BAF549E22} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {D8F56A11-8961-4BD4-8846-C5483BA500F8} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {52055C8F-9A92-48D4-B4F7-33F287173456} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {DF11316F-4166-415D-B610-01603DADFED1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {3090F751-B421-4853-829C-C0CC5ADE3D83} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {E10A7203-BCC8-4F81-A9FB-56C241BC4B33} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {4B501200-A3FD-4F3B-B8AC-582108B13A05} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {99F7E758-9327-4A16-8AB7-72B35B1D2C92} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {04C932ED-58DA-4EB9-90CD-2835C67B9952} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {7B7FBB84-21AE-4720-90BE-F9FD22AEE803} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {9D5B4D52-7E1B-4981-8994-5288262577B2} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {06091041-72DA-4C68-8FC1-AD65E495993D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {535E8748-EC5E-41CB-94ED-ACB8A75E46AB} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {9B71BB93-4E03-4F4A-A52C-6490E9CFD99E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {11FB37B1-F4C9-4C4F-867E-4FD9050282C7} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {2E4394A2-9863-4B60-B9EA-906FA6C46854} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {470CD0EE-3C90-462A-B003-3403AB4558A5} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {0192C192-BE48-4BC4-8308-9497407FA054} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {823DD383-E8EB-4CF8-84BB-0EA3D6E024C3} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {BD6F4453-AE41-4578-B3FB-9F7C4617D96C} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {47E04D89-C2F0-4339-B439-E097AD1ABC09} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {10588AC3-7F69-47F3-B58D-387ED27C9A50} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {3EEBE055-DD80-4256-B71F-48C9489E2FC2} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {F871786B-8DF5-4BA7-A5CA-D128651F69AA} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {B634CC5E-8AC9-49EF-801F-C04AA322EEC1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {D3A17614-4C31-455F-ADA4-0FD746C569BE} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {8AFB0927-456A-4EC9-A07F-65C15A03AA9E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {01E8A2FA-4591-4D85-81BE-341CA3C61A90} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {894DE066-00B0-44E6-88B9-46F91A17EE26} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {0684DA04-DFBA-499D-8D07-2649C3C1068D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {66456C7C-8CE9-4E01-95A3-399B59CA3438} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {BDF0389F-B502-4D71-8ADF-206A59F9D32A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F} + {95534D16-E720-4435-9867-5D3E2B288406} = {E20BC57F-1881-40B0-BEAF-338BBDA87956} + {63A928CC-792F-400A-97D3-F455C0A78B8F} = {E20BC57F-1881-40B0-BEAF-338BBDA87956} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C44A91F6-58D3-4900-8D5C-60E9690D5D3B} + EndGlobalSection +EndGlobal diff --git a/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj new file mode 100644 index 0000000000..5d67f77e3a --- /dev/null +++ b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj @@ -0,0 +1,46 @@ + + + CSharp Analyzers for ASP.NET Core. + aspnetcore + + + false + true + + netstandard2.0 + false + false + $(MSBuildProjectName).nuspec + + + + + + + + + + + id=$(PackageId); + version=$(PackageVersion); + authors=$(Authors); + description=$(Description); + tags=$(PackageTags.Replace(';', ' ')); + licenseUrl=$(PackageLicenseUrl); + projectUrl=$(PackageProjectUrl); + iconUrl=$(PackageIconUrl); + repositoryUrl=$(RepositoryUrl); + repositoryCommit=$(SourceRevisionId); + copyright=$(Copyright); + + OutputBinary=$(OutputPath)$(AssemblyName).dll; + OutputSymbol=$(OutputPath)$(AssemblyName).pdb; + + + + + diff --git a/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec new file mode 100644 index 0000000000..5f9d436f73 --- /dev/null +++ b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec @@ -0,0 +1,24 @@ + + + + $id$ + $version$ + $authors$ + true + $licenseUrl$ + $projectUrl$ + $iconUrl$ + $description$ + $copyright$ + $tags$ + + + + + + + + + + + diff --git a/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs b/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..9db659780b --- /dev/null +++ b/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// 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.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Analyzers.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] diff --git a/src/Analyzers/Analyzers/src/StartupFacts.cs b/src/Analyzers/Analyzers/src/StartupFacts.cs new file mode 100644 index 0000000000..a267024a05 --- /dev/null +++ b/src/Analyzers/Analyzers/src/StartupFacts.cs @@ -0,0 +1,126 @@ +// 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 Microsoft.CodeAnalysis; + +namespace Microsoft.AspNetCore.Analyzers +{ + internal static class StartupFacts + { + public static bool IsStartupClass(StartupSymbols symbols, INamedTypeSymbol type) + { + if (symbols == null) + { + throw new ArgumentNullException(nameof(symbols)); + } + + if (type == null) + { + throw new ArgumentNullException(nameof(type)); + } + + // It's not good enough to just look for a method called ConfigureServices or Configure as a hueristic. + // ConfigureServices might not appear in trivial cases, and Configure might be named ConfigureDevelopment + // or something similar. + // + // Additionally, a startup class could be called anything and wired up explicitly. + // + // Since we already are analyzing the symbol it should be cheap to do a pass over the members. + var members = type.GetMembers(); + for (var i = 0; i < members.Length; i++) + { + if (members[i] is IMethodSymbol method && (IsConfigureServices(symbols, method) || IsConfigure(symbols, method))) + { + return true; + } + } + + return false; + } + + // Based on StartupLoader. The philosophy is that we want to do analysis only on things + // that would be recognized as a ConfigureServices method to avoid false positives. + // + // The ConfigureServices method follows the naming pattern `Configure{Environment?}Services` (ignoring case). + // The ConfigureServices method must be public. + // The ConfigureServices method can be instance or static. + // The ConfigureServices method cannot have other parameters besides IServiceCollection. + // + // The ConfigureServices method does not actually need to accept IServiceCollection + // but we exclude that case because a ConfigureServices method that doesn't accept an + // IServiceCollection can't do anything interesting to analysis. + public static bool IsConfigureServices(StartupSymbols symbols, IMethodSymbol symbol) + { + if (symbol == null) + { + throw new ArgumentNullException(nameof(symbol)); + } + + if (symbol.DeclaredAccessibility != Accessibility.Public) + { + return false; + } + + if (symbol.Name == null || + !symbol.Name.StartsWith(SymbolNames.ConfigureServicesMethodPrefix, StringComparison.OrdinalIgnoreCase) || + !symbol.Name.EndsWith(SymbolNames.ConfigureServicesMethodSuffix, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + if (symbol.Parameters.Length != 1) + { + return false; + } + + if (symbol.Parameters[0].Type != symbols.IServiceCollection) + { + return false; + } + + return true; + } + + // Based on StartupLoader. The philosophy is that we want to do analysis only on things + // that would be recognized as a Configure method to avoid false positives. + // + // The Configure method follows the naming pattern `Configure{Environment?}` (ignoring case). + // The Configure method must be public. + // The Configure method can be instance or static. + // The Configure method *can* have other parameters besides IApplicationBuilder. + // + // The Configure method does not actually need to accept IApplicationBuilder + // but we exclude that case because a Configure method that doesn't accept an + // IApplicationBuilder can't do anything interesting to analysis. + public static bool IsConfigure(StartupSymbols symbols, IMethodSymbol symbol) + { + if (symbol == null) + { + throw new ArgumentNullException(nameof(symbol)); + } + + if (symbol.DeclaredAccessibility != Accessibility.Public) + { + return false; + } + + if (symbol.Name == null || + !symbol.Name.StartsWith(SymbolNames.ConfigureMethodPrefix, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + // IApplicationBuilder can appear in any parameter, but must appear. + for (var i = 0; i < symbol.Parameters.Length; i++) + { + if (symbol.Parameters[i].Type == symbols.IApplicationBuilder) + { + return true; + } + } + + return false; + } + } +} diff --git a/src/Analyzers/Analyzers/src/StartupSymbols.cs b/src/Analyzers/Analyzers/src/StartupSymbols.cs new file mode 100644 index 0000000000..9b98302b46 --- /dev/null +++ b/src/Analyzers/Analyzers/src/StartupSymbols.cs @@ -0,0 +1,22 @@ +// 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 Microsoft.CodeAnalysis; + +namespace Microsoft.AspNetCore.Analyzers +{ + internal class StartupSymbols + { + public StartupSymbols(Compilation compilation) + { + IApplicationBuilder = compilation.GetTypeByMetadataName(SymbolNames.IApplicationBuilder.MetadataName); + IServiceCollection = compilation.GetTypeByMetadataName(SymbolNames.IServiceCollection.MetadataName); + } + + public bool HasRequiredSymbols => IApplicationBuilder != null && IServiceCollection != null; + + public INamedTypeSymbol IApplicationBuilder { get; } + + public INamedTypeSymbol IServiceCollection { get; } + } +} diff --git a/src/Analyzers/Analyzers/src/SymbolNames.cs b/src/Analyzers/Analyzers/src/SymbolNames.cs new file mode 100644 index 0000000000..0aff8e0738 --- /dev/null +++ b/src/Analyzers/Analyzers/src/SymbolNames.cs @@ -0,0 +1,26 @@ +// 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 Microsoft.CodeAnalysis; + +namespace Microsoft.AspNetCore.Analyzers +{ + internal static class SymbolNames + { + public const string ConfigureServicesMethodPrefix = "Configure"; + + public const string ConfigureServicesMethodSuffix = "Services"; + + public const string ConfigureMethodPrefix = "Configure"; + + public static class IApplicationBuilder + { + public const string MetadataName = "Microsoft.AspNetCore.Builder.IApplicationBuilder"; + } + + public static class IServiceCollection + { + public const string MetadataName = "Microsoft.Extensions.DependencyInjection.IServiceCollection"; + } + } +} diff --git a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs new file mode 100644 index 0000000000..85b0e4b31b --- /dev/null +++ b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs @@ -0,0 +1,59 @@ +// 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.IO; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Analyzer.Testing; +using Microsoft.AspNetCore.Testing; +using Microsoft.AspNetCore.Testing.xunit; +using Microsoft.CodeAnalysis; + +namespace Microsoft.AspNetCore.Analyzers +{ + public abstract class AnalyzerTestBase + { + private static readonly string ProjectDirectory = GetProjectDirectory(); + + public TestSource Read(string source) + { + var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source); + if (!File.Exists(filePath)) + { + throw new FileNotFoundException($"TestFile {source} could not be found at {filePath}.", filePath); + } + + var fileContent = File.ReadAllText(filePath); + return TestSource.Read(fileContent); + } + + public Project CreateProject(string source) + { + if (!source.EndsWith(".cs")) + { + source = source + ".cs"; + } + + var read = Read(source); + return DiagnosticProject.Create(GetType().Assembly, new[] { read.Source, }); + } + + public Task CreateCompilationAsync(string source) + { + return CreateProject(source).GetCompilationAsync(); + } + + private static string GetProjectDirectory() + { + // On helix we use the published test files + if (SkipOnHelixAttribute.OnHelix()) + { + return AppContext.BaseDirectory; + } + + var solutionDirectory = TestPathUtilities.GetSolutionRootDirectory("Analyzers"); + var projectDirectory = Path.Combine(solutionDirectory, "Analyzers", "test"); + return projectDirectory; + } + } +} diff --git a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj new file mode 100644 index 0000000000..59b34f4d46 --- /dev/null +++ b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj @@ -0,0 +1,30 @@ + + + + netcoreapp3.0 + true + Microsoft.AspNetCore.Analyzers + + false + + + + + + + + + + + + + + + + + + + + diff --git a/src/Analyzers/Analyzers/test/StartupFactsTest.cs b/src/Analyzers/Analyzers/test/StartupFactsTest.cs new file mode 100644 index 0000000000..b7a25e85a3 --- /dev/null +++ b/src/Analyzers/Analyzers/test/StartupFactsTest.cs @@ -0,0 +1,142 @@ +// 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.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest; +using Microsoft.CodeAnalysis; +using Xunit; + +namespace Microsoft.AspNetCore.Analyzers +{ + public class StartupFactsTest : AnalyzerTestBase + { + [Theory] + [InlineData(nameof(BasicStartup), nameof(BasicStartup.ConfigureServices))] + [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices))] + [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.configurePRODUCTIONservices))] + public async Task IsConfigureServices_FindsConfigureServicesMethod(string source, string methodName) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + var methods = type.GetMembers(methodName).Cast(); + + foreach (var method in methods) + { + // Act + var result = StartupFacts.IsConfigureServices(symbols, method); + + // Assert + Assert.True(result); + } + } + + [Theory] + [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.ConfigureServices))] + [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.ConfigureSrvces))] + + // This is an interesting case where a method follows both naming conventions. + [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices2))] + public async Task IsConfigureServices_RejectsNonConfigureServicesMethod(string source, string methodName) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + var methods = type.GetMembers(methodName).Cast(); + + foreach (var method in methods) + { + // Act + var result = StartupFacts.IsConfigureServices(symbols, method); + + // Assert + Assert.False(result); + } + } + + [Theory] + [InlineData(nameof(BasicStartup), nameof(BasicStartup.Configure))] + [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.configurePRODUCTION))] + [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices2))] + public async Task IsConfigure_FindsConfigureMethod(string source, string methodName) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + var methods = type.GetMembers(methodName).Cast(); + + foreach (var method in methods) + { + // Act + var result = StartupFacts.IsConfigure(symbols, method); + + // Assert + Assert.True(result); + } + } + + [Theory] + [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.Configure))] + [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.Configur))] + public async Task IsConfigure_RejectsNonConfigureMethod(string source, string methodName) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + var methods = type.GetMembers(methodName).Cast(); + + foreach (var method in methods) + { + // Act + var result = StartupFacts.IsConfigure(symbols, method); + + // Assert + Assert.False(result); + } + } + + [Theory] + [InlineData(nameof(BasicStartup))] + [InlineData(nameof(EnvironmentStartup))] + public async Task IsStartupClass_FindsStartupClass(string source) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + + // Act + var result = StartupFacts.IsStartupClass(symbols, type); + + // Assert + Assert.True(result); + } + + [Theory] + [InlineData(nameof(NotAStartupClass))] + public async Task IsStartupClass_RejectsNotStartupClass(string source) + { + // Arrange + var compilation = await CreateCompilationAsync(source); + var symbols = new StartupSymbols(compilation); + + var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single(); + + // Act + var result = StartupFacts.IsStartupClass(symbols, type); + + // Assert + Assert.False(result); + } + } +} diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs new file mode 100644 index 0000000000..7447e5e001 --- /dev/null +++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest +{ + public class BasicStartup + { + public void ConfigureServices(IServiceCollection services) + { + } + + public void Configure(IApplicationBuilder app) + { + } + } +} diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs new file mode 100644 index 0000000000..434a451277 --- /dev/null +++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs @@ -0,0 +1,30 @@ +// 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 Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest +{ + public class EnvironmentStartup + { + public void ConfigureDevelopmentServices(IServiceCollection services) + { + } + + public void configurePRODUCTIONservices(IServiceCollection services) + { + } + + // Yes, this is technically a Configure method - if you have an Enviroment called DevelopmentServices2. + public static void ConfigureDevelopmentServices2(IConfiguration configuration, ILogger logger, IApplicationBuilder app) + { + } + + public static void configurePRODUCTION(IConfiguration configuration, ILogger logger, IApplicationBuilder app) + { + } + } +} diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs new file mode 100644 index 0000000000..74948f1e72 --- /dev/null +++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs @@ -0,0 +1,47 @@ +// 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 Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest +{ + public class NotAStartupClass + { + // no args - not a ConfigureServices (technically it is, but we exclude this case). + public void ConfigureServices() + { + } + + // extra arg - not a ConfigureServices + public void ConfigureServices(IServiceCollection services, string x) + { + } + + // wrong name - not a ConfigureServices + public void ConfigureSrvces(IServiceCollection services) + { + } + + // non-public - not a ConfigureServices + internal void ConfigureServices(IServiceCollection services) + { + } + + // no IApplicationBuilder - not a Configure + public void Configure(IConfiguration configuration) + { + } + + // wrong prefix - not a Configure + public void Configur(IApplicationBuilder app) + { + } + + // non-public - not a Configure + internal void Configure(IApplicationBuilder app) + { + } + } +} diff --git a/src/Analyzers/build.cmd b/src/Analyzers/build.cmd new file mode 100644 index 0000000000..033fe6f614 --- /dev/null +++ b/src/Analyzers/build.cmd @@ -0,0 +1,3 @@ +@ECHO OFF +SET RepoRoot=%~dp0..\.. +%RepoRoot%\build.cmd -projects %~dp0\**\*.*proj %* diff --git a/src/Analyzers/build.sh b/src/Analyzers/build.sh new file mode 100644 index 0000000000..7046bb98a0 --- /dev/null +++ b/src/Analyzers/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -euo pipefail + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +repo_root="$DIR/../.." +"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "$@" diff --git a/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj b/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj new file mode 100644 index 0000000000..81c027292b --- /dev/null +++ b/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj @@ -0,0 +1,53 @@ + + + + + + + netstandard1.0 + true + false + true + true + false + false + false + false + contentFiles + true + $(DefaultExcludeItems);$(BaseOutputPath);$(BaseIntermediateOutputPath); + $(NoWarn);NU5105;CS8021 + false + + + + + true + $(ContentTargetFolders)\cs\netstandard1.0\shared\ + + + + + + %(FileName)%(Extension) + true + $(ContentTargetFolders)\cs\netstandard1.0\shared\ + + + %(FileName)%(Extension) + true + $(ContentTargetFolders)\cs\netstandard1.0\shared\ + + + %(FileName)%(Extension) + true + $(ContentTargetFolders)\cs\netstandard1.0\shared\ + + + + + + + + + diff --git a/src/Analyzers/startvs.cmd b/src/Analyzers/startvs.cmd new file mode 100644 index 0000000000..9f4a9fdee9 --- /dev/null +++ b/src/Analyzers/startvs.cmd @@ -0,0 +1,3 @@ +@ECHO OFF + +%~dp0..\..\startvs.cmd %~dp0Analyzers.sln diff --git a/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj b/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj index 3ad086e33b..abd1e5e519 100644 --- a/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj +++ b/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj @@ -1,7 +1,7 @@  - netstandard1.3 + netstandard2.0 false true false diff --git a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj index 83e6385814..1e92917e80 100644 --- a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj +++ b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj @@ -5,7 +5,7 @@ false - netstandard1.3 + netstandard2.0 false false $(MSBuildProjectName).nuspec diff --git a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs index 9d2ff14ba1..12dc164ba9 100644 --- a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs +++ b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs @@ -7,6 +7,7 @@ namespace Microsoft.AspNetCore.Analyzers { internal class StartupAnalysisContext { +#pragma warning disable RS1012 // Start action has no registered actions. public StartupAnalysisContext(OperationBlockStartAnalysisContext operationBlockStartAnalysisContext, StartupSymbols startupSymbols) { OperationBlockStartAnalysisContext = operationBlockStartAnalysisContext; @@ -16,5 +17,6 @@ namespace Microsoft.AspNetCore.Analyzers public OperationBlockStartAnalysisContext OperationBlockStartAnalysisContext { get; } public StartupSymbols StartupSymbols { get; } +#pragma warning restore RS1012 // Start action has no registered actions. } } diff --git a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs index be2a9ebb88..983ad54a50 100644 --- a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs +++ b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs @@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Analyzers OnConfigureMethodFound(method); } } - +#pragma warning disable RS1012 // Start action has no registered actions. private bool IsStartupFile(OperationBlockStartAnalysisContext context) { foreach (var location in context.OwningSymbol.Locations) @@ -144,5 +144,6 @@ namespace Microsoft.AspNetCore.Analyzers return false; } +#pragma warning restore RS1012 // Start action has no registered actions. } } diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs index d138d6afb1..18b82c2ae1 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs +++ b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs @@ -37,6 +37,8 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers _diagnostic = diagnostic; } + public override string EquivalenceKey => _diagnostic.Location.ToString(); + public override string Title => "Add ProducesResponseType attributes."; protected override async Task GetChangedDocumentAsync(CancellationToken cancellationToken) diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs index a5a2a62613..bd9734e0b2 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs +++ b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs @@ -17,6 +17,8 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers ApiDiagnosticDescriptors.API1000_ActionReturnsUndocumentedStatusCode.Id, ApiDiagnosticDescriptors.API1001_ActionReturnsUndocumentedSuccessResult.Id); + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + public sealed override Task RegisterCodeFixesAsync(CodeFixContext context) { if (context.Diagnostics.Length == 0) diff --git a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj index ad062a7403..f5efb230a2 100644 --- a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj +++ b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj @@ -5,7 +5,7 @@ false - netstandard1.3 + netstandard2.0 false false $(MSBuildProjectName).nuspec