diff --git a/OptionsPattern.Sutdy.Experience.ConsoleApp/OptionsPattern.Sutdy.Experience.ConsoleApp.csproj b/OptionsPattern.Sutdy.Experience.ConsoleApp/OptionsPattern.Sutdy.Experience.ConsoleApp.csproj new file mode 100644 index 0000000..1fefe2c --- /dev/null +++ b/OptionsPattern.Sutdy.Experience.ConsoleApp/OptionsPattern.Sutdy.Experience.ConsoleApp.csproj @@ -0,0 +1,16 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + + + diff --git a/OptionsPattern.Sutdy.Experience.ConsoleApp/Program.cs b/OptionsPattern.Sutdy.Experience.ConsoleApp/Program.cs new file mode 100644 index 0000000..e906582 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience.ConsoleApp/Program.cs @@ -0,0 +1,10 @@ +namespace OptionsPattern.Sutdy.Experience.ConsoleApp +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("============ 选项模式:6.1.3 配置源的同步 ============"); + } + } +} \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json new file mode 100644 index 0000000..1cb9db7 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.custom.json @@ -0,0 +1,8 @@ +{ + "AppName": "customAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "custom@163.com", + "Recipient": "custom" + } +} diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json new file mode 100644 index 0000000..fd26658 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.development.json @@ -0,0 +1,8 @@ +{ + "AppName": "developmentAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "development@163.com", + "Recipient": "development" + } +} diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.ini b/OptionsPattern.Sutdy.Experience/Configs/appsettings.ini new file mode 100644 index 0000000..71ed5d4 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.ini @@ -0,0 +1,8 @@ +# App设置 +AppName=IniAppName +AppVersion=0.0.0.1 + +[Email] +#邮箱设置 +ReceiveAddress=ini@163.com +Recipient=ini \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.json new file mode 100644 index 0000000..3b859c1 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.json @@ -0,0 +1,8 @@ +{ + "AppName": "JsonAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "json@163.com", + "Recipient": "json" + } +} diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json b/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json new file mode 100644 index 0000000..48639b5 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.product.json @@ -0,0 +1,8 @@ +{ + "AppName": "productAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "product@163.com", + "Recipient": "product" + } +} diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.xml b/OptionsPattern.Sutdy.Experience/Configs/appsettings.xml new file mode 100644 index 0000000..f0d0846 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.xml @@ -0,0 +1,9 @@ + + + XmlAppName + 1.2.3.4 + + xml@163.com + xml + + diff --git a/OptionsPattern.Sutdy.Experience/Configs/appsettings.yml b/OptionsPattern.Sutdy.Experience/Configs/appsettings.yml new file mode 100644 index 0000000..0aeac52 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Configs/appsettings.yml @@ -0,0 +1,8 @@ +#yaml配置格式 +AppName: YamlAppName +AppVersion: 0.0.0.1 + +#邮件配置 +EMail: + ReceiveAddress: yaml@163.com + Recipient: yaml \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Experience/Options/AppOption.cs b/OptionsPattern.Sutdy.Experience/Options/AppOption.cs new file mode 100644 index 0000000..acb0cde --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Options/AppOption.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OptionsPattern.Sutdy.Experience +{ + public class AppOption + { + /// + /// 软件名 + /// + public string AppName { get; set; } = "IniAppName"; + + /// + /// 软件版本 + /// + public Version AppVersion { get; set; } = new Version( "0.0.0.1"); + + /// + /// 接收邮箱配置对象 + /// + public ReceiveMailOption? EMail { get; set; } + } +} diff --git a/OptionsPattern.Sutdy.Experience/Options/ReceiveMailOption.cs b/OptionsPattern.Sutdy.Experience/Options/ReceiveMailOption.cs new file mode 100644 index 0000000..46145b1 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Options/ReceiveMailOption.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OptionsPattern.Sutdy.Experience +{ + /// + /// 接收邮件配置 + /// + public class ReceiveMailOption + { + /// + /// 接收邮箱地址 + /// + public string? ReceiveAddress { get; set; } + + /// + /// 接收人 + /// + public string? Recipient{ get; set; } + } +} diff --git a/OptionsPattern.Sutdy.Experience/OptionsPattern.Sutdy.Experience.csproj b/OptionsPattern.Sutdy.Experience/OptionsPattern.Sutdy.Experience.csproj new file mode 100644 index 0000000..5ee861d --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/OptionsPattern.Sutdy.Experience.csproj @@ -0,0 +1,64 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/OptionsPattern.Sutdy.Experience/Startup.cs b/OptionsPattern.Sutdy.Experience/Startup.cs new file mode 100644 index 0000000..04de861 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Startup.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; + +using Xunit; +using Xunit.Sdk; +using Xunit.Abstractions; +using Xunit.Extensions; +using Xunit.DependencyInjection; +using Xunit.DependencyInjection.Logging; + +namespace OptionsPattern.Sutdy.Experience +{ + public class Startup + { + //生成主机方法 + //public IHostBuilder CreateHostBuilder() + //{ + + //} + + /// + /// 配置主机方法 + /// 内部可以配置 IConfiguration + /// + public void ConfigureHost(IHostBuilder hostBuilder) + { + //设置主机配置 + hostBuilder.ConfigureHostConfiguration(builder => + { + + }); + + //设置应用配置 + hostBuilder.ConfigureAppConfiguration((context, builder) => + { + + }); + + //集成 Opentelemetry + //var tracerProvider = Sdk.CreateTracerProviderBuilder() + // .AddSource("Xunit.DependencyInjection") + // .AddConsoleExporter(); + + } + + /// + /// 配置服务方法 + /// (不支持重载) + /// + //public void ConfigureServices(IServiceCollection services) + //{ + + //} + + /// + /// 配置服务方法 + /// 注入或用途 IConfiguration IHostEnvironment 请使用 context.xx; + /// + public void ConfigureServices(IServiceCollection services, HostBuilderContext context) + { + + + } + + /// + /// 将 Microsoft.Extensions.Logging 写入 ITestOutputHelper + /// + public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor accessor) + { + loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(accessor)); + } + } +} diff --git a/OptionsPattern.Sutdy.Experience/UseXunitTest.cs b/OptionsPattern.Sutdy.Experience/UseXunitTest.cs new file mode 100644 index 0000000..dc21687 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/UseXunitTest.cs @@ -0,0 +1,74 @@ +namespace OptionsPattern.Sutdy.Experience +{ + public class UseXunitTest:IDisposable + { + private readonly ITestOutputHelper? _output; + public UseXunitTest(ITestOutputHelperAccessor outputHelperAccessor) + { + if (outputHelperAccessor == null) + { + throw new ArgumentNullException(nameof(outputHelperAccessor)); + } + _output = outputHelperAccessor.Output; + } + + + /// + /// xUnit Բ + /// + [Fact] + public void UsabilityTest() + { + Assert.True(true, "ʹxUnitԿܣ"); + _output?.WriteLine("ʹ xUnit Ϣԣ"); + } + + /// + /// Բ쳣 + /// ʹãxUnit ͨ + /// + [Fact] + public void DoesNotThrow_Test() + { + //ִд + Action codeSnippet = () => + { + //ҵ + + //ģ쳣 + //throw new Exception("׳쳣"); + }; + + var exception = Record.Exception(codeSnippet); + Assert.Null(exception); + + _output?.WriteLine("ʹ xUnit ͨԲ쳣"); + } + + /// + /// Բ쳣 + /// ʹãFluentAssertions ⷽʽԲ쳣 + /// + [Fact] + public void DoesNotThrow_UseFluentAssertions_Test() + { + //ִд + Action codeSnippet= () => + { + //ҵ + + //ģ쳣 + //throw new Exception("׳쳣"); + }; + + //ԣ쳣 + codeSnippet.Should().NotThrow(); + + _output?.WriteLine("ʹ FluentAssertions ⷽʽԲ쳣"); + } + + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Experience/Usings.cs b/OptionsPattern.Sutdy.Experience/Usings.cs new file mode 100644 index 0000000..ce36fb1 --- /dev/null +++ b/OptionsPattern.Sutdy.Experience/Usings.cs @@ -0,0 +1,35 @@ +global using System; +global using System.Linq; +global using System.Text; +global using System.Threading.Tasks; +global using System.Collections; +global using System.Collections.Generic; +global using System.Collections.Concurrent; +global using System.Collections.Specialized; + +global using Microsoft.Extensions.Configuration; +global using Microsoft.Extensions.Configuration.Memory; +global using Microsoft.Extensions.Configuration.EnvironmentVariables; +global using Microsoft.Extensions.Configuration.CommandLine; +global using Microsoft.Extensions.Configuration.UserSecrets; +global using Microsoft.Extensions.Configuration.Json; +global using Microsoft.Extensions.Configuration.Ini; +global using Microsoft.Extensions.Configuration.Xml; + + +global using Xunit; +global using Xunit.Abstractions; +global using Xunit.DependencyInjection; + +global using Moq; +global using Moq.Internals; +global using Moq.Language; +global using Moq.Protected; + +global using AutoFixture; +global using AutoFixture.DataAnnotations; +global using AutoFixture.AutoMoq; +global using AutoFixture.Xunit2; + +global using FluentAssertions; +global using FluentAssertions.Extensions; \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.custom.json b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.custom.json new file mode 100644 index 0000000..1cb9db7 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.custom.json @@ -0,0 +1,8 @@ +{ + "AppName": "customAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "custom@163.com", + "Recipient": "custom" + } +} diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.development.json b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.development.json new file mode 100644 index 0000000..fd26658 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.development.json @@ -0,0 +1,8 @@ +{ + "AppName": "developmentAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "development@163.com", + "Recipient": "development" + } +} diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.ini b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.ini new file mode 100644 index 0000000..71ed5d4 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.ini @@ -0,0 +1,8 @@ +# App设置 +AppName=IniAppName +AppVersion=0.0.0.1 + +[Email] +#邮箱设置 +ReceiveAddress=ini@163.com +Recipient=ini \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.json b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.json new file mode 100644 index 0000000..3b859c1 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.json @@ -0,0 +1,8 @@ +{ + "AppName": "JsonAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "json@163.com", + "Recipient": "json" + } +} diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.product.json b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.product.json new file mode 100644 index 0000000..48639b5 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.product.json @@ -0,0 +1,8 @@ +{ + "AppName": "productAppNmae", + "AppVersion": "0.0.0.1", + "EMail": { + "ReceiveAddress": "product@163.com", + "Recipient": "product" + } +} diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.xml b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.xml new file mode 100644 index 0000000..f0d0846 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.xml @@ -0,0 +1,9 @@ + + + XmlAppName + 1.2.3.4 + + xml@163.com + xml + + diff --git a/OptionsPattern.Sutdy.Uncover/Configs/appsettings.yml b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.yml new file mode 100644 index 0000000..0aeac52 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Configs/appsettings.yml @@ -0,0 +1,8 @@ +#yaml配置格式 +AppName: YamlAppName +AppVersion: 0.0.0.1 + +#邮件配置 +EMail: + ReceiveAddress: yaml@163.com + Recipient: yaml \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Uncover/Options/AppOption.cs b/OptionsPattern.Sutdy.Uncover/Options/AppOption.cs new file mode 100644 index 0000000..08fc5d2 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Options/AppOption.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OptionsPattern.Sutdy.Uncover +{ + public class AppOption + { + /// + /// 软件名 + /// + public string AppName { get; set; } = "IniAppName"; + + /// + /// 软件版本 + /// + public Version AppVersion { get; set; } = new Version( "0.0.0.1"); + + /// + /// 接收邮箱配置对象 + /// + public ReceiveMailOption? EMail { get; set; } + } +} diff --git a/OptionsPattern.Sutdy.Uncover/Options/ReceiveMailOption.cs b/OptionsPattern.Sutdy.Uncover/Options/ReceiveMailOption.cs new file mode 100644 index 0000000..90e512b --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Options/ReceiveMailOption.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OptionsPattern.Sutdy.Uncover +{ + /// + /// 接收邮件配置 + /// + public class ReceiveMailOption + { + /// + /// 接收邮箱地址 + /// + public string? ReceiveAddress { get; set; } + + /// + /// 接收人 + /// + public string? Recipient{ get; set; } + } +} diff --git a/OptionsPattern.Sutdy.Uncover/OptionsPattern.Sutdy.Uncover.csproj b/OptionsPattern.Sutdy.Uncover/OptionsPattern.Sutdy.Uncover.csproj new file mode 100644 index 0000000..536ed7f --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/OptionsPattern.Sutdy.Uncover.csproj @@ -0,0 +1,64 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/OptionsPattern.Sutdy.Uncover/Startup.cs b/OptionsPattern.Sutdy.Uncover/Startup.cs new file mode 100644 index 0000000..f2ed763 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Startup.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; + +using Xunit; +using Xunit.Sdk; +using Xunit.Abstractions; +using Xunit.Extensions; +using Xunit.DependencyInjection; +using Xunit.DependencyInjection.Logging; + +namespace OptionsPattern.Sutdy.Uncover +{ + public class Startup + { + //生成主机方法 + //public IHostBuilder CreateHostBuilder() + //{ + + //} + + /// + /// 配置主机方法 + /// 内部可以配置 IConfiguration + /// + public void ConfigureHost(IHostBuilder hostBuilder) + { + //设置主机配置 + hostBuilder.ConfigureHostConfiguration(builder => + { + + }); + + //设置应用配置 + hostBuilder.ConfigureAppConfiguration((context, builder) => + { + + }); + + //集成 Opentelemetry + //var tracerProvider = Sdk.CreateTracerProviderBuilder() + // .AddSource("Xunit.DependencyInjection") + // .AddConsoleExporter(); + + } + + /// + /// 配置服务方法 + /// (不支持重载) + /// + //public void ConfigureServices(IServiceCollection services) + //{ + + //} + + /// + /// 配置服务方法 + /// 注入或用途 IConfiguration IHostEnvironment 请使用 context.xx; + /// + public void ConfigureServices(IServiceCollection services, HostBuilderContext context) + { + + + } + + /// + /// 将 Microsoft.Extensions.Logging 写入 ITestOutputHelper + /// + public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor accessor) + { + loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(accessor)); + } + } +} diff --git a/OptionsPattern.Sutdy.Uncover/UseXunitTest.cs b/OptionsPattern.Sutdy.Uncover/UseXunitTest.cs new file mode 100644 index 0000000..5844485 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/UseXunitTest.cs @@ -0,0 +1,74 @@ +namespace OptionsPattern.Sutdy.Uncover +{ + public class UseXunitTest:IDisposable + { + private readonly ITestOutputHelper? _output; + public UseXunitTest(ITestOutputHelperAccessor outputHelperAccessor) + { + if (outputHelperAccessor == null) + { + throw new ArgumentNullException(nameof(outputHelperAccessor)); + } + _output = outputHelperAccessor.Output; + } + + + /// + /// xUnit Բ + /// + [Fact] + public void UsabilityTest() + { + Assert.True(true, "ʹxUnitԿܣ"); + _output?.WriteLine("ʹ xUnit Ϣԣ"); + } + + /// + /// Բ쳣 + /// ʹãxUnit ͨ + /// + [Fact] + public void DoesNotThrow_Test() + { + //ִд + Action codeSnippet = () => + { + //ҵ + + //ģ쳣 + //throw new Exception("׳쳣"); + }; + + var exception = Record.Exception(codeSnippet); + Assert.Null(exception); + + _output?.WriteLine("ʹ xUnit ͨԲ쳣"); + } + + /// + /// Բ쳣 + /// ʹãFluentAssertions ⷽʽԲ쳣 + /// + [Fact] + public void DoesNotThrow_UseFluentAssertions_Test() + { + //ִд + Action codeSnippet= () => + { + //ҵ + + //ģ쳣 + //throw new Exception("׳쳣"); + }; + + //ԣ쳣 + codeSnippet.Should().NotThrow(); + + _output?.WriteLine("ʹ FluentAssertions ⷽʽԲ쳣"); + } + + public void Dispose() + { + } + } +} \ No newline at end of file diff --git a/OptionsPattern.Sutdy.Uncover/Usings.cs b/OptionsPattern.Sutdy.Uncover/Usings.cs new file mode 100644 index 0000000..ce36fb1 --- /dev/null +++ b/OptionsPattern.Sutdy.Uncover/Usings.cs @@ -0,0 +1,35 @@ +global using System; +global using System.Linq; +global using System.Text; +global using System.Threading.Tasks; +global using System.Collections; +global using System.Collections.Generic; +global using System.Collections.Concurrent; +global using System.Collections.Specialized; + +global using Microsoft.Extensions.Configuration; +global using Microsoft.Extensions.Configuration.Memory; +global using Microsoft.Extensions.Configuration.EnvironmentVariables; +global using Microsoft.Extensions.Configuration.CommandLine; +global using Microsoft.Extensions.Configuration.UserSecrets; +global using Microsoft.Extensions.Configuration.Json; +global using Microsoft.Extensions.Configuration.Ini; +global using Microsoft.Extensions.Configuration.Xml; + + +global using Xunit; +global using Xunit.Abstractions; +global using Xunit.DependencyInjection; + +global using Moq; +global using Moq.Internals; +global using Moq.Language; +global using Moq.Protected; + +global using AutoFixture; +global using AutoFixture.DataAnnotations; +global using AutoFixture.AutoMoq; +global using AutoFixture.Xunit2; + +global using FluentAssertions; +global using FluentAssertions.Extensions; \ No newline at end of file diff --git a/框架揭秘.sln b/框架揭秘.sln index 4923271..7cf3d64 100644 --- a/框架揭秘.sln +++ b/框架揭秘.sln @@ -37,6 +37,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionStudy.UnitApp", "Opti EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OptionStudy.Next", "OptionStudy.Next\OptionStudy.Next.csproj", "{559F6F82-A440-4D85-9F04-01CE26B1A6E6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.Experience", "OptionsPattern.Sutdy.Experience\OptionsPattern.Sutdy.Experience.csproj", "{9C73DFBD-E1BC-4B27-84AA-35848088D888}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.Experience.ConsoleApp", "OptionsPattern.Sutdy.Experience.ConsoleApp\OptionsPattern.Sutdy.Experience.ConsoleApp.csproj", "{703D8C74-2B39-470B-9108-A36FF8263FAE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OptionsPattern.Sutdy.Uncover", "OptionsPattern.Sutdy.Uncover\OptionsPattern.Sutdy.Uncover.csproj", "{D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -51,6 +57,18 @@ Global {559F6F82-A440-4D85-9F04-01CE26B1A6E6}.Debug|Any CPU.Build.0 = Debug|Any CPU {559F6F82-A440-4D85-9F04-01CE26B1A6E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {559F6F82-A440-4D85-9F04-01CE26B1A6E6}.Release|Any CPU.Build.0 = Release|Any CPU + {9C73DFBD-E1BC-4B27-84AA-35848088D888}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C73DFBD-E1BC-4B27-84AA-35848088D888}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C73DFBD-E1BC-4B27-84AA-35848088D888}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C73DFBD-E1BC-4B27-84AA-35848088D888}.Release|Any CPU.Build.0 = Release|Any CPU + {703D8C74-2B39-470B-9108-A36FF8263FAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {703D8C74-2B39-470B-9108-A36FF8263FAE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {703D8C74-2B39-470B-9108-A36FF8263FAE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {703D8C74-2B39-470B-9108-A36FF8263FAE}.Release|Any CPU.Build.0 = Release|Any CPU + {D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5744BA1-4D24-4D4D-A479-2293DEB7A8CF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -60,6 +78,9 @@ Global {4892AF59-813D-4957-9ADC-72871AC58C68} = {97685B5C-8532-48B0-A813-3CC629F31FD3} {E3F8F3F8-F4A9-42EA-8AA5-862B0754A1B3} = {6F45CE67-FAA8-4FF8-87C9-E8752B0734BF} {559F6F82-A440-4D85-9F04-01CE26B1A6E6} = {6F45CE67-FAA8-4FF8-87C9-E8752B0734BF} + {9C73DFBD-E1BC-4B27-84AA-35848088D888} = {4B3A7989-5D9D-48E0-A2F7-AAD44039D89F} + {703D8C74-2B39-470B-9108-A36FF8263FAE} = {4B3A7989-5D9D-48E0-A2F7-AAD44039D89F} + {D5744BA1-4D24-4D4D-A479-2293DEB7A8CF} = {4B3A7989-5D9D-48E0-A2F7-AAD44039D89F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CB07E3E3-03BD-416A-A489-E36B56D71EDC}