添加:选项模式(下)学习项目

master
bicijinlian 3 years ago
parent 5728e2295a
commit dfa148ef4a

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
</ItemGroup>
</Project>

@ -0,0 +1,10 @@
namespace OptionsPattern.Sutdy.Experience.ConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("============ 选项模式6.1.3 配置源的同步 ============");
}
}
}

@ -0,0 +1,8 @@
{
"AppName": "customAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "custom@163.com",
"Recipient": "custom"
}
}

@ -0,0 +1,8 @@
{
"AppName": "developmentAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "development@163.com",
"Recipient": "development"
}
}

@ -0,0 +1,8 @@
# App设置
AppName=IniAppName
AppVersion=0.0.0.1
[Email]
#邮箱设置
ReceiveAddress=ini@163.com
Recipient=ini

@ -0,0 +1,8 @@
{
"AppName": "JsonAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "json@163.com",
"Recipient": "json"
}
}

@ -0,0 +1,8 @@
{
"AppName": "productAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "product@163.com",
"Recipient": "product"
}
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<AppName>XmlAppName</AppName>
<AppVersion>1.2.3.4</AppVersion>
<EMail>
<ReceiveAddress>xml@163.com</ReceiveAddress>
<Recipient>xml</Recipient>
</EMail>
</root>

@ -0,0 +1,8 @@
#yaml配置格式
AppName: YamlAppName
AppVersion: 0.0.0.1
#邮件配置
EMail:
ReceiveAddress: yaml@163.com
Recipient: yaml

@ -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
{
/// <summary>
/// 软件名
/// </summary>
public string AppName { get; set; } = "IniAppName";
/// <summary>
/// 软件版本
/// </summary>
public Version AppVersion { get; set; } = new Version( "0.0.0.1");
/// <summary>
/// 接收邮箱配置对象
/// </summary>
public ReceiveMailOption? EMail { get; set; }
}
}

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OptionsPattern.Sutdy.Experience
{
/// <summary>
/// 接收邮件配置
/// </summary>
public class ReceiveMailOption
{
/// <summary>
/// 接收邮箱地址
/// </summary>
public string? ReceiveAddress { get; set; }
/// <summary>
/// 接收人
/// </summary>
public string? Recipient{ get; set; }
}
}

@ -0,0 +1,64 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.17.0" />
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Moq" Version="4.18.3" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="Xunit.DependencyInjection" Version="8.6.1" />
<PackageReference Include="Xunit.DependencyInjection.Logging" Version="8.0.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<None Update="Configs\appsettings.custom.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.ini">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.product.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

@ -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()
//{
//}
/// <summary>
/// 配置主机方法
/// 内部可以配置 IConfiguration
/// </summary>
public void ConfigureHost(IHostBuilder hostBuilder)
{
//设置主机配置
hostBuilder.ConfigureHostConfiguration(builder =>
{
});
//设置应用配置
hostBuilder.ConfigureAppConfiguration((context, builder) =>
{
});
//集成 Opentelemetry
//var tracerProvider = Sdk.CreateTracerProviderBuilder()
// .AddSource("Xunit.DependencyInjection")
// .AddConsoleExporter();
}
/// <summary>
/// 配置服务方法
/// (不支持重载)
/// </summary>
//public void ConfigureServices(IServiceCollection services)
//{
//}
/// <summary>
/// 配置服务方法
/// 注入或用途 IConfiguration IHostEnvironment 请使用 context.xx;
/// </summary>
public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
{
}
/// <summary>
/// 将 Microsoft.Extensions.Logging 写入 ITestOutputHelper
/// </summary>
public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor accessor)
{
loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(accessor));
}
}
}

@ -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;
}
/// <summary>
/// xUnit 可用性测试
/// </summary>
[Fact]
public void UsabilityTest()
{
Assert.True(true, "使用xUnit测试框架");
_output?.WriteLine("使用 xUnit 框架输出信息测试!");
}
/// <summary>
/// 断言不发生异常
/// 使用xUnit 变通方法
/// </summary>
[Fact]
public void DoesNotThrow_Test()
{
//待执行代码段
Action codeSnippet = () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
var exception = Record.Exception(codeSnippet);
Assert.Null(exception);
_output?.WriteLine("使用 xUnit 变通方法,断言不发生异常!");
}
/// <summary>
/// 断言不发生异常
/// 使用FluentAssertions 库方式,断言不发生异常
/// </summary>
[Fact]
public void DoesNotThrow_UseFluentAssertions_Test()
{
//待执行代码段
Action codeSnippet= () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
//断言:不发生异常
codeSnippet.Should().NotThrow();
_output?.WriteLine("使用 FluentAssertions 库方式,断言不发生异常!");
}
public void Dispose()
{
}
}
}

