Commit e1de164f by 陈宁

# dev RequestResourceService

parent 23495466
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
<PackageReference Include="coverlet.collector" Version="1.0.1" />
<PackageReference Include="RestSharp" Version="106.10.1" />
</ItemGroup>
</Project>
using Microsoft.VisualStudio.TestTools.UnitTesting;
using RestSharp;
using System.Threading.Tasks;
using System;
namespace Freemud.BE.Toolbox.Testing
{
[TestClass]
public class RestsharpTest
{
[TestMethod]
public async Task GetCouponProductTest()
{
var client = new RestClient();
var request = new RestRequest("https://www.cnblogs.com", Method.GET);
var response = await client.ExecuteGetAsync(request);
Console.WriteLine(response.Content);
}
}
}
using Freemud.BE.Toolbox.WebApi.Services; using Freemud.BE.Toolbox.WebApi.Model.Request;
using Freemud.BE.Toolbox.WebApi.Services;
using Microsoft.AspNetCore.Mvc;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
...@@ -14,5 +16,11 @@ namespace Freemud.BE.Toolbox.WebApi.Controllers ...@@ -14,5 +16,11 @@ namespace Freemud.BE.Toolbox.WebApi.Controllers
{ {
this.requestResourceService = requestResourceService; this.requestResourceService = requestResourceService;
} }
[HttpPost("get-coupon-product")]
public async Task<IActionResult> GetCouponProduct([FromBody]GetCouponProductRequest request)
{
return Ok(data: await requestResourceService.GetCouponProduct(request));
}
} }
} }
...@@ -9,7 +9,6 @@ using System.Threading.Tasks; ...@@ -9,7 +9,6 @@ using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Infrastructure.Helpers namespace Freemud.BE.Toolbox.WebApi.Infrastructure.Helpers
{ {
/// <summary> /// <summary>
/// 加密算法类 /// 加密算法类
/// </summary> /// </summary>
......
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Infrastructure.Helpers
{
public static class HttpHeper
{
public static async Task<IRestResponse<TResult>> Get<TResult>(string url, Dictionary<string, object> headers = null, Dictionary<string, object> queries = null)
{
var client = new RestClient();
var request = new RestRequest(url, Method.GET);
if (headers?.Any() ?? false)
{
foreach (var h in headers)
{
request.AddHeader(h.Key, h.Value.ToString().Trim());
}
}
if (queries?.Any() ?? false)
{
foreach (var p in queries)
{
request.AddQueryParameter(p.Key, p.Value.ToString().Trim());
}
}
var response = await client.ExecuteAsync<TResult>(request);
return response;
}
public static async Task<IRestResponse<TResult>> Post<TResult>(string url, Dictionary<string, object> headers = null, Dictionary<string, object> queries = null, object jsonBody = null)
{
var client = new RestClient();
var request = new RestRequest(url, Method.POST);
if (headers?.Any() ?? false)
{
foreach (var h in headers)
{
request.AddHeader(h.Key, h.Value.ToString().Trim());
}
}
if (queries?.Any() ?? false)
{
foreach (var p in queries)
{
request.AddQueryParameter(p.Key, p.Value.ToString().Trim());
}
}
if (jsonBody != null)
{
request.AddJsonBody(jsonBody);
}
var response = await client.ExecuteAsync<TResult>(request);
return response;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Model.Request
{
public class BaseRequestResourceRequest
{
public string Env { get; set; }
}
}
...@@ -5,14 +5,12 @@ using System.Threading.Tasks; ...@@ -5,14 +5,12 @@ using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Model.Request namespace Freemud.BE.Toolbox.WebApi.Model.Request
{ {
public class GetCouponProductInput public class GetCouponProductRequest : BaseRequestResourceRequest
{ {
public string CouponCode { get; set; } public string CouponCode { get; set; }
public string StoreCode { get; set; } public string StoreId { get; set; }
public string Channel { get; set; } public string Channel { get; set; }
public string Env { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Model.Response
{
public class RequestResourceResponse
{
public string Url { get; set; }
public object RequestHeaders { get; set; }
public object RequestBody { get; set; }
public object ResponseHeaders { get; set; }
public object ResponseBody { get; set; }
public string ResponseError { get; set; }
}
}
...@@ -14,6 +14,8 @@ namespace Freemud.BE.Toolbox.WebApi.Model ...@@ -14,6 +14,8 @@ namespace Freemud.BE.Toolbox.WebApi.Model
public List<Administrator> Administrators { get; set; } public List<Administrator> Administrators { get; set; }
public EnvironmentsConfiguration Environments { get; set; } public EnvironmentsConfiguration Environments { get; set; }
public List<RequestResourceConfiguration> RequestResources { get; set; }
} }
public class Administrator public class Administrator
...@@ -57,4 +59,26 @@ namespace Freemud.BE.Toolbox.WebApi.Model ...@@ -57,4 +59,26 @@ namespace Freemud.BE.Toolbox.WebApi.Model
public string ProductProd { get; set; } public string ProductProd { get; set; }
} }
public class RequestResourceConfiguration
{
public string Name { get; set; }
public string ProdBaseUrl { get; set; }
public string DevBaseUrl { get; set; }
public string Description { get; set; }
public List<RequestResource> Resources { get; set; }
}
public class RequestResource
{
public string Name { get; set; }
public string Path { get; set; }
public string Description { get; set; }
}
} }
using Freemud.BE.Toolbox.WebApi.Model.Request; using Freemud.BE.Toolbox.WebApi.Model.Request;
using Freemud.BE.Toolbox.WebApi.Model.Response;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
...@@ -8,6 +9,6 @@ namespace Freemud.BE.Toolbox.WebApi.Services ...@@ -8,6 +9,6 @@ namespace Freemud.BE.Toolbox.WebApi.Services
{ {
public interface IRequestResourceService public interface IRequestResourceService
{ {
Task GetCouponProduct(GetCouponProductInput input); Task<RequestResourceResponse> GetCouponProduct(GetCouponProductRequest request);
} }
} }
using Freemud.BE.Toolbox.WebApi.Model.Request; using Freemud.BE.Toolbox.WebApi.Infrastructure.Helpers;
using Freemud.BE.Toolbox.WebApi.Model;
using Freemud.BE.Toolbox.WebApi.Model.Constants;
using Freemud.BE.Toolbox.WebApi.Model.Request;
using Freemud.BE.Toolbox.WebApi.Model.Response;
using RestSharp;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Freemud.BE.Toolbox.WebApi.Services namespace Freemud.BE.Toolbox.WebApi.Services
{ {
public class RequestResourceService : IRequestResourceService public class RequestResourceService : IRequestResourceService
{ {
public async Task GetCouponProduct(GetCouponProductInput input) private readonly List<RequestResourceConfiguration> requestResources;
public RequestResourceService(ToolboxConfiguration toolboxConfiguration)
{ {
throw new NotImplementedException(); requestResources = toolboxConfiguration.RequestResources;
}
private string GetUrl(string env, string group, string name)
{
var config = requestResources?.FirstOrDefault(d => d.Name.Equals(group, StringComparison.OrdinalIgnoreCase));
if (config == null)
return string.Empty;
var baseUrl = string.Empty;
switch (env)
{
case ToolboxConstants.ENV_DEV:
baseUrl = config.DevBaseUrl;
break;
case ToolboxConstants.ENV_PROD:
baseUrl = config.ProdBaseUrl;
break;
default:
return string.Empty;
}
var path = config.Resources?.FirstOrDefault(d => d.Name.Equals(name, StringComparison.OrdinalIgnoreCase))?.Path;
if (string.IsNullOrWhiteSpace(path))
return string.Empty;
return $"{baseUrl}{path}";
}
private string GetChannelPartnerId(string channel)
{
if (string.IsNullOrWhiteSpace(channel))
return string.Empty;
switch (channel)
{
case ToolboxConstants.CHANNEL_DELIVERY:
return "F8538588-C692-4958-A591-A4C71D976209";
case ToolboxConstants.CHANNEL_MCOFFEE:
return "C57FE34D-7C14-4FB7-ACF7-398C9F8875ED";
case ToolboxConstants.CHANNEL_KIOSK:
return "83F6C6F9-8535-4CB9-BE18-5DB050999FA3";
default:
return string.Empty;
}
}
private string GetChannelUnifyId(string channel, string env = "")
{
if (string.IsNullOrWhiteSpace(channel))
return string.Empty;
switch (channel)
{
case ToolboxConstants.CHANNEL_DELIVERY:
return "30b5f0ca-399a-4be3-9063-12a3d2622a38";
case ToolboxConstants.CHANNEL_MCOFFEE:
return "c2e95f53-e21b-4445-a6b1-dd4d2d8a7b96";
case ToolboxConstants.CHANNEL_KIOSK:
if (ToolboxConstants.ENV_DEV.Equals(env, StringComparison.OrdinalIgnoreCase))
return "1618";
else if (ToolboxConstants.ENV_PROD.Equals(env, StringComparison.OrdinalIgnoreCase))
return "5578b01b-9904-46ca-a9aa-33f8f80b0b67";
else
return string.Empty;
default:
return string.Empty;
}
} }
#region 券码
private string GetFreemudCouponChannel(string channel)
{
switch (channel)
{
case ToolboxConstants.CHANNEL_DELIVERY:
return "2";
case ToolboxConstants.CHANNEL_MCOFFEE:
return "5";
case ToolboxConstants.CHANNEL_KIOSK:
return "2";
default:
return "";
}
}
public async Task<RequestResourceResponse> GetCouponProduct(GetCouponProductRequest request)
{
var url = GetUrl(request.Env, "FreemudCoupon", "coupon_product");
var headers = new Dictionary<string, object> {
{ "pi", GetChannelPartnerId(request.Channel) }
};
var data = new
{
couponlist = new List<dynamic>
{
new { coupon = request.CouponCode }
},
store_id = request.StoreId,
channel = GetFreemudCouponChannel(request.Channel),
reqtype = 88,
station_id = "999",
operator_id = "999"
};
var response = await HttpHeper.Post<object>(url, headers, jsonBody: data);
return new RequestResourceResponse
{
Url = url,
RequestHeaders = headers,
RequestBody = data,
ResponseHeaders = response.Headers,
ResponseBody = response.Data,
ResponseError = response.ErrorMessage
};
}
#endregion
#region 订单
#endregion
#region 商品
#endregion
#region 门店
#endregion
} }
} }
...@@ -41,6 +41,7 @@ namespace Freemud.BE.Toolbox.WebApi ...@@ -41,6 +41,7 @@ namespace Freemud.BE.Toolbox.WebApi
// AppServices // AppServices
services.AddScoped<IAccessManagementAppService, AccessManagementAppService>(); services.AddScoped<IAccessManagementAppService, AccessManagementAppService>();
services.AddScoped<IEnvironmentConfigureService, EnvironmentConfigureService>(); services.AddScoped<IEnvironmentConfigureService, EnvironmentConfigureService>();
services.AddScoped<IRequestResourceService, RequestResourceService>();
// Caching // Caching
services.AddEasyCaching(options => options.UseInMemory(Configuration, "default", "EasyCaching:InMemory")); services.AddEasyCaching(options => options.UseInMemory(Configuration, "default", "EasyCaching:InMemory"));
...@@ -52,6 +53,9 @@ namespace Freemud.BE.Toolbox.WebApi ...@@ -52,6 +53,9 @@ namespace Freemud.BE.Toolbox.WebApi
{ {
option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
}); });
// 使用HttpClient
services.AddHttpClient();
} }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
......
...@@ -50,7 +50,40 @@ ...@@ -50,7 +50,40 @@
"ProductProd": "http://10.52.16.40", "ProductProd": "http://10.52.16.40",
"CouponDev": "http://10.53.10.10:12666", "CouponDev": "http://10.53.10.10:12666",
"CouponProd": "http://10.10.3.130" "CouponProd": "http://10.10.3.130"
} },
"RequestResources": [
{
"Name": "FreemudCoupon",
"DevBaseUrl": "http://10.53.10.10:12666",
"ProdBaseUrl": "http://10.10.3.130",
"Description": "非码码券服务",
"Resources": [
{
"Name": "coupon_product",
"Path": "/api?partner=mcd",
"Description": "查询优惠券对应的商品信息"
},
{
"Name": "coupon_deactivate",
"Path": "/code_v4",
"Description": "优惠券激活/取消激活接口"
}
]
},
{
"Name": "FreemudProduct",
"DevBaseUrl": "http://10.53.10.27:8092",
"ProdBaseUrl": "http://10.52.16.40",
"Description": "非码商品服务",
"Resources": [
{
"Name": "listBaseInfosByTimeV2",
"Path": "/V2/Query/Product/ListBaseInfosByTime?productId={0}&shopId={1}&time={2}&groupDetail={3}",
"Description": "根据指定时间批量查询商品基本信息需要传门店ID"
}
]
}
]
}, },
"EasyCaching": { "EasyCaching": {
"InMemory": { "InMemory": {
......
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C13EC0FF-609C-4196-8C16-83E87611EBFD}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>Freemud.BE.TopshelfSample</RootNamespace>
<AssemblyName>Freemud.BE.TopshelfSample</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.2.5.0\lib\net46\Serilog.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.File, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Sinks.File.4.1.0\lib\net45\Serilog.Sinks.File.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Topshelf, Version=4.2.1.215, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
<HintPath>..\packages\Topshelf.4.2.1\lib\net452\Topshelf.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using Serilog;
using System;
using System.Timers;
using Topshelf;
namespace Freemud.BE.TopshelfSample
{
class TownCrier
{
private readonly Timer _timer;
public TownCrier()
{
_timer = new Timer(1000) { AutoReset = true };
_timer.Elapsed += (sender, EventArgs) => Log.Information($"It is {DateTime.Now} and all is well");
}
public void Start() { _timer.Start(); }
public void Stop() { _timer.Stop(); }
}
class Program
{
static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.File(@"D:\WorkDocument\Freemud.BE\Freemud.BE.TopshelfSample\bin\Debug\log.txt")
.CreateLogger();
Log.Information($"Program Start at {DateTime.Now}");
HostFactory.Run(x =>
{
x.Service<TownCrier>(s =>
{
s.ConstructUsing(name => new TownCrier());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
//x.RunAsLocalSystem();
//x.StartAutomatically();
x.SetServiceName("Freemud.BE.TopshelfSample");
x.SetDisplayName("Freemud.BE.TopshelfSample服务");
x.SetDescription("Freemud.BE.TopshelfSample描述");
});
Log.Information($"Program End at {DateTime.Now}");
Log.CloseAndFlush();
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Freemud.BE.TopshelfSample")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Freemud.BE.TopshelfSample")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c13ec0ff-609c-4196-8c16-83e87611ebfd")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Serilog" version="2.5.0" targetFramework="net461" />
<package id="Serilog.Sinks.File" version="4.1.0" targetFramework="net461" />
<package id="Topshelf" version="4.2.1" targetFramework="net461" />
</packages>
\ No newline at end of file
...@@ -5,7 +5,11 @@ VisualStudioVersion = 16.0.29806.167 ...@@ -5,7 +5,11 @@ VisualStudioVersion = 16.0.29806.167
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Freemud.BE.Toolbox", "Freemud.BE.Toolbox\Freemud.BE.Toolbox.csproj", "{472A3AA4-1A49-49E1-A099-4CACE958A434}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Freemud.BE.Toolbox", "Freemud.BE.Toolbox\Freemud.BE.Toolbox.csproj", "{472A3AA4-1A49-49E1-A099-4CACE958A434}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Freemud.BE.Toolbox.WebApi", "Freemud.BE.Toolbox.WebApi\Freemud.BE.Toolbox.WebApi.csproj", "{ACF0A518-8F91-40E7-B866-4269CC65C3FA}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Freemud.BE.Toolbox.WebApi", "Freemud.BE.Toolbox.WebApi\Freemud.BE.Toolbox.WebApi.csproj", "{ACF0A518-8F91-40E7-B866-4269CC65C3FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Freemud.BE.TopshelfSample", "Freemud.BE.TopshelfSample\Freemud.BE.TopshelfSample.csproj", "{C13EC0FF-609C-4196-8C16-83E87611EBFD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Freemud.BE.Toolbox.Testing", "Freemud.BE.Toolbox.Testing\Freemud.BE.Toolbox.Testing.csproj", "{5145C51B-7015-49DB-AB09-314A75A0BF44}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
...@@ -21,6 +25,14 @@ Global ...@@ -21,6 +25,14 @@ Global
{ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU {ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Release|Any CPU.Build.0 = Release|Any CPU {ACF0A518-8F91-40E7-B866-4269CC65C3FA}.Release|Any CPU.Build.0 = Release|Any CPU
{C13EC0FF-609C-4196-8C16-83E87611EBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C13EC0FF-609C-4196-8C16-83E87611EBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C13EC0FF-609C-4196-8C16-83E87611EBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C13EC0FF-609C-4196-8C16-83E87611EBFD}.Release|Any CPU.Build.0 = Release|Any CPU
{5145C51B-7015-49DB-AB09-314A75A0BF44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5145C51B-7015-49DB-AB09-314A75A0BF44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5145C51B-7015-49DB-AB09-314A75A0BF44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5145C51B-7015-49DB-AB09-314A75A0BF44}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment