diff --git a/azure-pipelines-tests.yml b/azure-pipelines-tests.yml index f280a6a4ce..8b01cb3f9a 100644 --- a/azure-pipelines-tests.yml +++ b/azure-pipelines-tests.yml @@ -8,46 +8,74 @@ pr: - rel/* - preview/* -pool: - vmImage: vs2017-win2016 - -steps: -- task: DotNetCoreInstaller@0 - displayName: Install Dot Net Core v2.2.1 - inputs: - version: '2.2.103' - -- task: BatchScript@1 - inputs: - filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\Tools\\VsDevCmd.bat" - arguments: -no_logo - modifyEnvironment: true - displayName: Setup Environment Variables - -- task: DotNetCoreCLI@2 - inputs: - command: custom - custom: tool - arguments: install --tool-path . nbgv - displayName: Install NBGV tool - -- script: nbgv cloud - displayName: Set Version - -- powershell: .\build.ps1 -Target UploadTestCoverage - displayName: Build - env: - CODECOV_TOKEN: $(CODECOV_TOKEN) - ArtifactDirectory: $(System.DefaultWorkingDirectory)\artifacts - -- task: CopyFiles@2 - inputs: - Contents: 'artifacts/tests/**/*' - TargetFolder: '$(build.artifactstagingdirectory)\Tests' - -- task: PublishBuildArtifacts@1 - displayName: Publish Test Data - inputs: - pathToPublish: '$(build.artifactstagingdirectory)\Tests' - artifactType: container - artifactName: Tests \ No newline at end of file +jobs: +- job: Windows + pool: + name: Default + + steps: + - task: DotNetCoreInstaller@0 + displayName: Install Dot Net Core v2.2.1 + inputs: + version: '2.2.103' + + - task: BatchScript@1 + inputs: + filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\VsDevCmd.bat" + arguments: -no_logo + modifyEnvironment: true + displayName: Setup Environment Variables + + - powershell: .\build.ps1 -Target UploadTestCoverage + displayName: Build + env: + CODECOV_TOKEN: $(CODECOV_TOKEN) + ArtifactDirectory: $(System.DefaultWorkingDirectory)\artifacts + + - task: CopyFiles@2 + inputs: + Contents: 'artifacts/tests/**/*' + TargetFolder: '$(build.artifactstagingdirectory)\Tests' + + - task: PublishCodeCoverageResults@1 + displayName: Publish Coverage Results + inputs: + codeCoverageTool: 'cobertura' + summaryFileLocation: 'artifacts\tests\report\Cobertura.xml' + reportDirectory: 'artifacts\tests\report' + + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'VSTest' + testResultsFiles: 'testresults-*.trx' + searchFolder: 'artifacts\tests' + +- job: Mac + pool: + vmImage: 'macOS-10.13' + steps: + - task: DotNetCoreInstaller@0 + displayName: Install Dot Net Core v2.2.1 + inputs: + version: '2.2.103' + + - bash: ./build.sh --target=RunUnitTests + displayName: Build + env: + CODECOV_TOKEN: $(CODECOV_TOKEN) + ArtifactDirectory: $(System.DefaultWorkingDirectory)/artifacts + + - task: PublishCodeCoverageResults@1 + displayName: Publish Coverage Results + inputs: + codeCoverageTool: 'cobertura' + summaryFileLocation: 'artifacts\tests\report\Cobertura.xml' + reportDirectory: 'artifacts\tests\report' + + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'VSTest' + testResultsFiles: 'testresults-*.trx' + searchFolder: 'artifacts\tests' diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c7484b8ebb..950c6d5a4b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,65 +8,75 @@ pr: - rel/* - preview/* -pool: - vmImage: vs2017-win2016 +jobs: +- job: Windows + pool: + vmImage: vs2017-win2016 + steps: + - task: DotNetCoreInstaller@0 + displayName: Install Dot Net Core v2.2.1 + inputs: + version: '2.2.103' -steps: -- task: DotNetCoreInstaller@0 - displayName: Install Dot Net Core v2.2.1 - inputs: - version: '2.2.103' + - task: BatchScript@1 + inputs: + filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\Tools\\VsDevCmd.bat" + arguments: -no_logo + modifyEnvironment: true + displayName: Setup Environment Variables -- task: BatchScript@1 - inputs: - filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\Tools\\VsDevCmd.bat" - arguments: -no_logo - modifyEnvironment: true - displayName: Setup Environment Variables + - powershell: .\build.ps1 + displayName: Build + env: + SIGNCLIENT_SECRET: $(SignClientSecret) + SIGNCLIENT_USER: $(SignClientUser) + ArtifactDirectory: $(System.DefaultWorkingDirectory)\artifacts -- powershell: .\build.ps1 - displayName: Build - env: - SIGNCLIENT_SECRET: $(SignClientSecret) - SIGNCLIENT_USER: $(SignClientUser) - VSTS_ACCESS_TOKEN: $(System.AccessToken) - COVERALLS_TOKEN: $(COVERALLS_TOKEN) - CODECOV_TOKEN: $(CODECOV_TOKEN) - ArtifactDirectory: $(System.DefaultWorkingDirectory)\artifacts + - task: CopyFiles@2 + inputs: + Contents: 'artifacts/packages/*.nupkg' + TargetFolder: '$(build.artifactstagingdirectory)\packages' + flattenFolders: true -- task: CopyFiles@2 - inputs: - Contents: 'artifacts/packages/*.nupkg' - TargetFolder: '$(build.artifactstagingdirectory)\packages' - flattenFolders: true + - task: PublishBuildArtifacts@1 + displayName: Publish Package Artifacts + inputs: + pathToPublish: '$(build.artifactstagingdirectory)\packages' + artifactType: container + artifactName: Packages -- task: PublishBuildArtifacts@1 - displayName: Publish Package Artifacts - inputs: - pathToPublish: '$(build.artifactstagingdirectory)\packages' - artifactType: container - artifactName: Packages + - task: CopyFiles@2 + inputs: + Contents: 'artifacts/binaries/**/*' + TargetFolder: '$(build.artifactstagingdirectory)\binaries' -- task: CopyFiles@2 - inputs: - Contents: 'artifacts/binaries/**/*' - TargetFolder: '$(build.artifactstagingdirectory)\binaries' + - task: PublishBuildArtifacts@1 + displayName: Publish Binaries + inputs: + pathToPublish: '$(build.artifactstagingdirectory)\binaries' + artifactType: container + artifactName: Binaries -- task: PublishBuildArtifacts@1 - displayName: Publish Binaries - inputs: - pathToPublish: '$(build.artifactstagingdirectory)\binaries' - artifactType: container - artifactName: Binaries + - task: CopyFiles@2 + inputs: + Contents: 'artifacts/Events/*.cs' + TargetFolder: '$(build.artifactstagingdirectory)\Events' -- task: CopyFiles@2 - inputs: - Contents: 'artifacts/Events/*.cs' - TargetFolder: '$(build.artifactstagingdirectory)\Events' + - task: PublishBuildArtifacts@1 + displayName: Publish Generated Events + inputs: + pathToPublish: '$(build.artifactstagingdirectory)\Events' + artifactType: container + artifactName: Events -- task: PublishBuildArtifacts@1 - displayName: Publish Generated Events - inputs: - pathToPublish: '$(build.artifactstagingdirectory)\Events' - artifactType: container - artifactName: Events \ No newline at end of file +- job: Mac + pool: + vmImage: 'macOS-10.13' + steps: + - task: DotNetCoreInstaller@0 + displayName: Install Dot Net Core v2.2.1 + inputs: + version: '2.2.103' + + - bash: ./build.sh --target=Build + displayName: Build \ No newline at end of file diff --git a/build.cake b/build.cake index d7de061ee5..4b1196f18c 100644 --- a/build.cake +++ b/build.cake @@ -7,34 +7,110 @@ ////////////////////////////////////////////////////////////////////// #addin "nuget:?package=Cake.FileHelpers&version=3.1.0" -#addin "nuget:?package=Cake.Coverlet&version=2.2.1" -#addin "nuget:?package=Cake.PinNuGetDependency&loaddependencies=true&version=3.2.3" -#addin "nuget:?package=Cake.Powershell&version=0.4.7" #addin "nuget:?package=Cake.Codecov&version=0.5.0" +#addin "nuget:?package=Cake.Coverlet&version=2.2.1" ////////////////////////////////////////////////////////////////////// // MODULES ////////////////////////////////////////////////////////////////////// -#module nuget:?package=Cake.DotNetTool.Module&version=0.1.0 +#module "nuget:?package=Cake.DotNetTool.Module&version=0.1.0" ////////////////////////////////////////////////////////////////////// // TOOLS ////////////////////////////////////////////////////////////////////// -#tool "nuget:?package=ReportGenerator&version=4.0.4" -#tool "nuget:?package=vswhere&version=2.5.2" +#tool "nuget:?package=vswhere&version=2.5.9" #tool "nuget:?package=xunit.runner.console&version=2.4.1" #tool "nuget:?package=Codecov&version=1.1.0" -#tool "nuget:?package=OpenCover&version=4.7.906-rc" +#tool "nuget:?package=ReportGenerator&version=4.0.9" ////////////////////////////////////////////////////////////////////// // DOTNET TOOLS ////////////////////////////////////////////////////////////////////// #tool "dotnet:?package=SignClient&version=1.0.82" +#tool "dotnet:?package=coverlet.console&version=1.4.1" #tool "dotnet:?package=nbgv&version=2.3.38" +////////////////////////////////////////////////////////////////////// +// CONSTANTS +////////////////////////////////////////////////////////////////////// + +const string project = "ReactiveUI"; + +// Whitelisted Packages +var packageWhitelist = new List +{ + "ReactiveUI", + "ReactiveUI.Testing", + "ReactiveUI.Events", + "ReactiveUI.Events.XamEssentials", + "ReactiveUI.Events.XamForms", + "ReactiveUI.Fody", + "ReactiveUI.Fody.Helpers", + "ReactiveUI.AndroidSupport", + "ReactiveUI.XamForms", +}; + +if (IsRunningOnWindows()) +{ + packageWhitelist.AddRange(new [] + { + "ReactiveUI.Blend", + "ReactiveUI.WPF", + "ReactiveUI.Winforms", + "ReactiveUI.Events.WPF", + "ReactiveUI.Events.Winforms", + // TODO: seems the leak tests never worked as part of the CI, fix. For the moment just make sure it compiles. + "ReactiveUI.LeakTests" + }); +} + +var packageTestWhitelist = new List +{ + "ReactiveUI.Tests", +}; + +if (IsRunningOnWindows()) +{ + packageTestWhitelist.AddRange(new[] + { + "ReactiveUI.Fody.Tests" + }); +} + +var coverageTestFrameworks = new List +{ + "netcoreapp2.0" +}; + +if (IsRunningOnWindows()) +{ + coverageTestFrameworks.Add("net461"); +} + +var eventGenerators = new List<(string targetName, string destination)> +{ + ("android", "src/ReactiveUI.Events/"), + ("ios", "src/ReactiveUI.Events/"), + ("mac", "src/ReactiveUI.Events/"), + ("tizen4", "src/ReactiveUI.Events/"), + ("essentials", "src/ReactiveUI.Events.XamEssentials/"), + ("tvos", "src/ReactiveUI.Events/"), + ("xamforms", "src/ReactiveUI.Events.XamForms/"), +}; + +if (IsRunningOnWindows()) +{ + eventGenerators.AddRange(new [] + { + ("wpf", "src/ReactiveUI.Events.WPF/"), + ("uwp", "src/ReactiveUI.Events/"), + ("winforms", "src/ReactiveUI.Events.Winforms/"), + }); +} + ////////////////////////////////////////////////////////////////////// // ARGUMENTS ////////////////////////////////////////////////////////////////////// @@ -65,94 +141,45 @@ var treatWarningsAsErrors = false; // Build configuration var local = BuildSystem.IsLocalBuild; var isPullRequest = !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("SYSTEM_PULLREQUEST_PULLREQUESTNUMBER")); -var isRepository = StringComparer.OrdinalIgnoreCase.Equals("reactiveui/reactiveui", TFBuild.Environment.Repository.RepoName); +var isRepository = StringComparer.OrdinalIgnoreCase.Equals($"reactiveui/{project}", TFBuild.Environment.Repository.RepoName); -var vsWhereSettings = new VSWhereLatestSettings() { IncludePrerelease = includePrerelease }; -var vsLocation = string.IsNullOrWhiteSpace(vsLocationString) ? VSWhereLatest(vsWhereSettings) : new DirectoryPath(vsLocationString); -var msBuildPath = string.IsNullOrWhiteSpace(msBuildPathString) ? vsLocation.CombineWithFilePath("./MSBuild/15.0/Bin/MSBuild.exe") : new FilePath(msBuildPathString); +FilePath msBuildPath = null; +DirectoryPath referenceAssembliesPath = null; +if (IsRunningOnWindows()) +{ + var vsWhereSettings = new VSWhereLatestSettings() { IncludePrerelease = includePrerelease }; + var vsLocation = string.IsNullOrWhiteSpace(vsLocationString) ? VSWhereLatest(vsWhereSettings) : new DirectoryPath(vsLocationString); + msBuildPath = string.IsNullOrWhiteSpace(msBuildPathString) ? vsLocation.CombineWithFilePath("./MSBuild/15.0/Bin/MSBuild.exe") : new FilePath(msBuildPathString); + referenceAssembliesPath = vsLocation.Combine("./Common7/IDE/ReferenceAssemblies/Microsoft/Framework"); +} +else +{ + referenceAssembliesPath = Directory("⁨/Library⁩/Frameworks⁩/Libraries/⁨mono⁩"); +} -var informationalVersion = EnvironmentVariable("GitAssemblyInformationalVersion"); +////////////////////////////////////////////////////////////////////// +// FOLDERS +////////////////////////////////////////////////////////////////////// // Artifacts var artifactDirectory = "./artifacts/"; var testsArtifactDirectory = artifactDirectory + "tests/"; -var eventsArtifactDirectory = artifactDirectory + "Events/"; var binariesArtifactDirectory = artifactDirectory + "binaries/"; var packagesArtifactDirectory = artifactDirectory + "packages/"; - -// OpenCover file location -var testCoverageOutputFile = MakeAbsolute(File(testsArtifactDirectory + "OpenCover.xml")); - -// Whitelisted Packages -var packageWhitelist = new[] -{ - "ReactiveUI", - "ReactiveUI.Testing", - "ReactiveUI.Events", - "ReactiveUI.Events.WPF", - "ReactiveUI.Events.Winforms", - "ReactiveUI.Events.XamEssentials", - "ReactiveUI.Events.XamForms", - "ReactiveUI.Fody", - "ReactiveUI.Fody.Helpers", - "ReactiveUI.AndroidSupport", - "ReactiveUI.Blend", - "ReactiveUI.WPF", - "ReactiveUI.Winforms", - "ReactiveUI.XamForms", - // TODO: seems the leak tests never worked as part of the CI, fix. For the moment just make sure it compiles. - "ReactiveUI.LeakTests" -}; - -(string projectName, bool performCoverageTesting)[] packageTestWhitelist = new[] -{ - ("ReactiveUI.Tests", true), - ("ReactiveUI.Fody.Tests", true), -}; - -(string name, bool performCoverageTesting)[] testFrameworks = new[] -{ - ("net461", true), - ("netcoreapp2.0", false), -}; - -(string targetName, string destination)[] eventGenerators = new[] -{ - ("android", "src/ReactiveUI.Events/"), - ("ios", "src/ReactiveUI.Events/"), - ("mac", "src/ReactiveUI.Events/"), - ("uwp", "src/ReactiveUI.Events/"), - ("tizen4", "src/ReactiveUI.Events/"), - ("wpf", "src/ReactiveUI.Events.WPF/"), - ("xamforms", "src/ReactiveUI.Events.XamForms/"), - ("winforms", "src/ReactiveUI.Events.Winforms/"), - ("essentials", "src/ReactiveUI.Events.XamEssentials/"), - ("tvos", "src/ReactiveUI.Events/"), -}; - -// Define global marcos. -Action Abort = () => { throw new Exception("a non-recoverable fatal error occurred."); }; +var eventsArtifactDirectory = artifactDirectory + "Events/"; /////////////////////////////////////////////////////////////////////////////// // SETUP / TEARDOWN /////////////////////////////////////////////////////////////////////////////// Setup(context => { - if (!IsRunningOnWindows()) - { - throw new NotImplementedException("ReactiveUI will only build on Windows (w/Xamarin installed) because it's not possible to target UWP, WPF and Windows Forms from UNIX."); - } - - Information("Building version {0} of ReactiveUI.", informationalVersion); + StartProcess(Context.Tools.Resolve("nbgv*").ToString(), "cloud"); - CreateDirectory(artifactDirectory); CleanDirectories(artifactDirectory); CreateDirectory(testsArtifactDirectory); - CreateDirectory(eventsArtifactDirectory); CreateDirectory(binariesArtifactDirectory); CreateDirectory(packagesArtifactDirectory); - - StartProcess(Context.Tools.Resolve("nbgv.*").ToString(), "cloud"); + CreateDirectory(eventsArtifactDirectory); }); Teardown(context => @@ -160,11 +187,10 @@ Teardown(context => // Executed AFTER the last task. }); - ////////////////////////////////////////////////////////////////////// // HELPER METHODS ////////////////////////////////////////////////////////////////////// -Action Build = (solution, packageOutputPath) => +Action Build = (solution, packageOutputPath, doNotOptimise) => { Information("Building {0} using {1}", solution, msBuildPath); @@ -184,6 +210,11 @@ Action Build = (solution, packageOutputPath) => msBuildSettings = msBuildSettings.WithProperty("PackageOutputPath", MakeAbsolute(Directory(packageOutputPath)).ToString().Quote()); } + if (doNotOptimise) + { + msBuildSettings = msBuildSettings.WithProperty("Optimize", "False"); + } + MSBuild(solution, msBuildSettings); }; @@ -194,7 +225,7 @@ Action Build = (solution, packageOutputPath) => Task("BuildEventBuilder") .Does(() => { - Build("./src/EventBuilder.sln", artifactDirectory + "eventbuilder"); + Build("./src/EventBuilder.sln", artifactDirectory + "eventbuilder", false); }); Task("GenerateEvents") @@ -203,12 +234,11 @@ Task("GenerateEvents") { var workingDirectory = MakeAbsolute(Directory("./src/EventBuilder/bin/Release/netcoreapp2.1")); var eventBuilder = workingDirectory + "/EventBuilder.dll"; - var referenceAssembliesPath = vsLocation.CombineWithFilePath("./Common7/IDE/ReferenceAssemblies/Microsoft/Framework"); - - Information(referenceAssembliesPath.ToString()); - Action generate = (string platform, string directory) => + foreach (var eventGenerator in eventGenerators) { + var (platform, directory) = eventGenerator; + var settings = new DotNetCoreExecuteSettings { WorkingDirectory = workingDirectory, @@ -227,106 +257,72 @@ Task("GenerateEvents") settings); Information("The events have been written to '{0}'", output); - }; - - Parallel.ForEach(eventGenerators, arg => generate(arg.targetName, arg.destination)); + } CopyFiles(GetFiles("./src/ReactiveUI.**/Events_*.cs"), Directory(eventsArtifactDirectory)); }); -Task("BuildReactiveUIPackages") +Task("Build") .IsDependentOn("GenerateEvents") .Does (() => { + // Clean the directories since we'll need to re-generate the debug type. - CleanDirectories("./src/**/obj/Release"); - CleanDirectories("./src/**/bin/Release"); + CleanDirectories($"./src/**/obj/{configuration}"); + CleanDirectories($"./src/**/bin/{configuration}"); foreach(var packageName in packageWhitelist) { - Build($"./src/{packageName}/{packageName}.csproj", packagesArtifactDirectory); + Build($"./src/{packageName}/{packageName}.csproj", packagesArtifactDirectory, false); } - CopyFiles(GetFiles("./src/**/bin/Release/**/*"), Directory(binariesArtifactDirectory), true); + CopyFiles(GetFiles($"./src/**/bin/{configuration}/**/*"), Directory(binariesArtifactDirectory), true); }); Task("RunUnitTests") - .IsDependentOn("GenerateEvents") .Does(() => { - var fodyPackages = new string[] - { - "ReactiveUI.Fody", - "ReactiveUI.Fody.Helpers", - }; - - // Clean the directories since we'll need to re-generate the debug type. - CleanDirectories("./src/**/obj/Release"); - CleanDirectories("./src/**/bin/Release"); - - foreach (var packageName in fodyPackages) - { - Build($"./src/{packageName}/{packageName}.csproj", null); - } - - var openCoverSettings = new OpenCoverSettings { - ReturnTargetCodeOffset = 0, - MergeOutput = true, - } - .WithFilter("+[ReactiveUI*]*") - .WithFilter("-[*.Testing]*") - .WithFilter("-[*.Tests*]*") - .WithFilter("-[ReactiveUI.Events*]*") - .WithFilter("-[ReactiveUI*]ReactiveUI.*Legacy*") - .WithFilter("-[ReactiveUI*]ThisAssembly*") - .ExcludeByAttribute("*.ExcludeFromCodeCoverage*") - .ExcludeByFile("*/*Designer.cs") - .ExcludeByFile("*/*.g.cs") - .ExcludeByFile("*/*.g.i.cs") - .ExcludeByFile("*splat/splat*") - .ExcludeByFile("*ApprovalTests*"); - - var xunitSettings = new XUnit2Settings { - HtmlReport = true, - OutputDirectory = testsArtifactDirectory, - NoAppDomain = true - }; - - foreach (var packageDetails in packageTestWhitelist) + foreach (var packageName in packageTestWhitelist) { - var packageName = packageDetails.projectName; var projectName = $"./src/{packageName}/{packageName}.csproj"; - Build(projectName, null); - - foreach (var testFramework in testFrameworks) + Build(projectName, null, true); + + foreach (var testFramework in coverageTestFrameworks) { - if (testFramework.performCoverageTesting && packageDetails.performCoverageTesting) - { - Information($"Generate OpenCover information for {packageName} {testFramework.name}"); - OpenCover( - tool => tool.XUnit2($"./src/{packageName}/bin/{configuration}/{testFramework.name}/**/*.Tests.dll", xunitSettings), - testCoverageOutputFile, - openCoverSettings); - } - else - { - Information($"Running unit tests only for {packageName} {testFramework.name}"); - var testSettings = new DotNetCoreTestSettings { - NoBuild = true, - Framework = testFramework.name, - Configuration = configuration, - ResultsDirectory = testsArtifactDirectory, - Logger = $"trx;LogFileName=testresults-{packageName}-{testFramework.name}.trx", - TestAdapterPath = GetDirectories("./tools/xunit.runner.console*/**/netcoreapp2.0").FirstOrDefault(), - }; - - DotNetCoreTest(projectName, testSettings); - } + Information($"Performing coverage tests on {packageName} on framework {testFramework}"); + + var testFile = $"./src/{packageName}/bin/{configuration}/{testFramework}/{packageName}.dll"; + + StartProcess(Context.Tools.Resolve("coverlet*").ToString(), new ProcessSettings { + RedirectStandardOutput = true, + RedirectStandardError = true, + Arguments = new ProcessArgumentBuilder() + .AppendQuoted(testFile) + .AppendSwitch("--include", $"[{project}*]*") + .AppendSwitch("--exclude", "[*.Tests*]*") + .AppendSwitch("--exclude", "[*]*Legacy*") + .AppendSwitch("--exclude", "[*]*ThisAssembly*") + .AppendSwitch("--exclude-by-file", "*ApprovalTests*") + .AppendSwitchQuoted("--output", testsArtifactDirectory + $"testcoverage-{packageName}-{testFramework}.xml") + .AppendSwitch("--format", "cobertura") + .AppendSwitch("--target", "dotnet") + .AppendSwitchQuoted("--targetargs", $"test {projectName} --no-build -c {configuration} --logger:trx;LogFileName=testresults-{packageName}-{testFramework}.trx -r {MakeAbsolute(Directory(testsArtifactDirectory))}") + }); + + Information($"Finished coverage testing {packageName}"); } } - ReportGenerator(testCoverageOutputFile, testsArtifactDirectory + "Report/"); -}).ReportError(exception => + // Generate both a summary and a combined summary. + ReportGenerator( + GetFiles($"{testsArtifactDirectory}**/testcoverage-*.xml"), + testsArtifactDirectory + "report/", + new ReportGeneratorSettings + { + ReportTypes = new[] { ReportGeneratorReportType.Cobertura, ReportGeneratorReportType.Html }, + }); +}) +.ReportError(exception => { var apiApprovals = GetFiles("./**/ApiApprovalTests.*"); CopyFiles(apiApprovals, artifactDirectory); @@ -340,16 +336,25 @@ Task("UploadTestCoverage") { // Resolve the API key. var token = EnvironmentVariable("CODECOV_TOKEN"); + + if(EnvironmentVariable("CODECOV_TOKEN") == null) + { + throw new Exception("Codecov token not found, not sending code coverage data."); + } + if (!string.IsNullOrEmpty(token)) { - Information("Upload {0} to Codecov server", testCoverageOutputFile); + var testCoverageOutputFile = MakeAbsolute(File(testsArtifactDirectory + "Report/Cobertura.xml")); + Information("Upload {0} to Codecov server", testCoverageOutputFile); + // Upload a coverage report. Codecov(testCoverageOutputFile.ToString(), token); } }); Task("SignPackages") + .IsDependentOn("Build") .WithCriteria(() => !local) .WithCriteria(() => !isPullRequest) .Does(() => @@ -365,7 +370,7 @@ Task("SignPackages") var packageName = nupkg.GetFilenameWithoutExtension(); Information($"Submitting {packageName} for signing"); - StartProcess(Context.Tools.Resolve("SignClient.*").ToString(), new ProcessSettings { + StartProcess(Context.Tools.Resolve("SignClient*").ToString(), new ProcessSettings { RedirectStandardOutput = true, RedirectStandardError = true, Arguments = new ProcessArgumentBuilder() @@ -386,36 +391,19 @@ Task("SignPackages") }); Task("Package") - .IsDependentOn("BuildReactiveUIPackages") - .IsDependentOn("PinNuGetDependencies") + .IsDependentOn("Build") .IsDependentOn("SignPackages") .Does (() => { }); -Task("PinNuGetDependencies") - .Does (() => -{ - var packages = GetFiles(artifactDirectory + "*.nupkg"); - foreach(var package in packages) - { - // only pin whitelisted packages. - if(packageWhitelist.Any(p => package.GetFilename().ToString().StartsWith(p, StringComparison.OrdinalIgnoreCase))) - { - // see https://github.com/cake-contrib/Cake.PinNuGetDependency - PinNuGetDependency(package, "ReactiveUI"); - } - } -}); - - - ////////////////////////////////////////////////////////////////////// // TASK TARGETS ////////////////////////////////////////////////////////////////////// Task("Default") .IsDependentOn("Package") + .IsDependentOn("RunUnitTests") .Does (() => { }); @@ -424,4 +412,4 @@ Task("Default") // EXECUTION ////////////////////////////////////////////////////////////////////// -RunTarget(target); +RunTarget(target); \ No newline at end of file diff --git a/build.config b/build.config new file mode 100644 index 0000000000..35f6513467 --- /dev/null +++ b/build.config @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +CAKE_VERSION=0.32.1 \ No newline at end of file diff --git a/build.sh b/build.sh index 1cda2241cd..8c2183fdd4 100755 --- a/build.sh +++ b/build.sh @@ -1,102 +1,51 @@ #!/usr/bin/env bash - -########################################################################## -# This is the Cake bootstrapper script for Linux and OS X. -# This file was downloaded from https://github.com/cake-build/resources -# Feel free to change this file to fit your needs. -########################################################################## - -# Define directories. +# Define varibles SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +source $SCRIPT_DIR/build.config TOOLS_DIR=$SCRIPT_DIR/tools -NUGET_EXE=$TOOLS_DIR/nuget.exe -CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe -PACKAGES_CONFIG=$TOOLS_DIR/packages.config -PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum - -# Define md5sum or md5 depending on Linux/OSX -MD5_EXE= -if [[ "$(uname -s)" == "Darwin" ]]; then - MD5_EXE="md5 -r" -else - MD5_EXE="md5sum" -fi - -# Define default arguments. -SCRIPT="build.cake" -TARGET="Default" -CONFIGURATION="Release" -VERBOSITY="verbose" -DRYRUN= -SHOW_VERSION=false -SCRIPT_ARGUMENTS=() - -# Parse arguments. -for i in "$@"; do - case $1 in - -s|--script) SCRIPT="$2"; shift ;; - -t|--target) TARGET="$2"; shift ;; - -c|--configuration) CONFIGURATION="$2"; shift ;; - -v|--verbosity) VERBOSITY="$2"; shift ;; - -d|--dryrun) DRYRUN="-dryrun" ;; - --version) SHOW_VERSION=true ;; - --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; - *) SCRIPT_ARGUMENTS+=("$1") ;; - esac - shift -done +CAKE_EXE=$TOOLS_DIR/dotnet-cake +CAKE_PATH=$TOOLS_DIR/.store/cake.tool/$CAKE_VERSION # Make sure the tools folder exist. if [ ! -d "$TOOLS_DIR" ]; then mkdir "$TOOLS_DIR" fi -# Make sure that packages.config exist. -if [ ! -f "$TOOLS_DIR/packages.config" ]; then - echo "Downloading packages.config..." - curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages - if [ $? -ne 0 ]; then - echo "An error occurred while downloading packages.config." - exit 1 +########################################################################### +# INSTALL CAKE +########################################################################### +export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 +export DOTNET_CLI_TELEMETRY_OPTOUT=1 +export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0 + +CAKE_INSTALLED_VERSION=$(dotnet-cake --version 2>&1) + +if [ "$CAKE_VERSION" != "$CAKE_INSTALLED_VERSION" ]; then + if [ ! -f "$CAKE_EXE" ] || [ ! -d "$CAKE_PATH" ]; then + if [ -f "$CAKE_EXE" ]; then + dotnet tool uninstall --tool-path $TOOLS_DIR Cake.Tool + fi + + echo "Installing Cake $CAKE_VERSION..." + dotnet tool install --tool-path $TOOLS_DIR --version $CAKE_VERSION Cake.Tool + if [ $? -ne 0 ]; then + echo "An error occured while installing Cake." + exit 1 + fi fi -fi -# Download NuGet if it does not exist. -if [ ! -f "$NUGET_EXE" ]; then - echo "Downloading NuGet..." - curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe - if [ $? -ne 0 ]; then - echo "An error occurred while downloading nuget.exe." + # Make sure that Cake has been installed. + if [ ! -f "$CAKE_EXE" ]; then + echo "Could not find Cake.exe at '$CAKE_EXE'." exit 1 fi +else + CAKE_EXE="dotnet-cake" fi -# Restore tools from NuGet. -pushd "$TOOLS_DIR" >/dev/null -if [ ! -f $PACKAGES_CONFIG_MD5 ] || [ "$( cat $PACKAGES_CONFIG_MD5 | sed 's/\r$//' )" != "$( $MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' )" ]; then - find . -type d ! -name . | xargs rm -rf -fi - -mono "$NUGET_EXE" install -ExcludeVersion -if [ $? -ne 0 ]; then - echo "Could not restore NuGet packages." - exit 1 -fi - -$MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' >| $PACKAGES_CONFIG_MD5 - -popd >/dev/null - -# Make sure that Cake has been installed. -if [ ! -f "$CAKE_EXE" ]; then - echo "Could not find Cake.exe at '$CAKE_EXE'." - exit 1 -fi +########################################################################### +# RUN BUILD SCRIPT +########################################################################### # Start Cake -if $SHOW_VERSION; then - exec mono "$CAKE_EXE" -version -else - exec mono "$CAKE_EXE" --bootstrap - exec mono "$CAKE_EXE" $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" -fi \ No newline at end of file +(exec "$CAKE_EXE" --bootstrap) && (exec "$CAKE_EXE" "$@") \ No newline at end of file diff --git a/src/Directory.build.props b/src/Directory.build.props index 983bcad946..84ceab5b22 100644 --- a/src/Directory.build.props +++ b/src/Directory.build.props @@ -16,6 +16,10 @@ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb $(MSBuildThisFileDirectory)analyzers.ruleset + + + false + $(EnableSourceLink) diff --git a/src/EventBuilder/EventBuilder.csproj b/src/EventBuilder/EventBuilder.csproj index 4acc36ef73..f700cbf9f8 100644 --- a/src/EventBuilder/EventBuilder.csproj +++ b/src/EventBuilder/EventBuilder.csproj @@ -5,6 +5,7 @@ EventBuilder EventBuilder latest + false diff --git a/src/EventBuilder/PlatformHelper.cs b/src/EventBuilder/PlatformHelper.cs index a9a3a154a4..e8e8dede5d 100644 --- a/src/EventBuilder/PlatformHelper.cs +++ b/src/EventBuilder/PlatformHelper.cs @@ -4,6 +4,7 @@ // See the LICENSE file in the project root for full license information. using System; +using System.Runtime.InteropServices; namespace EventBuilder { @@ -12,7 +13,7 @@ namespace EventBuilder /// public static class PlatformHelper { - private static readonly Lazy _IsRunningOnMono = new Lazy(() => Type.GetType("Mono.Runtime") != null); + private static readonly Lazy _IsRunningOnMono = new Lazy(() => !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)); /// /// Determines whether the platform is running on mono. diff --git a/src/EventBuilder/Platforms/Android.cs b/src/EventBuilder/Platforms/Android.cs index ceede94136..c2285ab2c6 100644 --- a/src/EventBuilder/Platforms/Android.cs +++ b/src/EventBuilder/Platforms/Android.cs @@ -4,6 +4,7 @@ // See the LICENSE file in the project root for full license information. using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -17,6 +18,8 @@ namespace EventBuilder.Platforms /// public class Android : BasePlatform { + private const string DesiredVersion = "v8.1"; + private readonly string _referenceAssembliesLocation; /// @@ -34,37 +37,31 @@ public Android(string referenceAssembliesLocation) /// public override Task Extract() { + var sdks = new List(); if (PlatformHelper.IsRunningOnMono()) { - var sdks = - Directory.GetFiles( - @"/Library/Frameworks/Xamarin.Android.framework/Libraries/xbuild-frameworks/MonoAndroid", - "Mono.Android.dll", - SearchOption.AllDirectories); - - var latestVersion = sdks.Last(); - Assemblies.Add(latestVersion); - - CecilSearchDirectories.Add(Path.GetDirectoryName(latestVersion)); CecilSearchDirectories.Add( "/Library/Frameworks/Xamarin.Android.framework/Libraries/xbuild-frameworks/MonoAndroid/v1.0"); + + sdks.AddRange(Directory.GetFiles( + "/Library/Frameworks/Xamarin.Android.framework/Libraries/xbuild-frameworks/MonoAndroid", + "Mono.Android.dll", + SearchOption.AllDirectories)); } else { - var assemblies = - Directory.GetFiles( + CecilSearchDirectories.Add(Path.Combine(_referenceAssembliesLocation, "MonoAndroid", "v1.0")); + sdks.AddRange(Directory.GetFiles( Path.Combine(_referenceAssembliesLocation, "MonoAndroid"), "Mono.Android.dll", - SearchOption.AllDirectories); - - // Pin to a particular framework version https://github.com/reactiveui/ReactiveUI/issues/1517 - var latestVersion = assemblies.Last(x => x.Contains("v8.1", StringComparison.InvariantCulture)); - Assemblies.Add(latestVersion); - - CecilSearchDirectories.Add(Path.GetDirectoryName(latestVersion)); - CecilSearchDirectories.Add(Path.Combine(_referenceAssembliesLocation, "MonoAndroid", "v1.0")); + SearchOption.AllDirectories)); } + // Pin to a particular framework version https://github.com/reactiveui/ReactiveUI/issues/1517 + var latestVersion = sdks.Last(x => x.Contains(DesiredVersion, StringComparison.InvariantCulture)); + Assemblies.Add(latestVersion); + CecilSearchDirectories.Add(Path.GetDirectoryName(latestVersion)); + return Task.CompletedTask; } } diff --git a/src/EventBuilder/Platforms/tvOS.cs b/src/EventBuilder/Platforms/tvOS.cs index 2e6464ddab..fb2e821ce6 100644 --- a/src/EventBuilder/Platforms/tvOS.cs +++ b/src/EventBuilder/Platforms/tvOS.cs @@ -36,7 +36,7 @@ public override Task Extract() if (PlatformHelper.IsRunningOnMono()) { var assembly = - @"/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.TVOS10/Xamarin.TVOS10.dll"; + @"/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.TVOS/Xamarin.TVOS.dll"; Assemblies.Add(assembly); CecilSearchDirectories.Add(Path.GetDirectoryName(assembly)); diff --git a/src/EventBuilder/Program.cs b/src/EventBuilder/Program.cs index af656c9adb..46c524883b 100644 --- a/src/EventBuilder/Program.cs +++ b/src/EventBuilder/Program.cs @@ -23,7 +23,9 @@ namespace EventBuilder internal static class Program { private static string _mustacheTemplate = "DefaultTemplate.mustache"; - private static string _referenceAssembliesLocation = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework"; + private static string _referenceAssembliesLocation = PlatformHelper.IsRunningOnMono() ? + @"/Library⁩/Frameworks⁩/Libraries/⁨mono⁩" : + @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework"; public static async Task Main(string[] args) { @@ -34,7 +36,7 @@ public static async Task Main(string[] args) // allow app to be debugged in visual studio. if (Debugger.IsAttached) { - args = "--platform=essentials --output-path=test.txt".Split(' '); + args = "--platform=android --output-path=test.txt".Split(' '); } await new Parser(parserSettings => parserSettings.CaseInsensitiveEnumValues = true).ParseArguments(args).MapResult( diff --git a/src/ReactiveUI.Events/ReactiveUI.Events.csproj b/src/ReactiveUI.Events/ReactiveUI.Events.csproj index 5eca28ca08..aae5109996 100644 --- a/src/ReactiveUI.Events/ReactiveUI.Events.csproj +++ b/src/ReactiveUI.Events/ReactiveUI.Events.csproj @@ -1,6 +1,7 @@  - uap10.0.16299;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;tizen40 + Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;tizen40 + $(TargetFrameworks);net461;uap10.0.16299 ReactiveUI.Events ReactiveUI.Events Provides Observable-based events API for common UI controls/eventhandlers. The contents of this package is automatically generated, please target pull-requests to the code generator. diff --git a/src/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.csproj b/src/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.csproj index 1f86de5026..81beeb4e40 100644 --- a/src/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.csproj +++ b/src/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.csproj @@ -1,12 +1,16 @@  - netstandard2.0;net461;uap10.0.16299;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;netcoreapp2.0 + netstandard2.0;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;netcoreapp2.0 + $(TargetFrameworks);net461;uap10.0.16299 Fody extension to generate RaisePropertyChange notifications for properties and ObservableAsPropertyHelper properties. ReactiveUI.Fody ..\$(PackageId)\bin\$(Configuration)\ False + + + false diff --git a/src/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj b/src/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj index 4be1806f2d..60b5891d24 100644 --- a/src/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj +++ b/src/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj @@ -1,6 +1,9 @@  - net461;netcoreapp2.0 + netcoreapp2.0 + $(TargetFrameworks);net461 + netstandard2.0 + $(TargetFramework) @@ -8,19 +11,23 @@ + + + + - + - + diff --git a/src/ReactiveUI.Fody/ReactiveUI.Fody.csproj b/src/ReactiveUI.Fody/ReactiveUI.Fody.csproj index 4aa843ba38..7710f53b12 100644 --- a/src/ReactiveUI.Fody/ReactiveUI.Fody.csproj +++ b/src/ReactiveUI.Fody/ReactiveUI.Fody.csproj @@ -1,6 +1,7 @@ - + - netstandard2.0;net461 + netstandard2.0 + $(TargetFrameworks);net461 Fody Weavers for ReactiveUI.Fody. False diff --git a/src/ReactiveUI.Mac.sln b/src/ReactiveUI.Mac.sln new file mode 100644 index 0000000000..22ef441963 --- /dev/null +++ b/src/ReactiveUI.Mac.sln @@ -0,0 +1,481 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.15 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BD9762CF-E104-481C-96A6-26E624B86283}" + ProjectSection(SolutionItems) = preProject + analyzers.ruleset = analyzers.ruleset + analyzers.tests.ruleset = analyzers.tests.ruleset + Directory.build.props = Directory.build.props + Directory.build.targets = Directory.build.targets + global.json = global.json + ..\stylecop.json = ..\stylecop.json + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI", "ReactiveUI\ReactiveUI.csproj", "{464CB812-F99F-401B-BE4C-E8F0515CD19D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.AndroidSupport", "ReactiveUI.AndroidSupport\ReactiveUI.AndroidSupport.csproj", "{F5A6E11B-B074-4A1C-B937-267D840E31DF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.Testing", "ReactiveUI.Testing\ReactiveUI.Testing.csproj", "{DDF89A7A-5CC9-4243-98E4-462860D5D963}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.XamForms", "ReactiveUI.XamForms\ReactiveUI.XamForms.csproj", "{84A9E530-93D7-4108-9887-690127F70AF5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.Tests", "ReactiveUI.Tests\ReactiveUI.Tests.csproj", "{2ADE0A50-5012-4341-8F4F-97597C2D6920}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.Fody", "ReactiveUI.Fody\ReactiveUI.Fody.csproj", "{7DE43BB9-5AC8-446A-8D8B-88C9201D802E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.Fody.Helpers", "ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.csproj", "{20750BB4-36DD-4F8C-B970-D7809810EC98}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveUI.Fody.Tests", "ReactiveUI.Fody.Tests\ReactiveUI.Fody.Tests.csproj", "{404B0F3F-7343-4E54-A863-F27B99FE788B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Ad-Hoc|Any CPU = Ad-Hoc|Any CPU + Ad-Hoc|ARM = Ad-Hoc|ARM + Ad-Hoc|iPhone = Ad-Hoc|iPhone + Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator + Ad-Hoc|Mixed Platforms = Ad-Hoc|Mixed Platforms + Ad-Hoc|x64 = Ad-Hoc|x64 + Ad-Hoc|x86 = Ad-Hoc|x86 + AppStore|Any CPU = AppStore|Any CPU + AppStore|ARM = AppStore|ARM + AppStore|iPhone = AppStore|iPhone + AppStore|iPhoneSimulator = AppStore|iPhoneSimulator + AppStore|Mixed Platforms = AppStore|Mixed Platforms + AppStore|x64 = AppStore|x64 + AppStore|x86 = AppStore|x86 + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|Mixed Platforms = Release|Mixed Platforms + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|Any CPU.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|ARM.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|x64.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.AppStore|x86.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|ARM.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|x64.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Debug|x86.ActiveCfg = Debug|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|Any CPU.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|ARM.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|iPhone.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|x64.ActiveCfg = Release|Any CPU + {464CB812-F99F-401B-BE4C-E8F0515CD19D}.Release|x86.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|Any CPU.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|ARM.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|x64.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.AppStore|x86.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|x64.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Debug|x86.ActiveCfg = Debug|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|Any CPU.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|ARM.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|iPhone.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|x64.ActiveCfg = Release|Any CPU + {F5A6E11B-B074-4A1C-B937-267D840E31DF}.Release|x86.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|ARM.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|iPhone.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|x64.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|x64.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|x86.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.AppStore|x86.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|ARM.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|iPhone.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|x64.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|x64.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|x86.ActiveCfg = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Debug|x86.Build.0 = Debug|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|Any CPU.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|ARM.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|ARM.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|iPhone.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|iPhone.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|x64.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|x64.Build.0 = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|x86.ActiveCfg = Release|Any CPU + {DDF89A7A-5CC9-4243-98E4-462860D5D963}.Release|x86.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|ARM.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|iPhone.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|x64.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|x64.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|x86.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.AppStore|x86.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|ARM.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|iPhone.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|x64.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|x64.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|x86.ActiveCfg = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Debug|x86.Build.0 = Debug|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|Any CPU.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|ARM.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|ARM.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|iPhone.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|iPhone.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|x64.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|x64.Build.0 = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|x86.ActiveCfg = Release|Any CPU + {84A9E530-93D7-4108-9887-690127F70AF5}.Release|x86.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|ARM.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|iPhone.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|x64.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|x64.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|x86.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.AppStore|x86.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|ARM.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|iPhone.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|x64.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|x64.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|x86.ActiveCfg = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Debug|x86.Build.0 = Debug|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|Any CPU.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|ARM.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|ARM.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|iPhone.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|iPhone.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|x64.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|x64.Build.0 = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|x86.ActiveCfg = Release|Any CPU + {2ADE0A50-5012-4341-8F4F-97597C2D6920}.Release|x86.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|ARM.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|Mixed Platforms.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|Mixed Platforms.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|x64.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Ad-Hoc|x86.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|Any CPU.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|Any CPU.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|ARM.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|ARM.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|iPhone.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|iPhone.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|Mixed Platforms.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|Mixed Platforms.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|x64.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|x64.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|x86.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.AppStore|x86.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|ARM.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|iPhone.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|x64.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|x64.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|x86.ActiveCfg = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Debug|x86.Build.0 = Debug|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|Any CPU.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|ARM.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|ARM.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|iPhone.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|iPhone.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|x64.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|x64.Build.0 = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|x86.ActiveCfg = Release|Any CPU + {7DE43BB9-5AC8-446A-8D8B-88C9201D802E}.Release|x86.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|ARM.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|iPhone.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|x64.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|x64.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|x86.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.AppStore|x86.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|ARM.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|ARM.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|iPhone.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|x64.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|x64.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|x86.ActiveCfg = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Debug|x86.Build.0 = Debug|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|Any CPU.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|ARM.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|ARM.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|iPhone.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|iPhone.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|x64.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|x64.Build.0 = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|x86.ActiveCfg = Release|Any CPU + {20750BB4-36DD-4F8C-B970-D7809810EC98}.Release|x86.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|Mixed Platforms.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|Mixed Platforms.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|ARM.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|iPhone.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|Mixed Platforms.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|Mixed Platforms.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|x64.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|x64.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|x86.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.AppStore|x86.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|ARM.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|iPhone.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|x64.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|x64.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|x86.ActiveCfg = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Debug|x86.Build.0 = Debug|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|Any CPU.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|ARM.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|ARM.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|iPhone.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|iPhone.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|x64.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|x64.Build.0 = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|x86.ActiveCfg = Release|Any CPU + {404B0F3F-7343-4E54-A863-F27B99FE788B}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9326B58C-0AD3-4527-B3F4-86B54673C62E} + EndGlobalSection + GlobalSection(TestCaseManagementSettings) = postSolution + CategoryFile = ReactiveUI.vsmdi + EndGlobalSection +EndGlobal diff --git a/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj b/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj index dd9e710c8d..feb38f6b95 100644 --- a/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj +++ b/src/ReactiveUI.Testing/ReactiveUI.Testing.csproj @@ -1,6 +1,7 @@  - netstandard2.0;netcoreapp2.0;net461;uap10.0.16299;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81 + netstandard2.0;netcoreapp2.0;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81 + $(TargetFrameworks);net461;uap10.0.16299 ReactiveUI.Testing ReactiveUI.Testing A library to aid in writing unit tests for ReactiveUI projects diff --git a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj index 0de8591fcc..05fff3db72 100644 --- a/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj +++ b/src/ReactiveUI.Tests/ReactiveUI.Tests.csproj @@ -1,7 +1,8 @@  - net461;netcoreapp2.0;uap10.0.16299 + netcoreapp2.0 + $(TargetFrameworks);net461;uap10.0.16299 @@ -9,7 +10,10 @@ - + + + + @@ -22,6 +26,7 @@ + @@ -38,6 +43,8 @@ + + @@ -49,10 +56,6 @@ - - - - diff --git a/src/ReactiveUI.sln b/src/ReactiveUI.sln index 1ef4b4d2ed..1157a620ad 100644 --- a/src/ReactiveUI.sln +++ b/src/ReactiveUI.sln @@ -4,8 +4,6 @@ VisualStudioVersion = 15.0.26730.15 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BD9762CF-E104-481C-96A6-26E624B86283}" ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - ..\.vsts-ci.yml = ..\.vsts-ci.yml analyzers.ruleset = analyzers.ruleset analyzers.tests.ruleset = analyzers.tests.ruleset Directory.build.props = Directory.build.props diff --git a/src/ReactiveUI/ReactiveUI.csproj b/src/ReactiveUI/ReactiveUI.csproj index 5b898668d8..ea51d551bc 100644 --- a/src/ReactiveUI/ReactiveUI.csproj +++ b/src/ReactiveUI/ReactiveUI.csproj @@ -1,6 +1,7 @@  - netstandard2.0;net461;uap10.0.16299;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;netcoreapp2.0;tizen40 + netstandard2.0;Xamarin.iOS10;Xamarin.Mac20;Xamarin.TVOS10;MonoAndroid81;netcoreapp2.0;tizen40 + $(TargetFrameworks);net461;uap10.0.16299 ReactiveUI ReactiveUI A MVVM framework that integrates with the Reactive Extensions for .NET to create elegant, testable User Interfaces that run on any mobile or desktop platform. Supports Xamarin.iOS, Xamarin.Android, Xamarin.Mac, Xamarin Forms, WPF, Windows Forms, Windows Phone 8.1, Windows Store and Universal Windows Platform (UWP). @@ -11,7 +12,6 @@ -