@ -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;

@ -0,0 +1,8 @@
{
"AppName": "customAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "custom@163.com",
"Recipient": "custom"
}
}

@ -0,0 +1,8 @@
{
"AppName": "developmentAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "development@163.com",
"Recipient": "development"
}
}

@ -0,0 +1,8 @@
# App设置
AppName=IniAppName
AppVersion=0.0.0.1
[Email]
#邮箱设置
ReceiveAddress=ini@163.com
Recipient=ini

@ -0,0 +1,8 @@
{
"AppName": "JsonAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "json@163.com",
"Recipient": "json"
}
}

@ -0,0 +1,8 @@
{
"AppName": "productAppNmae",
"AppVersion": "0.0.0.1",
"EMail": {
"ReceiveAddress": "product@163.com",
"Recipient": "product"
}
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<root>
<AppName>XmlAppName</AppName>
<AppVersion>1.2.3.4</AppVersion>
<EMail>
<ReceiveAddress>xml@163.com</ReceiveAddress>
<Recipient>xml</Recipient>
</EMail>
</root>

@ -0,0 +1,8 @@
#yaml配置格式
AppName: YamlAppName
AppVersion: 0.0.0.1
#邮件配置
EMail:
ReceiveAddress: yaml@163.com
Recipient: yaml

@ -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
{
/// <summary>
/// 软件名
/// </summary>
public string AppName { get; set; } = "IniAppName";
/// <summary>
/// 软件版本
/// </summary>
public Version AppVersion { get; set; } = new Version( "0.0.0.1");
/// <summary>
/// 接收邮箱配置对象
/// </summary>
public ReceiveMailOption? EMail { get; set; }
}
}

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OptionsPattern.Sutdy.Uncover
{
/// <summary>
/// 接收邮件配置
/// </summary>
public class ReceiveMailOption
{
/// <summary>
/// 接收邮箱地址
/// </summary>
public string? ReceiveAddress { get; set; }
/// <summary>
/// 接收人
/// </summary>
public string? Recipient{ get; set; }
}
}

@ -0,0 +1,64 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.17.0" />
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Moq" Version="4.18.3" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="Xunit.DependencyInjection" Version="8.6.1" />
<PackageReference Include="Xunit.DependencyInjection.Logging" Version="8.0.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<None Update="Configs\appsettings.custom.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.ini">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.product.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Configs\appsettings.yml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

@ -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()
//{
//}
/// <summary>
/// 配置主机方法
/// 内部可以配置 IConfiguration
/// </summary>
public void ConfigureHost(IHostBuilder hostBuilder)
{
//设置主机配置
hostBuilder.ConfigureHostConfiguration(builder =>
{
});
//设置应用配置
hostBuilder.ConfigureAppConfiguration((context, builder) =>
{
});
//集成 Opentelemetry
//var tracerProvider = Sdk.CreateTracerProviderBuilder()
// .AddSource("Xunit.DependencyInjection")
// .AddConsoleExporter();
}
/// <summary>
/// 配置服务方法
/// (不支持重载)
/// </summary>
//public void ConfigureServices(IServiceCollection services)
//{
//}
/// <summary>
/// 配置服务方法
/// 注入或用途 IConfiguration IHostEnvironment 请使用 context.xx;
/// </summary>
public void ConfigureServices(IServiceCollection services, HostBuilderContext context)
{
}
/// <summary>
/// 将 Microsoft.Extensions.Logging 写入 ITestOutputHelper
/// </summary>
public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor accessor)
{
loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(accessor));
}
}
}

@ -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;
}
/// <summary>
/// xUnit 可用性测试
/// </summary>
[Fact]
public void UsabilityTest()
{
Assert.True(true, "使用xUnit测试框架");
_output?.WriteLine("使用 xUnit 框架输出信息测试!");
}
/// <summary>
/// 断言不发生异常
/// 使用xUnit 变通方法
/// </summary>
[Fact]
public void DoesNotThrow_Test()
{
//待执行代码段
Action codeSnippet = () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
var exception = Record.Exception(codeSnippet);
Assert.Null(exception);
_output?.WriteLine("使用 xUnit 变通方法,断言不发生异常!");
}
/// <summary>
/// 断言不发生异常
/// 使用FluentAssertions 库方式,断言不发生异常
/// </summary>
[Fact]
public void DoesNotThrow_UseFluentAssertions_Test()
{
//待执行代码段
Action codeSnippet= () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
//断言:不发生异常
codeSnippet.Should().NotThrow();
_output?.WriteLine("使用 FluentAssertions 库方式,断言不发生异常!");
}
public void Dispose()
{
}
}
}

@ -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;

@ -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}

Loading…
Cancel
Save