添加项目文件。
This commit is contained in:
		
							
								
								
									
										24
									
								
								Chenfeng.MES.Archiver/Chenfeng.MES.Archiver.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Chenfeng.MES.Archiver/Chenfeng.MES.Archiver.csproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<PropertyGroup>
 | 
				
			||||||
 | 
							<OutputType>Exe</OutputType>
 | 
				
			||||||
 | 
							<TargetFramework>net6.0</TargetFramework>
 | 
				
			||||||
 | 
							<ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
 | 
							<Nullable>enable</Nullable>
 | 
				
			||||||
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<ItemGroup>
 | 
				
			||||||
 | 
							<PackageReference Include="CliFx" Version="2.1.0" />
 | 
				
			||||||
 | 
							<PackageReference Include="Dapper" Version="2.0.123" />
 | 
				
			||||||
 | 
							<PackageReference Include="MySqlConnector" Version="2.1.2" />
 | 
				
			||||||
 | 
						</ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<ItemGroup>
 | 
				
			||||||
 | 
							<Content Update="appsettings.json">
 | 
				
			||||||
 | 
								<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
 | 
				
			||||||
 | 
							</Content>
 | 
				
			||||||
 | 
						</ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
							
								
								
									
										202
									
								
								Chenfeng.MES.Archiver/Commands/MysqlCommand.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								Chenfeng.MES.Archiver/Commands/MysqlCommand.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,202 @@
 | 
				
			|||||||
 | 
					using MySqlConnector;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Dapper;
 | 
				
			||||||
 | 
					using CliFx;
 | 
				
			||||||
 | 
					using CliFx.Infrastructure;
 | 
				
			||||||
 | 
					using CliFx.Attributes;
 | 
				
			||||||
 | 
					using System.Data;
 | 
				
			||||||
 | 
					using System.Data.Common;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Chenfeng.MES.Archiver.Commands
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [Command()]
 | 
				
			||||||
 | 
					    public class MysqlCommand : ICommand
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [CommandParameter(0, Description = "数据库连接")]
 | 
				
			||||||
 | 
					        public string Connection { get; set; } = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string TableSuffix { get; set; } = "new";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DbConnection? Db { get; private set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Action<string> Print { get; set; } = (text) => { };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [CommandOption("legacy", Description = "旧版MES")]
 | 
				
			||||||
 | 
					        public bool Legacy { get; set; } = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [CommandOption("replace", Description = "替换表")]
 | 
				
			||||||
 | 
					        public bool Replace { get; set; } = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [CommandOption("restore", Description = "回复表")]
 | 
				
			||||||
 | 
					        public bool Restore { get; set; } = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [CommandOption("timeout", Description = "sql命令超时时间")]
 | 
				
			||||||
 | 
					        public int Timeout { get; set; } = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ValueTask ExecuteAsync(IConsole console)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Print = (text) => console.Output.WriteLine($"{DateTime.Now.ToLongTimeString()} {text}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var connBuilder = new MySqlConnectionStringBuilder(this.Connection);
 | 
				
			||||||
 | 
					            connBuilder.SslMode = MySqlSslMode.None;
 | 
				
			||||||
 | 
					            connBuilder.CharacterSet = "utf8";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var starMonth = DateTime.Now.AddMonths(-12).ToString("yyyyMM");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            SqlMapper.Settings.CommandTimeout = 60 * Timeout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (Restore)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                console.Output.WriteLine("还原备份表");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                console.Output.WriteLine($"拷贝"+( Legacy ? "旧" :"新")+"版表数据"+(Replace?"并替换":""));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Db = new MySqlConnection(connBuilder.ConnectionString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Db.Open();
 | 
				
			||||||
 | 
					                if (Legacy)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyMesLegacyTables(starMonth);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyMesTables(starMonth);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Print("操作成功");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                console.Output.WriteLine(ex.ToString());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            finally
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Db?.Close();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return default;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void CopyMesTables(string starMonth)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            CopyStep((table, newTable) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(table, newTable, "LEFT(orderno,6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					            }, "order", "order_box_block", "order_data_block", "order_data_goods", "order_data_parts", "order_item", "order_module_extra", "order_module_item", "order_package");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CopyStep((tProcess, newProcess) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(tProcess, newProcess, "LEFT(orderno,6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					                CopyStep((table, newTable) =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyChildData(table, newTable, newProcess, "parent.ID = child.OrderProcessID");
 | 
				
			||||||
 | 
					                }, "order_process_step_item", "order_process_step");
 | 
				
			||||||
 | 
					            }, "order_process");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CopyStep((table, newTable) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(table, newTable, "LEFT(DATE_FORMAT(CreateTime,'%Y%m'),6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					            }, "simple_plan_order");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CopyStep((parent, newParent) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(parent, newParent, "LEFT(DATE_FORMAT(CreateTime,'%Y%m'),6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					                CopyStep((child, newChild) =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyChildData(child, newChild, newParent, "parent.ID = child.ID");
 | 
				
			||||||
 | 
					                }, "order_block_plan_result");
 | 
				
			||||||
 | 
					            }, "order_block_plan");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //CopyStep((table, newTable) =>
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    CopyData(table, newTable, "concat('20',left(id,4)) >= @starMonth ", new { starMonth });
 | 
				
			||||||
 | 
					            //}, "order_scrap_board");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void CopyMesLegacyTables(string starMonth)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            CopyStep((order, newOrder) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(order, newOrder, "LEFT(DATE_FORMAT(SaleDate,'%Y%m'),6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                CopyStep((child, newChild) =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyChildData(child, newChild, newOrder, "parent.orderno=child.orderno");
 | 
				
			||||||
 | 
					                }, "SaleOrderItem", "saleblock", "saleobject", "saleorderobject", "saleorderoffer", "saleorderpackage", "saleblockobjids", "saleobjectobjids", "saleorder_block_cadmodelinfo", "saleorderblockbaseposition",
 | 
				
			||||||
 | 
					            "saleordergoodsinfo", "saleorder_block_point", "saleorder_block_pointinfo", "orderprocess", "orderprocessstep", "orderprocessstepitem");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }, "saleorder");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CopyStep((plan, newPlan) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CopyData(plan, newPlan, "LEFT(DATE_FORMAT(createtime,'%Y%m'),6) >= @starMonth", new { starMonth });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                CopyStep((child, newChild) =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    CopyChildData(child, newChild, newPlan, "parent.id=child.id");
 | 
				
			||||||
 | 
					                }, "orderblockprocessplanplaceresult");
 | 
				
			||||||
 | 
					            }, "orderblockprocessplan");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void CopyData(string table, string newTable, string where, object param)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Db.Execute($"INSERT INTO `{newTable}` SELECT * FROM `{table}` WHERE {where}", param);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        private void CopyChildData(string table, string newTable, string parentTable, string condition)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Db.Execute($"INSERT INTO `{newTable}`  SELECT child.* FROM `{parentTable}` parent join `{table}` child on {condition} ");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void CopyStep(Action<string, string> step, params string[] tables)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var list = tables.Select(table => new
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Table = table,
 | 
				
			||||||
 | 
					                NewTable = table + "_" + this.TableSuffix
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (var item in list)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (Restore)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Db.Execute($"DROP TABLE IF EXISTS `{item.Table}`");
 | 
				
			||||||
 | 
					                    Db.Execute($"RENAME TABLE `{item.Table}_bak` TO `{item.Table}`");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Db.Execute($"DROP TABLE IF EXISTS `{item.NewTable}`");
 | 
				
			||||||
 | 
					                    Db.Execute($"CREATE TABLE `{item.NewTable}` LIKE `{item.Table}`"); // IF NOT EXISTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Print(item.NewTable + " 创建完成");
 | 
				
			||||||
 | 
					                    step(item.Table, item.NewTable);
 | 
				
			||||||
 | 
					                    Print(item.NewTable + " 拷贝完成");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (Replace)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        Db.Execute($"RENAME TABLE `{item.Table}` TO `{item.Table}_bak`");
 | 
				
			||||||
 | 
					                        Db.Execute($"RENAME TABLE `{item.NewTable}` TO `{item.Table}`");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								Chenfeng.MES.Archiver/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Chenfeng.MES.Archiver/Program.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					// See https://aka.ms/new-console-template for more information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using CliFx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Console.WriteLine("Hello, World!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					await new CliApplicationBuilder()
 | 
				
			||||||
 | 
					            .AddCommandsFromThisAssembly()
 | 
				
			||||||
 | 
					            .Build()
 | 
				
			||||||
 | 
					            .RunAsync(args);
 | 
				
			||||||
							
								
								
									
										13
									
								
								Chenfeng.MES.Archiver/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Chenfeng.MES.Archiver/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "profiles": {
 | 
				
			||||||
 | 
					    "WSL": {
 | 
				
			||||||
 | 
					      "commandName": "WSL2",
 | 
				
			||||||
 | 
					      "environmentVariables": {},
 | 
				
			||||||
 | 
					      "distributionName": ""
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "copy-table": {
 | 
				
			||||||
 | 
					      "commandName": "Project",
 | 
				
			||||||
 | 
					      "commandLineArgs": "Server=192.168.1.127;UserId=root;Password=ruixinjie!@#123;Database=cferp_test;Port=3306;"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup>
 | 
				
			||||||
 | 
					    <TargetFramework>net6.0</TargetFramework>
 | 
				
			||||||
 | 
					    <ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
 | 
					    <Nullable>enable</Nullable>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
							
								
								
									
										12
									
								
								Chenfeng.MES.MysqlArchiver/DbContext.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Chenfeng.MES.MysqlArchiver/DbContext.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Chenfeng.MES.MysqlArchiver
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    internal class DbContext
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								MES-Shell/Chenfeng.MES.Shell.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								MES-Shell/Chenfeng.MES.Shell.csproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup>
 | 
				
			||||||
 | 
					    <OutputType>Exe</OutputType>
 | 
				
			||||||
 | 
					    <TargetFramework>net6.0</TargetFramework>
 | 
				
			||||||
 | 
					    <RootNamespace>Chenfeng.MES.Shell</RootNamespace>
 | 
				
			||||||
 | 
					    <ImplicitUsings>enable</ImplicitUsings>
 | 
				
			||||||
 | 
					    <Nullable>enable</Nullable>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
							
								
								
									
										2
									
								
								MES-Shell/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								MES-Shell/Program.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					// See https://aka.ms/new-console-template for more information
 | 
				
			||||||
 | 
					Console.WriteLine("Hello, World!");
 | 
				
			||||||
							
								
								
									
										25
									
								
								MES-Toolkit.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								MES-Toolkit.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					Microsoft Visual Studio Solution File, Format Version 12.00
 | 
				
			||||||
 | 
					# Visual Studio Version 17
 | 
				
			||||||
 | 
					VisualStudioVersion = 17.0.32014.148
 | 
				
			||||||
 | 
					MinimumVisualStudioVersion = 10.0.40219.1
 | 
				
			||||||
 | 
					Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chenfeng.MES.Archiver", "Chenfeng.MES.Archiver\Chenfeng.MES.Archiver.csproj", "{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}"
 | 
				
			||||||
 | 
					EndProject
 | 
				
			||||||
 | 
					Global
 | 
				
			||||||
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
 | 
							Debug|Any CPU = Debug|Any CPU
 | 
				
			||||||
 | 
							Release|Any CPU = Release|Any CPU
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
				
			||||||
 | 
							{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
				
			||||||
 | 
							{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
				
			||||||
 | 
							{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
				
			||||||
 | 
							{D42E639F-0E4D-4CE3-9793-230D6B07C3FE}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(SolutionProperties) = preSolution
 | 
				
			||||||
 | 
							HideSolutionNode = FALSE
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(ExtensibilityGlobals) = postSolution
 | 
				
			||||||
 | 
							SolutionGuid = {98DE2A94-0D14-4190-810A-75DE119C7113}
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
					EndGlobal
 | 
				
			||||||
		Reference in New Issue
	
	Block a user