添加xunit单元测试

This commit is contained in:
陈淳
2022-12-14 00:14:22 +08:00
parent f7c74b5c96
commit c964b98240
12 changed files with 593 additions and 41 deletions

View File

@@ -1,13 +0,0 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Yi.Framework.MSUnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
}
}
}

View File

@@ -1,19 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
<PackageReference Include="coverlet.collector" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@@ -25,7 +25,6 @@ namespace Yi.Framework.WebCore.MiddlewareExtend
{
services.AddSingleton<QuartzInvoker>();
services.AddQuartz();
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
return services;
}
}

View File

@@ -0,0 +1,15 @@
using Yi.Framework.Common.Const;
using Yi.Framework.Core;
using Yi.Framework.Interface;
namespace Yi.Framework.XUnitTest
{
public class AccountTest
{
private IUserService _iUserService;
public AccountTest(IUserService iUserService) =>
(_iUserService) =
(iUserService);
}
}

View File

@@ -0,0 +1,39 @@
using Yi.Framework.Common.Const;
using Yi.Framework.Core;
namespace Yi.Framework.XUnitTest
{
public class QuartzTest
{
private QuartzInvoker _quartzInvoker;
public QuartzTest(QuartzInvoker quartzInvoker) =>
(_quartzInvoker) =
(quartzInvoker);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
[Fact]
public async Task StartJob()
{
Dictionary<string, object> data = new Dictionary<string, object>()
{
{JobConst.method,"get" },
{JobConst.url,"https://www.baidu.com" }
};
await _quartzInvoker.StartAsync("*/5 * * * * ?", "HttpJob", jobName: "test", jobGroup: "my", data: data);
}
/// <summary>
/// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
[Fact]
public async Task StopJob()
{
await StartJob();
await _quartzInvoker.StopAsync(new Quartz.JobKey("test", "my"));
}
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using Autofac.Extensions.DependencyInjection;
using Autofac;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Quartz;
using Yi.Framework.WebCore.AutoFacExtend;
using Yi.Framework.WebCore.MiddlewareExtend;
using Microsoft.AspNetCore.Builder;
using Yi.Framework.WebCore.DbExtend;
namespace Yi.Framework.XUnitTest
{
public class Startup
{
public void ConfigureHost(IHostBuilder host)
{
host.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile("appsettings.json");
builder.AddJsonFile("appsettings.Development.json");
});
host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
#region
//交由Module依赖注入
#endregion
containerBuilder.RegisterModule<CustomAutofacModule>();
#region
//添加属性注入模块
#endregion
//containerBuilder.RegisterModule<PropertiesAutowiredModule>();
#region
//使用AppService特性优雅的进行自动依赖注入,仓储与基类服务便是使用该种方式自动注入
#endregion
containerBuilder.AddAutoIocService("Yi.Framework.Repository", "Yi.Framework.Service");
});
host.ConfigureServices(services => { });
}
public void ConfigureServices(IServiceCollection services, HostBuilderContext host)
{
services.AddIocService(host.Configuration);
services.AddQuartzService();
services.AddSqlsugarServer();
}
public void Configure(IServiceProvider services)
{
}
}
}

View File

@@ -0,0 +1 @@
global using Xunit;

View File

