A:添加新模块
This commit is contained in:
1 parent
43ff9bc57f
commit
25c4a663a5
9 files changed
+418
-15
No files matched your search
@@ -1,7 +0,0 @@
|
|||||||
namespace Common
|
|
||||||
{
|
|
||||||
public class Class1
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,338 @@
|
|||||||
|
namespace Common;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Global 轻量级 DI 容器使用示例
|
||||||
|
/// </summary>
|
||||||
|
public static class GlobalUsageExamples
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 基础使用示例
|
||||||
|
/// </summary>
|
||||||
|
public static void BasicUsageExamples()
|
||||||
|
{
|
||||||
|
// 1. 注册和获取单例服务
|
||||||
|
var config = new AppConfig { AppName = "MyApp", Version = "1.0" };
|
||||||
|
Global.RegisterSingleton(config);
|
||||||
|
|
||||||
|
var retrievedConfig = Global.Get<AppConfig>();
|
||||||
|
Console.WriteLine($"App: {retrievedConfig.AppName} v{retrievedConfig.Version}");
|
||||||
|
|
||||||
|
// 2. 使用工厂方法注册单例
|
||||||
|
Global.RegisterSingleton(() => new DatabaseConnection("connection-string"));
|
||||||
|
var db = Global.Get<DatabaseConnection>();
|
||||||
|
|
||||||
|
// 3. 注册瞬态服务(每次获取都是新实例)
|
||||||
|
Global.RegisterTransient(() => new RequestContext
|
||||||
|
{
|
||||||
|
RequestId = Guid.NewGuid().ToString(),
|
||||||
|
Timestamp = DateTime.Now
|
||||||
|
});
|
||||||
|
|
||||||
|
var request1 = Global.Get<RequestContext>();
|
||||||
|
var request2 = Global.Get<RequestContext>();
|
||||||
|
// request1 和 request2 是不同的实例
|
||||||
|
|
||||||
|
// 4. 尝试获取服务
|
||||||
|
if (Global.TryGet<ILogger>(out var logger))
|
||||||
|
{
|
||||||
|
logger.Log("Service found");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Logger not registered");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 获取服务或默认值
|
||||||
|
var fallbackLogger = Global.GetOrDefault<ILogger>(new ConsoleLogger());
|
||||||
|
|
||||||
|
// 6. 检查服务是否注册
|
||||||
|
if (Global.IsRegistered<AppConfig>())
|
||||||
|
{
|
||||||
|
Console.WriteLine("AppConfig is registered");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 服务变更通知示例
|
||||||
|
/// </summary>
|
||||||
|
public static void ChangeNotificationExamples()
|
||||||
|
{
|
||||||
|
// 1. 订阅服务变更通知
|
||||||
|
Global.Subscribe<AppConfig>(eventArgs =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Config changed at {eventArgs.ChangedAt}");
|
||||||
|
Console.WriteLine($"Old: {eventArgs.OldValue?.AppName ?? "null"}");
|
||||||
|
Console.WriteLine($"New: {eventArgs.NewValue.AppName}");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 2. 注册初始配置
|
||||||
|
var config = new AppConfig { AppName = "MyApp", Version = "1.0" };
|
||||||
|
Global.RegisterSingleton(config);
|
||||||
|
|
||||||
|
// 3. 更新配置(会触发通知)
|
||||||
|
var newConfig = new AppConfig { AppName = "MyApp", Version = "2.0" };
|
||||||
|
Global.Update(newConfig);
|
||||||
|
|
||||||
|
// 4. 也可以在注册时就设置为通知模式
|
||||||
|
var anotherConfig = new AppConfig { AppName = "MyApp", Version = "3.0" };
|
||||||
|
Global.RegisterSingleton(anotherConfig, notifyIfExists: true); // 会触发通知
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 实时配置更新示例
|
||||||
|
/// </summary>
|
||||||
|
public static void LiveConfigurationExample()
|
||||||
|
{
|
||||||
|
// 场景:应用程序配置可以动态更新,所有组件都能收到通知
|
||||||
|
|
||||||
|
// 1. 定义配置变更处理器
|
||||||
|
void OnConfigChanged(ServiceChangedEventArgs<AppConfig> e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] Configuration updated:");
|
||||||
|
Console.WriteLine($" Old Version: {e.OldValue?.Version}");
|
||||||
|
Console.WriteLine($" New Version: {e.NewValue.Version}");
|
||||||
|
|
||||||
|
// 在这里可以执行配置变更后的操作
|
||||||
|
// 例如:重新连接数据库、刷新缓存等
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 订阅配置变更
|
||||||
|
Global.Subscribe<AppConfig>(OnConfigChanged);
|
||||||
|
|
||||||
|
// 3. 注册初始配置
|
||||||
|
Global.RegisterSingleton(new AppConfig { AppName = "MyApp", Version = "1.0" });
|
||||||
|
|
||||||
|
// 4. 模拟配置文件被修改,更新配置
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
Global.Update(new AppConfig { AppName = "MyApp", Version = "1.1" });
|
||||||
|
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
Global.Update(new AppConfig { AppName = "MyApp", Version = "1.2" });
|
||||||
|
|
||||||
|
// 5. 取消订阅
|
||||||
|
Global.Unsubscribe<AppConfig>(OnConfigChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 多订阅者示例
|
||||||
|
/// </summary>
|
||||||
|
public static void MultipleSubscribersExample()
|
||||||
|
{
|
||||||
|
// 场景:多个组件都关心某个服务的变更
|
||||||
|
|
||||||
|
// 订阅者 1:UI 组件
|
||||||
|
Global.Subscribe<UserSession>(e =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[UI] User session updated: {e.NewValue.Username}");
|
||||||
|
// 更新UI显示
|
||||||
|
});
|
||||||
|
|
||||||
|
// 订阅者 2:日志组件
|
||||||
|
Global.Subscribe<UserSession>(e =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[LOG] Session change detected at {e.ChangedAt}");
|
||||||
|
// 记录日志
|
||||||
|
});
|
||||||
|
|
||||||
|
// 订阅者 3:分析组件
|
||||||
|
Global.Subscribe<UserSession>(e =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[ANALYTICS] Tracking user: {e.NewValue.Username}");
|
||||||
|
// 发送分析数据
|
||||||
|
});
|
||||||
|
|
||||||
|
// 注册会话
|
||||||
|
Global.RegisterSingleton(new UserSession { Username = "user1", LoginTime = DateTime.Now });
|
||||||
|
|
||||||
|
// 更新会话(所有订阅者都会收到通知)
|
||||||
|
Thread.Sleep(100);
|
||||||
|
Global.Update(new UserSession { Username = "user2", LoginTime = DateTime.Now });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 服务生命周期对比示例
|
||||||
|
/// </summary>
|
||||||
|
public static void LifetimeComparisonExample()
|
||||||
|
{
|
||||||
|
// 1. 单例服务:整个应用生命周期内只有一个实例
|
||||||
|
Global.RegisterSingleton(() => new CacheService());
|
||||||
|
var cache1 = Global.Get<CacheService>();
|
||||||
|
var cache2 = Global.Get<CacheService>();
|
||||||
|
Console.WriteLine($"Singleton: {ReferenceEquals(cache1, cache2)}"); // True
|
||||||
|
|
||||||
|
// 2. 瞬态服务:每次获取都是新实例
|
||||||
|
Global.RegisterTransient(() => new OperationContext());
|
||||||
|
var ctx1 = Global.Get<OperationContext>();
|
||||||
|
var ctx2 = Global.Get<OperationContext>();
|
||||||
|
Console.WriteLine($"Transient: {ReferenceEquals(ctx1, ctx2)}"); // False
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 服务管理示例
|
||||||
|
/// </summary>
|
||||||
|
public static void ServiceManagementExample()
|
||||||
|
{
|
||||||
|
// 注册多个服务
|
||||||
|
Global.RegisterSingleton(new AppConfig { AppName = "MyApp" });
|
||||||
|
Global.RegisterSingleton(() => new DatabaseConnection("conn-string"));
|
||||||
|
Global.RegisterTransient(() => new RequestContext());
|
||||||
|
|
||||||
|
// 查看已注册服务数量
|
||||||
|
Console.WriteLine($"Total services: {Global.Count}");
|
||||||
|
|
||||||
|
// 注销特定服务
|
||||||
|
if (Global.Unregister<RequestContext>())
|
||||||
|
{
|
||||||
|
Console.WriteLine("RequestContext unregistered");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除所有服务
|
||||||
|
Global.Clear();
|
||||||
|
Console.WriteLine($"Services after clear: {Global.Count}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 错误处理示例
|
||||||
|
/// </summary>
|
||||||
|
public static void ErrorHandlingExample()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 尝试获取未注册的服务
|
||||||
|
var service = Global.Get<ILogger>();
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 尝试更新瞬态服务
|
||||||
|
Global.RegisterTransient(() => new RequestContext());
|
||||||
|
Global.Update(new RequestContext()); // 会抛出异常
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Error: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 安全的获取方式
|
||||||
|
if (Global.TryGet<ILogger>(out var logger))
|
||||||
|
{
|
||||||
|
logger.Log("Success");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Logger not available, using fallback");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 工厂模式集成示例
|
||||||
|
/// </summary>
|
||||||
|
public static void FactoryPatternExample()
|
||||||
|
{
|
||||||
|
// 使用工厂方法创建复杂对象
|
||||||
|
Global.RegisterSingleton(() =>
|
||||||
|
{
|
||||||
|
var config = LoadConfigFromFile();
|
||||||
|
ValidateConfig(config);
|
||||||
|
return config;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 延迟初始化:只有在第一次 Get 时才会调用工厂方法
|
||||||
|
var config = Global.Get<AppConfig>(); // 此时才执行工厂方法
|
||||||
|
|
||||||
|
// 后续获取都返回同一个实例
|
||||||
|
var sameConfig = Global.Get<AppConfig>(); // 直接返回,不再调用工厂
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 线程安全示例
|
||||||
|
/// </summary>
|
||||||
|
public static void ThreadSafetyExample()
|
||||||
|
{
|
||||||
|
// 注册服务
|
||||||
|
Global.RegisterSingleton(() =>
|
||||||
|
{
|
||||||
|
Thread.Sleep(100); // 模拟复杂的初始化过程
|
||||||
|
return new CacheService();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 多线程并发获取(保证只创建一次)
|
||||||
|
var tasks = Enumerable.Range(0, 10).Select(i =>
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
var service = Global.Get<CacheService>();
|
||||||
|
Console.WriteLine($"Thread {i}: {service.GetHashCode()}");
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
Task.WaitAll(tasks.ToArray());
|
||||||
|
// 所有线程获取的都是同一个实例
|
||||||
|
}
|
||||||
|
|
||||||
|
#region 辅助类型
|
||||||
|
|
||||||
|
private class AppConfig
|
||||||
|
{
|
||||||
|
public string AppName { get; set; } = "";
|
||||||
|
public string Version { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DatabaseConnection
|
||||||
|
{
|
||||||
|
public string ConnectionString { get; }
|
||||||
|
public DatabaseConnection(string connectionString)
|
||||||
|
{
|
||||||
|
ConnectionString = connectionString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RequestContext
|
||||||
|
{
|
||||||
|
public string RequestId { get; set; } = Guid.NewGuid().ToString();
|
||||||
|
public DateTime Timestamp { get; set; } = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
private interface ILogger
|
||||||
|
{
|
||||||
|
void Log(string message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ConsoleLogger : ILogger
|
||||||
|
{
|
||||||
|
public void Log(string message) => Console.WriteLine($"[LOG] {message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private class UserSession
|
||||||
|
{
|
||||||
|
public string Username { get; set; } = "";
|
||||||
|
public DateTime LoginTime { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CacheService
|
||||||
|
{
|
||||||
|
private readonly Dictionary<string, object> _cache = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class OperationContext
|
||||||
|
{
|
||||||
|
public Guid OperationId { get; } = Guid.NewGuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AppConfig LoadConfigFromFile()
|
||||||
|
{
|
||||||
|
// 模拟从文件加载配置
|
||||||
|
return new AppConfig { AppName = "MyApp", Version = "1.0" };
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ValidateConfig(AppConfig config)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(config.AppName))
|
||||||
|
throw new InvalidOperationException("AppName cannot be empty");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
namespace Config
|
|
||||||
{
|
|
||||||
public class Class1
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
@@ -6,4 +6,17 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Tomlyn" Version="0.16.2" />
|
||||||
|
<PackageReference Include="Tomlyn.Extensions.Configuration" Version="0.16.2" />
|
||||||
|
<PackageReference Include="IniParser" Version="2.5.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -9,6 +9,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csp
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Config", "Config\Config.csproj", "{37FBE4C9-1658-4953-8D12-71068EE28804}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Config", "Config\Config.csproj", "{37FBE4C9-1658-4953-8D12-71068EE28804}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Test", "..\..\test\Common.Test\Common.Test.csproj", "{E1DEDCA3-85E7-4965-B05A-2965A18E9249}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventBus", "EventBus\EventBus.csproj", "{BF56E23F-4B11-4C3F-9654-2D23D92314C7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Log", "Log\Log.csproj", "{15F92FFF-521A-4F76-9886-1C0B1969D96D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetClient", "NetClient\NetClient.csproj", "{C6BD72CA-701F-4983-A62E-2BD834DA10EC}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetServer", "NetServer\NetServer.csproj", "{8223A4A8-DE17-4E26-A3EB-674E58B9C446}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -27,6 +37,26 @@ Global
|
|||||||
{37FBE4C9-1658-4953-8D12-71068EE28804}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{37FBE4C9-1658-4953-8D12-71068EE28804}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{37FBE4C9-1658-4953-8D12-71068EE28804}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{37FBE4C9-1658-4953-8D12-71068EE28804}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{37FBE4C9-1658-4953-8D12-71068EE28804}.Release|Any CPU.Build.0 = Release|Any CPU
|
{37FBE4C9-1658-4953-8D12-71068EE28804}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{E1DEDCA3-85E7-4965-B05A-2965A18E9249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{E1DEDCA3-85E7-4965-B05A-2965A18E9249}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E1DEDCA3-85E7-4965-B05A-2965A18E9249}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E1DEDCA3-85E7-4965-B05A-2965A18E9249}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BF56E23F-4B11-4C3F-9654-2D23D92314C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BF56E23F-4B11-4C3F-9654-2D23D92314C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BF56E23F-4B11-4C3F-9654-2D23D92314C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BF56E23F-4B11-4C3F-9654-2D23D92314C7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{15F92FFF-521A-4F76-9886-1C0B1969D96D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{15F92FFF-521A-4F76-9886-1C0B1969D96D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{15F92FFF-521A-4F76-9886-1C0B1969D96D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{15F92FFF-521A-4F76-9886-1C0B1969D96D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C6BD72CA-701F-4983-A62E-2BD834DA10EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C6BD72CA-701F-4983-A62E-2BD834DA10EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C6BD72CA-701F-4983-A62E-2BD834DA10EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C6BD72CA-701F-4983-A62E-2BD834DA10EC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{8223A4A8-DE17-4E26-A3EB-674E58B9C446}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8223A4A8-DE17-4E26-A3EB-674E58B9C446}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8223A4A8-DE17-4E26-A3EB-674E58B9C446}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8223A4A8-DE17-4E26-A3EB-674E58B9C446}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Reference in new issue
Block a user