@@ -0,0 +1,59 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.Development.json" />
<None Remove="appsettings.json" />
<None Remove="appsettings.Production.json" />
<None Remove="appsettings.Staging.json" />
</ItemGroup>
<ItemGroup>
<Content Include="appsettings.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="appsettings.Production.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="appsettings.Staging.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="Xunit.DependencyInjection" Version="8.6.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.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Yi.Framework.WebCore\Yi.Framework.WebCore.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,138 @@
{
//程序启动地址,*代表全部网口
"StartUrl": "http://*:19001",
//默认日志打印过滤
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//运行全部主机
"AllowedHosts": "*",
//【全局配置开启】
//Sql语句日志是否打印
"SqlLog_Enable": false,
//登录二维码是否打印
"LoginCode_Enable": false,
//【数据库配置】
//多数据库主从复制是否开启
"MutiDB_Enabled": false,
//数据库CodeFirst是否开启
"DbCodeFirst_Enabled": true,
//数据库种子数据是否开启
"DbSeed_Enabled": true,
//数据库列表
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],
//数据库类型选择
"DbSelect": "Sqlite",
//数据库连接地址,支持读写分离
"DbConn": {
"WriteUrl": "DataSource=yi-sqlsugar-dev.db",
"ReadUrl": [
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]",
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]",
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]"
]
},
//【缓存配置】
//缓存列表
"CacheList": [ "Redis", "MemoryCache" ],
//选择缓存
"CacheSelect": "MemoryCache",
//缓存种子数据是否开启
"CacheSeed_Enabled": false,
//【中间件开启】
//Consul是否开启
"Consul_Enabled": false,
//健康检查是否开启
"HealthCheck_Enabled": false,
//跨域开放是否开启
"Cors_Enabled": true,
//Apollo是否开启
"Apollo_Enabled": false,
//RabbitMQ是否开启
"RabbitMQ_Enabled": false,
//Kafka是否开启
"Kafka_Enabled": false,
//ElasticSeach是否开启
"ElasticSeach_Enabled": false,
//短信发送是否开启
"SMS_Enabled": false,
//分布式CAP是否开启
"CAP_Enabled": false,
//分布式CAP面板是否开启
"CAPDashboard_Enabled": false,
//【中间件配置】
//jwt授权内容公钥私钥转移到目录下的pem文件
"JwtAuthorize": {
"Issuer": "cc",
"Audience": "cc",
"PolicyName": "permission",
"DefaultScheme": "Bearer",
"IsHttps": false,
"Expiration": 300,
"ReExpiration": 3000
},
//Redis地址配置
"RedisConnOptions": {
"Host": "[]",
"Prot": 6379,
"DB": 1,
"Password": "[]"
},
//RabbitMq地址配置
"RabbitConn": {
"HostName": "[]",
"UserName": "[]",
"Password": "[]",
"Port": 5672
},
//ElasticSeach地址配置
"ElasticSeachConn": {
"Url": "[]",
"IndexName": "[]",
"UserName": "[]",
"PassWord": "[]."
},
//Kafka地址配置
"KafkaOptions": {
"BrokerList": "[]:9092",
"TopicName": "kafkalog"
},
//Consul地址配置
"ConsulClientOption": {
"IP": "[]",
"Port": "8500",
"Datacenter": "dc1"
},
//Consul注册本机配置
"ConsulRegisterOption": {
"IP": "[]",
"Port": "[]",
"GroupName": "ApiMicroservice",
"HealthCheckUrl": "/Health",
"Interval": 10,
"Timeout": 5,
"DeregisterCriticalServiceAfter": 60,
"Tag": "13"
},
//阿里云短信配置
"SMS": {
"ID": "[]",
"Secret": "[]",
"Sign": "[]",
"Template": "[]"
}
}

View File

@@ -0,0 +1,138 @@
{
//程序启动地址,*代表全部网口
"StartUrl": "http://*:19001",
//默认日志打印过滤
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//运行全部主机
"AllowedHosts": "*",
//【全局配置开启】
//Sql语句日志是否打印
"SqlLog_Enable": false,
//登录二维码是否打印
"LoginCode_Enable": false,
//【数据库配置】
//多数据库主从复制是否开启
"MutiDB_Enabled": false,
//数据库CodeFirst是否开启
"DbCodeFirst_Enabled": true,
//数据库种子数据是否开启
"DbSeed_Enabled": true,
//数据库列表
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],
//数据库类型选择
"DbSelect": "Sqlite",
//数据库连接地址,支持读写分离
"DbConn": {
"WriteUrl": "DataSource=yi-sqlsugar-dev.db",
"ReadUrl": [
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]",
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]",
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]"
]
},
//【缓存配置】
//缓存列表
"CacheList": [ "Redis", "MemoryCache" ],
//选择缓存
"CacheSelect": "MemoryCache",
//缓存种子数据是否开启
"CacheSeed_Enabled": false,
//【中间件开启】
//Consul是否开启
"Consul_Enabled": false,
//健康检查是否开启
"HealthCheck_Enabled": false,
//跨域开放是否开启
"Cors_Enabled": true,
//Apollo是否开启
"Apollo_Enabled": false,
//RabbitMQ是否开启
"RabbitMQ_Enabled": false,
//Kafka是否开启
"Kafka_Enabled": false,
//ElasticSeach是否开启
"ElasticSeach_Enabled": false,
//短信发送是否开启
"SMS_Enabled": false,
//分布式CAP是否开启
"CAP_Enabled": false,
//分布式CAP面板是否开启
"CAPDashboard_Enabled": false,
//【中间件配置】
//jwt授权内容公钥私钥转移到目录下的pem文件
"JwtAuthorize": {
"Issuer": "cc",
"Audience": "cc",
"PolicyName": "permission",
"DefaultScheme": "Bearer",
"IsHttps": false,
"Expiration": 300,
"ReExpiration": 3000
},
//Redis地址配置
"RedisConnOptions": {
"Host": "[]",
"Prot": 6379,
"DB": 1,
"Password": "[]"
},
//RabbitMq地址配置
"RabbitConn": {
"HostName": "[]",
"UserName": "[]",
"Password": "[]",
"Port": 5672
},
//ElasticSeach地址配置
"ElasticSeachConn": {
"Url": "[]",
"IndexName": "[]",
"UserName": "[]",
"PassWord": "[]."
},
//Kafka地址配置
"KafkaOptions": {
"BrokerList": "[]:9092",
"TopicName": "kafkalog"
},
//Consul地址配置
"ConsulClientOption": {
"IP": "[]",
"Port": "8500",
"Datacenter": "dc1"
},
//Consul注册本机配置
"ConsulRegisterOption": {
"IP": "[]",
"Port": "[]",
"GroupName": "ApiMicroservice",
"HealthCheckUrl": "/Health",
"Interval": 10,
"Timeout": 5,
"DeregisterCriticalServiceAfter": 60,
"Tag": "13"
},
//阿里云短信配置
"SMS": {
"ID": "[]",
"Secret": "[]",
"Sign": "[]",
"Template": "[]"
}
}

View File

@@ -0,0 +1,138 @@
{
//程序启动地址,*代表全部网口
"StartUrl": "http://*:19001",
//默认日志打印过滤
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//运行全部主机
"AllowedHosts": "*",
//【全局配置开启】
//Sql语句日志是否打印
"SqlLog_Enable": false,
//登录二维码是否打印
"LoginCode_Enable": false,
//【数据库配置】
//多数据库主从复制是否开启
"MutiDB_Enabled": false,
//数据库CodeFirst是否开启
"DbCodeFirst_Enabled": true,
//数据库种子数据是否开启
"DbSeed_Enabled": true,
//数据库列表
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],
//数据库类型选择
"DbSelect": "Sqlite",
//数据库连接地址,支持读写分离
"DbConn": {
"WriteUrl": "DataSource=yi-sqlsugar-dev.db",
"ReadUrl": [
"DataSource=[xxxx]",//sqlite
"server=[xxxx];port=3306;database=[xxxx];user id=[xxxx];password=[xxxx]", //mysql
"Data Source=[xxxx];Initial Catalog=[xxxx];User ID=[xxxx];password=[xxxx]" //sqlserver
]
},
//【缓存配置】
//缓存列表
"CacheList": [ "Redis", "MemoryCache" ],
//选择缓存
"CacheSelect": "MemoryCache",
//缓存种子数据是否开启
"CacheSeed_Enabled": false,
//【中间件开启】
//Consul是否开启
"Consul_Enabled": false,
//健康检查是否开启
"HealthCheck_Enabled": false,
//跨域开放是否开启
"Cors_Enabled": true,
//Apollo是否开启
"Apollo_Enabled": false,
//RabbitMQ是否开启
"RabbitMQ_Enabled": false,
//Kafka是否开启
"Kafka_Enabled": false,
//ElasticSeach是否开启
"ElasticSeach_Enabled": false,
//短信发送是否开启
"SMS_Enabled": false,
//分布式CAP是否开启
"CAP_Enabled": false,
//分布式CAP面板是否开启
"CAPDashboard_Enabled": false,
//【中间件配置】
//jwt授权内容公钥私钥转移到目录下的pem文件
"JwtAuthorize": {
"Issuer": "cc",
"Audience": "cc",
"PolicyName": "permission",
"DefaultScheme": "Bearer",
"IsHttps": false,
"Expiration": 300,
"ReExpiration": 3000
},
//Redis地址配置
"RedisConnOptions": {
"Host": "[]",
"Prot": 6379,
"DB": 1,
"Password": "[]"
},
//RabbitMq地址配置
"RabbitConn": {
"HostName": "[]",
"UserName": "[]",
"Password": "[]",
"Port": 5672
},
//ElasticSeach地址配置
"ElasticSeachConn": {
"Url": "[]",
"IndexName": "[]",
"UserName": "[]",
"PassWord": "[]."
},
//Kafka地址配置
"KafkaOptions": {
"BrokerList": "[]:9092",
"TopicName": "kafkalog"
},
//Consul地址配置
"ConsulClientOption": {
"IP": "[]",
"Port": "8500",
"Datacenter": "dc1"
},
//Consul注册本机配置
"ConsulRegisterOption": {
"IP": "[]",
"Port": "[]",
"GroupName": "ApiMicroservice",
"HealthCheckUrl": "/Health",
"Interval": 10,
"Timeout": 5,
"DeregisterCriticalServiceAfter": 60,
"Tag": "13"
},
//阿里云短信配置
"SMS": {
"ID": "[]",
"Secret": "[]",
"Sign": "[]",
"Template": "[]"
}
}

View File

@@ -35,8 +35,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.Authentication
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.ElasticSearchProcessor", "Yi.Framework.ElasticSearchProcessor\Yi.Framework.ElasticSearchProcessor.csproj", "{EEF89893-A6A9-4C02-818C-D116C8EAE0EF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.MSUnitTest", "Yi.Framework.MSUnitTest\Yi.Framework.MSUnitTest.csproj", "{531255B3-9669-4BC1-B4E5-A0C6E0540F0D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.Job", "Yi.Framework.Task\Yi.Framework.Job.csproj", "{F1C990DD-32C3-4F02-83B0-6E52B18B0B17}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.SMSProcessor", "Yi.Framework.SMSProcessor\Yi.Framework.SMSProcessor.csproj", "{7C58FB7C-9AB5-47CF-ACEB-B784CF820E7E}"
@@ -47,7 +45,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.Language", "Yi
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.WeChatPay", "Yi.Framework.WeChatPay\Yi.Framework.WeChatPay.csproj", "{C307189D-C42C-4C09-BB65-5A386C9F182B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Framework.Template", "Yi.Framework.Template\Yi.Framework.Template.csproj", "{A51E9091-3745-461A-A3CB-32598BF0DC77}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.Template", "Yi.Framework.Template\Yi.Framework.Template.csproj", "{A51E9091-3745-461A-A3CB-32598BF0DC77}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Framework.XUnitTest", "Yi.Framework.XUnitTest\Yi.Framework.XUnitTest.csproj", "{88E3298A-135D-4D9C-B98D-41A2C4268385}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -99,10 +99,6 @@ Global
{EEF89893-A6A9-4C02-818C-D116C8EAE0EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EEF89893-A6A9-4C02-818C-D116C8EAE0EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EEF89893-A6A9-4C02-818C-D116C8EAE0EF}.Release|Any CPU.Build.0 = Release|Any CPU
{531255B3-9669-4BC1-B4E5-A0C6E0540F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{531255B3-9669-4BC1-B4E5-A0C6E0540F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{531255B3-9669-4BC1-B4E5-A0C6E0540F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{531255B3-9669-4BC1-B4E5-A0C6E0540F0D}.Release|Any CPU.Build.0 = Release|Any CPU
{F1C990DD-32C3-4F02-83B0-6E52B18B0B17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1C990DD-32C3-4F02-83B0-6E52B18B0B17}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1C990DD-32C3-4F02-83B0-6E52B18B0B17}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -127,6 +123,10 @@ Global
{A51E9091-3745-461A-A3CB-32598BF0DC77}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A51E9091-3745-461A-A3CB-32598BF0DC77}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A51E9091-3745-461A-A3CB-32598BF0DC77}.Release|Any CPU.Build.0 = Release|Any CPU
{88E3298A-135D-4D9C-B98D-41A2C4268385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88E3298A-135D-4D9C-B98D-41A2C4268385}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88E3298A-135D-4D9C-B98D-41A2C4268385}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88E3298A-135D-4D9C-B98D-41A2C4268385}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -143,13 +143,13 @@ Global
{671E38D8-ECAF-484B-A2AE-63DDC469C315} = {D6B44435-EAFA-4D55-90D0-3AF80485FB83}
{694C0EC0-ED32-4E5D-8EA1-FB82E1303EAB} = {D6B44435-EAFA-4D55-90D0-3AF80485FB83}
{EEF89893-A6A9-4C02-818C-D116C8EAE0EF} = {D6B44435-EAFA-4D55-90D0-3AF80485FB83}
{531255B3-9669-4BC1-B4E5-A0C6E0540F0D} = {C90E38FB-69EA-4997-8B3A-2C71EFA65B2B}
{F1C990DD-32C3-4F02-83B0-6E52B18B0B17} = {9ABAF6B1-6C02-498A-90A2-ABC1140CF89A}
{7C58FB7C-9AB5-47CF-ACEB-B784CF820E7E} = {D6B44435-EAFA-4D55-90D0-3AF80485FB83}
{DA96B62F-2D4C-4AFB-937C-5AEA1119A129} = {DB2506F5-05FD-4E76-940E-41D7AA148550}
{3047069B-4084-461F-BC9F-023BC60401D1} = {9ABAF6B1-6C02-498A-90A2-ABC1140CF89A}
{C307189D-C42C-4C09-BB65-5A386C9F182B} = {9ABAF6B1-6C02-498A-90A2-ABC1140CF89A}
{A51E9091-3745-461A-A3CB-32598BF0DC77} = {9ABAF6B1-6C02-498A-90A2-ABC1140CF89A}
{88E3298A-135D-4D9C-B98D-41A2C4268385} = {C90E38FB-69EA-4997-8B3A-2C71EFA65B2B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1ED77A6E-377F-4EEF-A3D0-D65C94657DAF}