updated
This commit is contained in:
parent
fa67bbe251
commit
08276e2225
750
CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs
Normal file
750
CS2WebSocketTelemetryPlugin/CS2WebSocketTelemetryPlugin.cs
Normal file
@ -0,0 +1,750 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Net.Security;
|
||||||
|
using System.Security.Authentication;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using CounterStrikeSharp.API;
|
||||||
|
using CounterStrikeSharp.API.Core;
|
||||||
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
|
using CounterStrikeSharp.API.Core.Attributes.Registration;
|
||||||
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
|
using CounterStrikeSharp.API.Modules.Events;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace WsTelemetry;
|
||||||
|
|
||||||
|
[MinimumApiVersion(175)]
|
||||||
|
public class WebSocketTelemetryPlugin : BasePlugin
|
||||||
|
{
|
||||||
|
public override string ModuleName => "WS Telemetry";
|
||||||
|
public override string ModuleVersion => "1.2.0";
|
||||||
|
public override string ModuleAuthor => "you + ChatGPT";
|
||||||
|
public override string ModuleDescription => "WS(S)-Server: broadcastet Spieler-Position/ViewAngles + Nade-Events";
|
||||||
|
|
||||||
|
// --- Konfiguration ---
|
||||||
|
private volatile bool _enabled = false;
|
||||||
|
private volatile int _sendHz = 10;
|
||||||
|
|
||||||
|
// Bind-Info: ws://host:port/path oder wss://host:port/path
|
||||||
|
private volatile string _bindHost = "0.0.0.0";
|
||||||
|
private volatile int _bindPort = 8081;
|
||||||
|
private volatile string _bindPath = "/telemetry";
|
||||||
|
private volatile bool _useTls = false;
|
||||||
|
|
||||||
|
// TLS Zertifikat (PFX)
|
||||||
|
private volatile string _certPath = "";
|
||||||
|
private volatile string _certPassword = "";
|
||||||
|
private X509Certificate2? _serverCert;
|
||||||
|
|
||||||
|
// --- Server / Clients ---
|
||||||
|
private TcpListener? _listener;
|
||||||
|
private CancellationTokenSource? _serverCts;
|
||||||
|
private Task? _acceptTask;
|
||||||
|
private volatile bool _serverRunning = false;
|
||||||
|
|
||||||
|
private class ClientState
|
||||||
|
{
|
||||||
|
public required TcpClient Tcp;
|
||||||
|
public required Stream Stream; // NetworkStream oder SslStream
|
||||||
|
public readonly object SendLock = new();
|
||||||
|
public readonly CancellationTokenSource Cts = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly ConcurrentDictionary<int, ClientState> _clients = new();
|
||||||
|
private int _clientSeq = 0;
|
||||||
|
|
||||||
|
// --- Outgoing Queue (für Events) ---
|
||||||
|
private readonly ConcurrentQueue<string> _outbox = new();
|
||||||
|
private readonly AutoResetEvent _sendSignal = new(false);
|
||||||
|
|
||||||
|
// --- Tick / Sampling ---
|
||||||
|
private double _accumulator = 0.0;
|
||||||
|
private const double MaxFrameDt = 0.25;
|
||||||
|
private DateTime _lastTick = DateTime.UtcNow;
|
||||||
|
|
||||||
|
public override void Load(bool hotReload)
|
||||||
|
{
|
||||||
|
Logger.LogInformation("[WS] Plugin geladen. Kommandos: css_ws_enable, css_ws_url, css_ws_rate, css_ws_cert, css_ws_certpwd");
|
||||||
|
RegisterListener<Listeners.OnTick>(OnTick);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Unload(bool hotReload)
|
||||||
|
{
|
||||||
|
StopWebSocket();
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// Konsolen-Kommandos
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
[ConsoleCommand("css_ws_enable", "Aktiviert/Deaktiviert den integrierten WS(S)-Server: css_ws_enable 1|0")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "<1|0>")]
|
||||||
|
public void CmdEnable(CCSPlayerController? caller, CommandInfo cmd)
|
||||||
|
{
|
||||||
|
var val = cmd.GetArg(1);
|
||||||
|
bool enable = val == "1" || val.Equals("true", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
|
if (enable == _enabled)
|
||||||
|
{
|
||||||
|
cmd.ReplyToCommand($"[WS] Bereits {_enabled}.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_enabled = enable;
|
||||||
|
cmd.ReplyToCommand($"[WS] Enabled = {_enabled}");
|
||||||
|
|
||||||
|
if (_enabled) StartWebSocket();
|
||||||
|
else StopWebSocket();
|
||||||
|
}
|
||||||
|
|
||||||
|
[ConsoleCommand("css_ws_url", "Setzt Bind-Host/Port/Pfad als ws[s]://host:port/path")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "<ws[s]://host:port/path>")]
|
||||||
|
public void CmdUrl(CCSPlayerController? caller, CommandInfo cmd)
|
||||||
|
{
|
||||||
|
var url = cmd.GetArg(1);
|
||||||
|
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri) || (uri.Scheme != "ws" && uri.Scheme != "wss"))
|
||||||
|
{
|
||||||
|
cmd.ReplyToCommand($"[WS] Ungültige URL: {url}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_useTls = uri.Scheme == "wss";
|
||||||
|
_bindHost = string.IsNullOrWhiteSpace(uri.Host) ? "0.0.0.0" : uri.Host;
|
||||||
|
_bindPort = uri.IsDefaultPort ? (_useTls ? 443 : 80) : uri.Port;
|
||||||
|
_bindPath = string.IsNullOrEmpty(uri.AbsolutePath) ? "/" : uri.AbsolutePath;
|
||||||
|
|
||||||
|
if (_bindHost == "127.0.0.1") _bindHost = "0.0.0.0";
|
||||||
|
|
||||||
|
var scheme = _useTls ? "wss" : "ws";
|
||||||
|
cmd.ReplyToCommand($"[WS] Bind = {scheme}://{_bindHost}:{_bindPort}{_bindPath}");
|
||||||
|
if (_enabled) { StopWebSocket(); StartWebSocket(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[ConsoleCommand("css_ws_rate", "Sendefrequenz in Hz (Standard 10)")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "<hz>")]
|
||||||
|
public void CmdRate(CCSPlayerController? caller, CommandInfo cmd)
|
||||||
|
{
|
||||||
|
if (int.TryParse(cmd.GetArg(1), out var hz) && hz > 0 && hz <= 128)
|
||||||
|
{
|
||||||
|
_sendHz = hz;
|
||||||
|
cmd.ReplyToCommand($"[WS] Sendefrequenz = {_sendHz} Hz");
|
||||||
|
}
|
||||||
|
else cmd.ReplyToCommand("[WS] Ungültig. Bereich: 1..128");
|
||||||
|
}
|
||||||
|
|
||||||
|
[ConsoleCommand("css_ws_cert", "Setzt das TLS-Zertifikat (PFX-Datei)")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "<pfad-zum.pfx>")]
|
||||||
|
public void CmdCert(CCSPlayerController? caller, CommandInfo cmd)
|
||||||
|
{
|
||||||
|
var input = cmd.GetArg(1);
|
||||||
|
_certPath = Path.IsPathRooted(input) ? input : Path.Combine(ModuleDirectory, input);
|
||||||
|
_serverCert = null; // neu laden beim Start
|
||||||
|
cmd.ReplyToCommand($"[WS] Zertifikatspfad gesetzt: '{_certPath}'");
|
||||||
|
if (_enabled && _useTls) { StopWebSocket(); StartWebSocket(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
[ConsoleCommand("css_ws_certpwd", "Setzt das Passwort für das PFX-Zertifikat (oder '-' zum Leeren)")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "<passwort|->")]
|
||||||
|
public void CmdCertPwd(CCSPlayerController? caller, CommandInfo cmd)
|
||||||
|
{
|
||||||
|
var pwd = cmd.GetArg(1);
|
||||||
|
_certPassword = pwd == "-" ? "" : pwd;
|
||||||
|
_serverCert = null; // neu laden beim Start
|
||||||
|
cmd.ReplyToCommand($"[WS] Zertifikatspasswort {(string.IsNullOrEmpty(_certPassword) ? "gelöscht" : "gesetzt")}.");
|
||||||
|
if (_enabled && _useTls) { StopWebSocket(); StartWebSocket(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// Tick / Spieler-Snapshot
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
private void OnTick()
|
||||||
|
{
|
||||||
|
if (!_enabled || !_serverRunning) return;
|
||||||
|
|
||||||
|
var now = DateTime.UtcNow;
|
||||||
|
var dt = (now - _lastTick).TotalSeconds;
|
||||||
|
_lastTick = now;
|
||||||
|
if (dt > MaxFrameDt) dt = MaxFrameDt;
|
||||||
|
|
||||||
|
_accumulator += dt;
|
||||||
|
var targetDt = 1.0 / Math.Max(1, _sendHz);
|
||||||
|
if (_accumulator < targetDt) return;
|
||||||
|
_accumulator = 0;
|
||||||
|
|
||||||
|
var list = new System.Collections.Generic.List<object>();
|
||||||
|
|
||||||
|
foreach (var p in Utilities.GetPlayers())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (p == null || !p.IsValid || p.IsBot || p.IsHLTV) continue;
|
||||||
|
|
||||||
|
var pawnHandle = p.PlayerPawn;
|
||||||
|
if (pawnHandle == null || !pawnHandle.IsValid) continue;
|
||||||
|
|
||||||
|
var pawn = pawnHandle.Value;
|
||||||
|
if (pawn == null) continue;
|
||||||
|
|
||||||
|
var pos = pawn.AbsOrigin;
|
||||||
|
var ang = pawn.EyeAngles;
|
||||||
|
|
||||||
|
list.Add(new
|
||||||
|
{
|
||||||
|
steamId = p.AuthorizedSteamID?.SteamId64 ?? 0UL,
|
||||||
|
name = p.PlayerName,
|
||||||
|
team = p.TeamNum,
|
||||||
|
pos = new { x = pos.X, y = pos.Y, z = pos.Z },
|
||||||
|
view = new { pitch = ang.X, yaw = ang.Y, roll = ang.Z }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.Count == 0) return;
|
||||||
|
|
||||||
|
var payload = new
|
||||||
|
{
|
||||||
|
type = "tick",
|
||||||
|
t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
||||||
|
players = list
|
||||||
|
};
|
||||||
|
|
||||||
|
Broadcast(JsonSerializer.Serialize(payload));
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// Game-Events: Granaten
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
[GameEventHandler]
|
||||||
|
public HookResult OnGrenadeThrown(EventGrenadeThrown ev, GameEventInfo info)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var p = ev.Userid;
|
||||||
|
Enqueue(new
|
||||||
|
{
|
||||||
|
type = "nade",
|
||||||
|
sub = "thrown",
|
||||||
|
t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
||||||
|
steamId = p?.AuthorizedSteamID?.SteamId64 ?? 0UL,
|
||||||
|
name = p?.PlayerName ?? "",
|
||||||
|
weapon = ev.Weapon
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return HookResult.Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
[GameEventHandler] public HookResult OnHeDetonate (EventHegrenadeDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "he");
|
||||||
|
[GameEventHandler] public HookResult OnFlashDetonate (EventFlashbangDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "flash");
|
||||||
|
[GameEventHandler] public HookResult OnSmokeDetonate (EventSmokegrenadeDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "smoke");
|
||||||
|
[GameEventHandler] public HookResult OnDecoyDetonate (EventDecoyDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "decoy");
|
||||||
|
[GameEventHandler] public HookResult OnMolotovDetonate (EventMolotovDetonate ev, GameEventInfo info) => EnqueueNadeDet(ev, "molotov");
|
||||||
|
|
||||||
|
private HookResult EnqueueNadeDet(GameEvent ev, string kind)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dynamic d = ev;
|
||||||
|
var p = d.Userid as CCSPlayerController;
|
||||||
|
|
||||||
|
Enqueue(new
|
||||||
|
{
|
||||||
|
type = "nade",
|
||||||
|
sub = "detonate",
|
||||||
|
nade = kind,
|
||||||
|
t = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
||||||
|
steamId = p?.AuthorizedSteamID?.SteamId64 ?? 0UL,
|
||||||
|
name = p?.PlayerName ?? "",
|
||||||
|
pos = new { x = (float)d.X, y = (float)d.Y, z = (float)d.Z }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return HookResult.Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HookResult Enqueue(object obj)
|
||||||
|
{
|
||||||
|
if (!_enabled || !_serverRunning) return HookResult.Continue;
|
||||||
|
_outbox.Enqueue(JsonSerializer.Serialize(obj));
|
||||||
|
_sendSignal.Set();
|
||||||
|
return HookResult.Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TryLoadCertificate(out string usedPath)
|
||||||
|
{
|
||||||
|
usedPath = _certPath;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string pluginDir = ModuleDirectory; // CSS stellt das bereit
|
||||||
|
// Wenn kein Pfad konfiguriert: im Plugin-Ordner suchen
|
||||||
|
if (string.IsNullOrWhiteSpace(usedPath))
|
||||||
|
{
|
||||||
|
var def = Path.Combine(pluginDir, "cert.pfx");
|
||||||
|
if (File.Exists(def))
|
||||||
|
{
|
||||||
|
usedPath = def;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var files = Directory.GetFiles(pluginDir, "*.pfx", SearchOption.TopDirectoryOnly);
|
||||||
|
if (files.Length > 0)
|
||||||
|
usedPath = files[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Relativen Pfad relativ zum Plugin-Ordner interpretieren
|
||||||
|
if (!Path.IsPathRooted(usedPath))
|
||||||
|
usedPath = Path.Combine(pluginDir, usedPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(usedPath) || !File.Exists(usedPath))
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"[WS] Kein PFX gefunden im Plugin-Ordner ({pluginDir}). " +
|
||||||
|
"Lege z.B. 'cert.pfx' dort ab oder setze mit css_ws_cert <pfad>.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_serverCert = new X509Certificate2(
|
||||||
|
usedPath,
|
||||||
|
string.IsNullOrEmpty(_certPassword) ? null : _certPassword,
|
||||||
|
X509KeyStorageFlags.EphemeralKeySet | X509KeyStorageFlags.Exportable
|
||||||
|
);
|
||||||
|
|
||||||
|
// Erfolgs-Hinweis
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Logger.LogInformation($"[WS] TLS-Zertifikat geladen: {Path.GetFileName(usedPath)} | " +
|
||||||
|
$"Subject: {_serverCert.Subject} | Gültig bis: {_serverCert.NotAfter:u}");
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Logger.LogInformation($"[WS] TLS-Zertifikat geladen: {Path.GetFileName(usedPath)}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"[WS] Zertifikat konnte nicht geladen werden: {ex.Message}");
|
||||||
|
_serverCert = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// =========================
|
||||||
|
// WS(S)-Server / Broadcast
|
||||||
|
// =========================
|
||||||
|
|
||||||
|
private void StartWebSocket()
|
||||||
|
{
|
||||||
|
StopWebSocket();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (_useTls)
|
||||||
|
{
|
||||||
|
if (!TryLoadCertificate(out var usedPath))
|
||||||
|
throw new Exception("TLS aktiv, aber kein funktionsfähiges PFX gefunden.");
|
||||||
|
}
|
||||||
|
|
||||||
|
IPAddress ip;
|
||||||
|
if (!IPAddress.TryParse(_bindHost, out ip))
|
||||||
|
ip = IPAddress.Any;
|
||||||
|
|
||||||
|
_listener = new TcpListener(ip, _bindPort);
|
||||||
|
_listener.Start();
|
||||||
|
_serverCts = new CancellationTokenSource();
|
||||||
|
_serverRunning = true;
|
||||||
|
|
||||||
|
var scheme = _useTls ? "wss" : "ws";
|
||||||
|
Logger.LogInformation($"[WS] Server lauscht auf {scheme}://{_bindHost}:{_bindPort}{_bindPath}");
|
||||||
|
|
||||||
|
_acceptTask = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var ct = _serverCts!.Token;
|
||||||
|
while (!ct.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
TcpClient? tcp = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
tcp = await _listener!.AcceptTcpClientAsync(ct);
|
||||||
|
_ = HandleClientAsync(tcp, ct);
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException) { break; }
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"[WS] Accept-Fehler: {ex.Message}");
|
||||||
|
tcp?.Close();
|
||||||
|
await Task.Delay(250, ct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sender, der die Outbox entleert
|
||||||
|
_ = Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var ct = _serverCts!.Token;
|
||||||
|
while (!ct.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
if (_outbox.IsEmpty) _sendSignal.WaitOne(200);
|
||||||
|
while (_outbox.TryDequeue(out var msg))
|
||||||
|
Broadcast(msg);
|
||||||
|
await Task.Delay(1, ct);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"[WS] Start fehlgeschlagen: {ex.Message}");
|
||||||
|
StopWebSocket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StopWebSocket()
|
||||||
|
{
|
||||||
|
_serverRunning = false;
|
||||||
|
|
||||||
|
try { _serverCts?.Cancel(); } catch { }
|
||||||
|
|
||||||
|
try { _listener?.Stop(); } catch { }
|
||||||
|
_listener = null;
|
||||||
|
|
||||||
|
foreach (var kv in _clients)
|
||||||
|
{
|
||||||
|
try { kv.Value.Cts.Cancel(); } catch { }
|
||||||
|
try { kv.Value.Stream.Close(); } catch { }
|
||||||
|
try { kv.Value.Tcp.Close(); } catch { }
|
||||||
|
}
|
||||||
|
_clients.Clear();
|
||||||
|
|
||||||
|
_serverCts = null;
|
||||||
|
_acceptTask = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Broadcast(string text)
|
||||||
|
{
|
||||||
|
foreach (var kv in _clients)
|
||||||
|
{
|
||||||
|
var id = kv.Key;
|
||||||
|
var c = kv.Value;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SendTextFrame(c, text);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_clients.TryRemove(id, out _);
|
||||||
|
try { c.Cts.Cancel(); } catch { }
|
||||||
|
try { c.Stream.Close(); } catch { }
|
||||||
|
try { c.Tcp.Close(); } catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task HandleClientAsync(TcpClient tcp, CancellationToken serverCt)
|
||||||
|
{
|
||||||
|
var id = Interlocked.Increment(ref _clientSeq);
|
||||||
|
tcp.NoDelay = true;
|
||||||
|
|
||||||
|
// Basis-Stream
|
||||||
|
var baseStream = tcp.GetStream();
|
||||||
|
baseStream.ReadTimeout = 10000;
|
||||||
|
baseStream.WriteTimeout = 10000;
|
||||||
|
|
||||||
|
// Optional TLS
|
||||||
|
Stream stream = baseStream;
|
||||||
|
SslStream? ssl = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (_useTls)
|
||||||
|
{
|
||||||
|
ssl = new SslStream(baseStream, leaveInnerStreamOpen: false);
|
||||||
|
await ssl.AuthenticateAsServerAsync(
|
||||||
|
_serverCert!,
|
||||||
|
clientCertificateRequired: false,
|
||||||
|
enabledSslProtocols: SslProtocols.Tls13 | SslProtocols.Tls12,
|
||||||
|
checkCertificateRevocation: false
|
||||||
|
);
|
||||||
|
stream = ssl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!await DoHandshakeAsync(stream, serverCt))
|
||||||
|
{
|
||||||
|
tcp.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = new ClientState { Tcp = tcp, Stream = stream };
|
||||||
|
_clients[id] = state;
|
||||||
|
|
||||||
|
Logger.LogInformation($"[WS] Client #{id} verbunden. Aktive: {_clients.Count}");
|
||||||
|
|
||||||
|
await ReceiveLoop(state, serverCt);
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException) { }
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"[WS] Client #{id} Fehler: {ex.Message}");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_clients.TryRemove(id, out _);
|
||||||
|
try { stream.Close(); } catch { }
|
||||||
|
try { ssl?.Dispose(); } catch { }
|
||||||
|
try { baseStream.Close(); } catch { }
|
||||||
|
try { tcp.Close(); } catch { }
|
||||||
|
Logger.LogInformation($"[WS] Client #{id} getrennt. Aktive: {_clients.Count}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Minimaler WebSocket-Server: Handshake + Frames ---
|
||||||
|
|
||||||
|
private static async Task<string> ReadHeadersAsync(Stream s, CancellationToken ct)
|
||||||
|
{
|
||||||
|
var buf = new byte[8192];
|
||||||
|
using var ms = new MemoryStream();
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
int n = await s.ReadAsync(buf.AsMemory(0, buf.Length), ct);
|
||||||
|
if (n <= 0) break;
|
||||||
|
ms.Write(buf, 0, n);
|
||||||
|
if (ms.Length >= 4)
|
||||||
|
{
|
||||||
|
var b = ms.GetBuffer();
|
||||||
|
for (int i = 3; i < ms.Length; i++)
|
||||||
|
{
|
||||||
|
if (b[i - 3] == '\r' && b[i - 2] == '\n' && b[i - 1] == '\r' && b[i] == '\n')
|
||||||
|
{
|
||||||
|
return Encoding.ASCII.GetString(b, 0, i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ms.Length > 65536) throw new Exception("Header zu groß");
|
||||||
|
}
|
||||||
|
return Encoding.ASCII.GetString(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<bool> DoHandshakeAsync(Stream stream, CancellationToken ct)
|
||||||
|
{
|
||||||
|
var header = await ReadHeadersAsync(stream, ct);
|
||||||
|
if (!header.StartsWith("GET ", StringComparison.OrdinalIgnoreCase))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var firstLineEnd = header.IndexOf("\r\n", StringComparison.Ordinal);
|
||||||
|
var firstLine = firstLineEnd > 0 ? header[..firstLineEnd] : header;
|
||||||
|
var parts = firstLine.Split(' ');
|
||||||
|
if (parts.Length < 2) return false;
|
||||||
|
|
||||||
|
var path = parts[1];
|
||||||
|
if (!path.StartsWith(_bindPath, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
var notFound = "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n";
|
||||||
|
var bytes = Encoding.ASCII.GetBytes(notFound);
|
||||||
|
await stream.WriteAsync(bytes, ct);
|
||||||
|
await stream.FlushAsync(ct);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string? wsKey = null;
|
||||||
|
foreach (var line in header.Split("\r\n"))
|
||||||
|
{
|
||||||
|
var idx = line.IndexOf(':');
|
||||||
|
if (idx <= 0) continue;
|
||||||
|
var name = line[..idx].Trim();
|
||||||
|
var value = line[(idx + 1)..].Trim();
|
||||||
|
if (name.Equals("Sec-WebSocket-Key", StringComparison.OrdinalIgnoreCase))
|
||||||
|
wsKey = value;
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(wsKey))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var accept = ComputeWebSocketAccept(wsKey);
|
||||||
|
var resp =
|
||||||
|
"HTTP/1.1 101 Switching Protocols\r\n" +
|
||||||
|
"Upgrade: websocket\r\n" +
|
||||||
|
"Connection: Upgrade\r\n" +
|
||||||
|
$"Sec-WebSocket-Accept: {accept}\r\n" +
|
||||||
|
"\r\n";
|
||||||
|
var respBytes = Encoding.ASCII.GetBytes(resp);
|
||||||
|
await stream.WriteAsync(respBytes, ct);
|
||||||
|
await stream.FlushAsync(ct);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ComputeWebSocketAccept(string key)
|
||||||
|
{
|
||||||
|
const string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
||||||
|
var bytes = Encoding.ASCII.GetBytes(key + guid);
|
||||||
|
var hash = SHA1.HashData(bytes);
|
||||||
|
return Convert.ToBase64String(hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ReceiveLoop(ClientState state, CancellationToken serverCt)
|
||||||
|
{
|
||||||
|
var s = state.Stream;
|
||||||
|
var buf2 = new byte[2];
|
||||||
|
|
||||||
|
while (!serverCt.IsCancellationRequested && !state.Cts.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
int r = await ReadExactAsync(s, buf2, 0, 2, serverCt);
|
||||||
|
if (r == 0) break;
|
||||||
|
|
||||||
|
byte b0 = buf2[0]; // FIN + opcode
|
||||||
|
byte b1 = buf2[1]; // MASK + payload len
|
||||||
|
|
||||||
|
byte opcode = (byte)(b0 & 0x0F);
|
||||||
|
bool masked = (b1 & 0x80) != 0;
|
||||||
|
ulong len = (ulong)(b1 & 0x7F);
|
||||||
|
|
||||||
|
if (len == 126)
|
||||||
|
{
|
||||||
|
r = await ReadExactAsync(s, buf2, 0, 2, serverCt);
|
||||||
|
if (r == 0) break;
|
||||||
|
len = (ulong)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buf2, 0));
|
||||||
|
}
|
||||||
|
else if (len == 127)
|
||||||
|
{
|
||||||
|
var b8 = new byte[8];
|
||||||
|
r = await ReadExactAsync(s, b8, 0, 8, serverCt);
|
||||||
|
if (r == 0) break;
|
||||||
|
if (BitConverter.IsLittleEndian) Array.Reverse(b8);
|
||||||
|
len = BitConverter.ToUInt64(b8, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] mask = Array.Empty<byte>();
|
||||||
|
if (masked)
|
||||||
|
{
|
||||||
|
mask = new byte[4];
|
||||||
|
r = await ReadExactAsync(s, mask, 0, 4, serverCt);
|
||||||
|
if (r == 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] payload = Array.Empty<byte>();
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
payload = new byte[len];
|
||||||
|
r = await ReadExactAsync(s, payload, 0, (int)len, serverCt);
|
||||||
|
if (r == 0) break;
|
||||||
|
|
||||||
|
if (masked)
|
||||||
|
for (int i = 0; i < payload.Length; i++)
|
||||||
|
payload[i] = (byte)(payload[i] ^ mask[i % 4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opcode == 0x8) // Close
|
||||||
|
{
|
||||||
|
await SendCloseFrame(state);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (opcode == 0x9) // Ping -> Pong
|
||||||
|
{
|
||||||
|
await SendPongFrame(state, payload);
|
||||||
|
}
|
||||||
|
// Textframes (0x1) werden ignoriert
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<int> ReadExactAsync(Stream s, byte[] buf, int off, int len, CancellationToken ct)
|
||||||
|
{
|
||||||
|
int got = 0;
|
||||||
|
while (got < len)
|
||||||
|
{
|
||||||
|
int n = await s.ReadAsync(buf.AsMemory(off + got, len - got), ct);
|
||||||
|
if (n <= 0) return got;
|
||||||
|
got += n;
|
||||||
|
}
|
||||||
|
return got;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendTextFrame(ClientState c, string text)
|
||||||
|
{
|
||||||
|
var payload = Encoding.UTF8.GetBytes(text);
|
||||||
|
using var ms = new MemoryStream(capacity: 2 + payload.Length + 10);
|
||||||
|
ms.WriteByte(0x81); // FIN + Text
|
||||||
|
|
||||||
|
if (payload.Length <= 125)
|
||||||
|
{
|
||||||
|
ms.WriteByte((byte)payload.Length);
|
||||||
|
}
|
||||||
|
else if (payload.Length <= ushort.MaxValue)
|
||||||
|
{
|
||||||
|
ms.WriteByte(126);
|
||||||
|
var lenBytes = BitConverter.GetBytes((ushort)payload.Length);
|
||||||
|
if (BitConverter.IsLittleEndian) Array.Reverse(lenBytes);
|
||||||
|
ms.Write(lenBytes, 0, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ms.WriteByte(127);
|
||||||
|
var lenBytes = BitConverter.GetBytes((ulong)payload.Length);
|
||||||
|
if (BitConverter.IsLittleEndian) Array.Reverse(lenBytes);
|
||||||
|
ms.Write(lenBytes, 0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
ms.Write(payload, 0, payload.Length);
|
||||||
|
|
||||||
|
lock (c.SendLock)
|
||||||
|
{
|
||||||
|
var buf = ms.GetBuffer();
|
||||||
|
c.Stream.Write(buf, 0, (int)ms.Length);
|
||||||
|
c.Stream.Flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Task SendPongFrame(ClientState c, byte[] pingPayload)
|
||||||
|
{
|
||||||
|
var header = new MemoryStream(2 + pingPayload.Length);
|
||||||
|
header.WriteByte(0x8A); // FIN + Pong
|
||||||
|
if (pingPayload.Length <= 125)
|
||||||
|
{
|
||||||
|
header.WriteByte((byte)pingPayload.Length);
|
||||||
|
}
|
||||||
|
else if (pingPayload.Length <= ushort.MaxValue)
|
||||||
|
{
|
||||||
|
header.WriteByte(126);
|
||||||
|
var lenBytes = BitConverter.GetBytes((ushort)pingPayload.Length);
|
||||||
|
if (BitConverter.IsLittleEndian) Array.Reverse(lenBytes);
|
||||||
|
header.Write(lenBytes, 0, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
header.WriteByte(127);
|
||||||
|
var lenBytes = BitConverter.GetBytes((ulong)pingPayload.Length);
|
||||||
|
if (BitConverter.IsLittleEndian) Array.Reverse(lenBytes);
|
||||||
|
header.Write(lenBytes, 0, 8);
|
||||||
|
}
|
||||||
|
var buf = header.ToArray();
|
||||||
|
lock (c.SendLock)
|
||||||
|
{
|
||||||
|
c.Stream.Write(buf, 0, buf.Length);
|
||||||
|
if (pingPayload.Length > 0) c.Stream.Write(pingPayload, 0, pingPayload.Length);
|
||||||
|
c.Stream.Flush();
|
||||||
|
}
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Task SendCloseFrame(ClientState c)
|
||||||
|
{
|
||||||
|
var frame = new byte[] { 0x88, 0x00 }; // Close, no payload
|
||||||
|
lock (c.SendLock)
|
||||||
|
{
|
||||||
|
c.Stream.Write(frame, 0, frame.Length);
|
||||||
|
c.Stream.Flush();
|
||||||
|
}
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.336" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,888 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v8.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v8.0": {
|
||||||
|
"CS2WebSocketTelemetryPlugin/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"CounterStrikeSharp.API": "1.0.336"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CS2WebSocketTelemetryPlugin.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"CounterStrikeSharp.API/1.0.336": {
|
||||||
|
"dependencies": {
|
||||||
|
"McMaster.NETCore.Plugins": "1.4.0",
|
||||||
|
"Microsoft.CSharp": "4.7.0",
|
||||||
|
"Microsoft.DotNet.ApiCompat.Task": "8.0.203",
|
||||||
|
"Microsoft.Extensions.Hosting": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Localization.Abstractions": "8.0.3",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Scrutor": "4.2.2",
|
||||||
|
"Serilog.Extensions.Logging": "8.0.0",
|
||||||
|
"Serilog.Sinks.Console": "5.0.0",
|
||||||
|
"Serilog.Sinks.File": "5.0.0",
|
||||||
|
"System.Data.DataSetExtensions": "4.5.0",
|
||||||
|
"Tomlyn": "0.19.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/CounterStrikeSharp.API.dll": {
|
||||||
|
"assemblyVersion": "1.0.336.0",
|
||||||
|
"fileVersion": "1.0.336.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"McMaster.NETCore.Plugins/1.4.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.DotNet.PlatformAbstractions": "3.1.6",
|
||||||
|
"Microsoft.Extensions.DependencyModel": "6.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/McMaster.NETCore.Plugins.dll": {
|
||||||
|
"assemblyVersion": "1.4.0.0",
|
||||||
|
"fileVersion": "1.4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.CSharp/4.7.0": {},
|
||||||
|
"Microsoft.DotNet.ApiCompat.Task/8.0.203": {},
|
||||||
|
"Microsoft.DotNet.PlatformAbstractions/3.1.6": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.DotNet.PlatformAbstractions.dll": {
|
||||||
|
"assemblyVersion": "3.1.6.0",
|
||||||
|
"fileVersion": "3.100.620.31604"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Binder/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.Binder.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Json/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"System.Text.Json": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.UserSecrets/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Json": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyModel/6.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Buffers": "4.5.1",
|
||||||
|
"System.Memory": "4.5.4",
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||||
|
"System.Text.Encodings.Web": "8.0.0",
|
||||||
|
"System.Text.Json": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll": {
|
||||||
|
"assemblyVersion": "6.0.0.0",
|
||||||
|
"fileVersion": "6.0.21.52210"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Diagnostics/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Diagnostics.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"System.Diagnostics.DiagnosticSource": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing/8.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Hosting/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Json": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.UserSecrets": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Diagnostics": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Console": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Debug": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.EventLog": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.EventSource": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Hosting.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Hosting.Abstractions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Localization.Abstractions/8.0.3": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Localization.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.324.11615"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Configuration/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.Configuration.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Console/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Configuration": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"System.Text.Json": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.Console.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Debug/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.Debug.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.EventLog/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"System.Diagnostics.EventLog": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.EventLog.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.EventSource/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0",
|
||||||
|
"System.Text.Json": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Options/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Options.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Binder": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Options": "8.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Microsoft.Extensions.Primitives.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Scrutor/4.2.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
|
||||||
|
"Microsoft.Extensions.DependencyModel": "6.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Scrutor.dll": {
|
||||||
|
"assemblyVersion": "4.0.0.0",
|
||||||
|
"fileVersion": "4.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Serilog/3.1.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net7.0/Serilog.dll": {
|
||||||
|
"assemblyVersion": "2.0.0.0",
|
||||||
|
"fileVersion": "3.1.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Serilog.Extensions.Logging/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Logging": "8.0.0",
|
||||||
|
"Serilog": "3.1.1"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Serilog.Extensions.Logging.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "8.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Serilog.Sinks.Console/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Serilog": "3.1.1"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net7.0/Serilog.Sinks.Console.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Serilog.Sinks.File/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Serilog": "3.1.1"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Serilog.Sinks.File.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {},
|
||||||
|
"System.Data.DataSetExtensions/4.5.0": {},
|
||||||
|
"System.Diagnostics.DiagnosticSource/8.0.0": {},
|
||||||
|
"System.Diagnostics.EventLog/8.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/System.Diagnostics.EventLog.dll": {
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net8.0/System.Diagnostics.EventLog.Messages.dll": {
|
||||||
|
"rid": "win",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "0.0.0.0"
|
||||||
|
},
|
||||||
|
"runtimes/win/lib/net8.0/System.Diagnostics.EventLog.dll": {
|
||||||
|
"rid": "win",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "8.0.0.0",
|
||||||
|
"fileVersion": "8.0.23.53103"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.4": {},
|
||||||
|
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
|
||||||
|
"System.Text.Encodings.Web/8.0.0": {},
|
||||||
|
"System.Text.Json/8.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Text.Encodings.Web": "8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Tomlyn/0.19.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net8.0/Tomlyn.dll": {
|
||||||
|
"assemblyVersion": "0.19.0.0",
|
||||||
|
"fileVersion": "0.19.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CS2WebSocketTelemetryPlugin/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"CounterStrikeSharp.API/1.0.336": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-2XNnJlbU5tNgj4bJ3/Z1cX9qao1RThHqiNJEa0PZCK6J7KPkRTLGS7DpejteTjlpKdQdAiNd9a90feYhP6KSVA==",
|
||||||
|
"path": "counterstrikesharp.api/1.0.336",
|
||||||
|
"hashPath": "counterstrikesharp.api.1.0.336.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"McMaster.NETCore.Plugins/1.4.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-UKw5Z2/QHhkR7kiAJmqdCwVDMQV0lwsfj10+FG676r8DsJWIpxtachtEjE0qBs9WoK5GUQIqxgyFeYUSwuPszg==",
|
||||||
|
"path": "mcmaster.netcore.plugins/1.4.0",
|
||||||
|
"hashPath": "mcmaster.netcore.plugins.1.4.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.CSharp/4.7.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
|
||||||
|
"path": "microsoft.csharp/4.7.0",
|
||||||
|
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.DotNet.ApiCompat.Task/8.0.203": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-nPEGMojf1mj1oVixe0aiBimSn6xUoZswSjpMPZFMkZ+znYm2GEM5tWGZEWb6OSNIo5gWKyDi1WcI4IL7YiL1Zw==",
|
||||||
|
"path": "microsoft.dotnet.apicompat.task/8.0.203",
|
||||||
|
"hashPath": "microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.DotNet.PlatformAbstractions/3.1.6": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg==",
|
||||||
|
"path": "microsoft.dotnet.platformabstractions/3.1.6",
|
||||||
|
"hashPath": "microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
|
||||||
|
"path": "microsoft.extensions.configuration/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
|
||||||
|
"path": "microsoft.extensions.configuration.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Binder/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==",
|
||||||
|
"path": "microsoft.extensions.configuration.binder/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==",
|
||||||
|
"path": "microsoft.extensions.configuration.commandline/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==",
|
||||||
|
"path": "microsoft.extensions.configuration.environmentvariables/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==",
|
||||||
|
"path": "microsoft.extensions.configuration.fileextensions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Json/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==",
|
||||||
|
"path": "microsoft.extensions.configuration.json/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.json.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.UserSecrets/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ihDHu2dJYQird9pl2CbdwuNDfvCZdOS0S7SPlNfhPt0B81UTT+yyZKz2pimFZGUp3AfuBRnqUCxB2SjsZKHVUw==",
|
||||||
|
"path": "microsoft.extensions.configuration.usersecrets/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyModel/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==",
|
||||||
|
"path": "microsoft.extensions.dependencymodel/6.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Diagnostics/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==",
|
||||||
|
"path": "microsoft.extensions.diagnostics/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.diagnostics.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==",
|
||||||
|
"path": "microsoft.extensions.diagnostics.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==",
|
||||||
|
"path": "microsoft.extensions.fileproviders.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==",
|
||||||
|
"path": "microsoft.extensions.fileproviders.physical/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==",
|
||||||
|
"path": "microsoft.extensions.filesystemglobbing/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Hosting/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ItYHpdqVp5/oFLT5QqbopnkKlyFG9EW/9nhM6/yfObeKt6Su0wkBio6AizgRHGNwhJuAtlE5VIjow5JOTrip6w==",
|
||||||
|
"path": "microsoft.extensions.hosting/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.hosting.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Hosting.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==",
|
||||||
|
"path": "microsoft.extensions.hosting.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Localization.Abstractions/8.0.3": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-k/kUPm1FQBxcs9/vsM1eF4qIOg2Sovqh/+KUGHur5Mc0Y3OFGuoz9ktBX7LA0gPz53SZhW3W3oaSaMFFcjgM6Q==",
|
||||||
|
"path": "microsoft.extensions.localization.abstractions/8.0.3",
|
||||||
|
"hashPath": "microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
|
||||||
|
"path": "microsoft.extensions.logging/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Abstractions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
|
||||||
|
"path": "microsoft.extensions.logging.abstractions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Configuration/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ixXXV0G/12g6MXK65TLngYN9V5hQQRuV+fZi882WIoVJT7h5JvoYoxTEwCgdqwLjSneqh1O+66gM8sMr9z/rsQ==",
|
||||||
|
"path": "microsoft.extensions.logging.configuration/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Console/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-e+48o7DztoYog+PY430lPxrM4mm3PbA6qucvQtUDDwVo4MO+ejMw7YGc/o2rnxbxj4isPxdfKFzTxvXMwAz83A==",
|
||||||
|
"path": "microsoft.extensions.logging.console/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.console.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.Debug/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dt0x21qBdudHLW/bjMJpkixv858RRr8eSomgVbU8qljOyfrfDGi1JQvpF9w8S7ziRPtRKisuWaOwFxJM82GxeA==",
|
||||||
|
"path": "microsoft.extensions.logging.debug/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.debug.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.EventLog/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-3X9D3sl7EmOu7vQp5MJrmIJBl5XSdOhZPYXUeFfYa6Nnm9+tok8x3t3IVPLhm7UJtPOU61ohFchw8rNm9tIYOQ==",
|
||||||
|
"path": "microsoft.extensions.logging.eventlog/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Logging.EventSource/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-oKcPMrw+luz2DUAKhwFXrmFikZWnyc8l2RKoQwqU3KIZZjcfoJE0zRHAnqATfhRZhtcbjl/QkiY2Xjxp0xu+6w==",
|
||||||
|
"path": "microsoft.extensions.logging.eventsource/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Options/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
|
||||||
|
"path": "microsoft.extensions.options/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.options.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Options.ConfigurationExtensions/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
|
||||||
|
"path": "microsoft.extensions.options.configurationextensions/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Primitives/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
|
||||||
|
"path": "microsoft.extensions.primitives/8.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Scrutor/4.2.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-t5VIYA7WJXoJJo7s4DoHakMGwTu+MeEnZumMOhTCH7kz9xWha24G7dJNxWrHPlu0ZdZAS4jDZCxxAnyaBh7uYw==",
|
||||||
|
"path": "scrutor/4.2.2",
|
||||||
|
"hashPath": "scrutor.4.2.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Serilog/3.1.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A==",
|
||||||
|
"path": "serilog/3.1.1",
|
||||||
|
"hashPath": "serilog.3.1.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Serilog.Extensions.Logging/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==",
|
||||||
|
"path": "serilog.extensions.logging/8.0.0",
|
||||||
|
"hashPath": "serilog.extensions.logging.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Serilog.Sinks.Console/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==",
|
||||||
|
"path": "serilog.sinks.console/5.0.0",
|
||||||
|
"hashPath": "serilog.sinks.console.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Serilog.Sinks.File/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
|
||||||
|
"path": "serilog.sinks.file/5.0.0",
|
||||||
|
"hashPath": "serilog.sinks.file.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
|
||||||
|
"path": "system.buffers/4.5.1",
|
||||||
|
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Data.DataSetExtensions/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-221clPs1445HkTBZPL+K9sDBdJRB8UN8rgjO3ztB0CQ26z//fmJXtlsr6whGatscsKGBrhJl5bwJuKSA8mwFOw==",
|
||||||
|
"path": "system.data.datasetextensions/4.5.0",
|
||||||
|
"hashPath": "system.data.datasetextensions.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Diagnostics.DiagnosticSource/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==",
|
||||||
|
"path": "system.diagnostics.diagnosticsource/8.0.0",
|
||||||
|
"hashPath": "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Diagnostics.EventLog/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A==",
|
||||||
|
"path": "system.diagnostics.eventlog/8.0.0",
|
||||||
|
"hashPath": "system.diagnostics.eventlog.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.4": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
|
||||||
|
"path": "system.memory/4.5.4",
|
||||||
|
"hashPath": "system.memory.4.5.4.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||||
|
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||||
|
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Text.Encodings.Web/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
|
||||||
|
"path": "system.text.encodings.web/8.0.0",
|
||||||
|
"hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Text.Json/8.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
|
||||||
|
"path": "system.text.json/8.0.0",
|
||||||
|
"hashPath": "system.text.json.8.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Tomlyn/0.19.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-GlI2o8R8jbZIaE+YX6uA/VoAOH7zIxYeqxDm7jHW2hqUhuB+q19oKold35FkMuv8IZDoCqsTMolaBv2eBLBmrQ==",
|
||||||
|
"path": "tomlyn/0.19.0",
|
||||||
|
"hashPath": "tomlyn.0.19.0.nupkg.sha512"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"format": 1,
|
||||||
|
"restore": {
|
||||||
|
"C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\CS2WebSocketTelemetryPlugin.csproj": {}
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\CS2WebSocketTelemetryPlugin.csproj": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\CS2WebSocketTelemetryPlugin.csproj",
|
||||||
|
"projectName": "CS2WebSocketTelemetryPlugin",
|
||||||
|
"projectPath": "C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\CS2WebSocketTelemetryPlugin.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\Chris\\.nuget\\packages\\",
|
||||||
|
"outputPath": "C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\obj\\",
|
||||||
|
"projectStyle": "PackageReference",
|
||||||
|
"fallbackFolders": [
|
||||||
|
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||||
|
],
|
||||||
|
"configFilePaths": [
|
||||||
|
"C:\\Users\\Chris\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config"
|
||||||
|
],
|
||||||
|
"originalTargetFrameworks": [
|
||||||
|
"net8.0"
|
||||||
|
],
|
||||||
|
"sources": {
|
||||||
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"projectReferences": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"warningProperties": {
|
||||||
|
"warnAsError": [
|
||||||
|
"NU1605"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"restoreAuditProperties": {
|
||||||
|
"enableAudit": "true",
|
||||||
|
"auditLevel": "low",
|
||||||
|
"auditMode": "direct"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"net8.0": {
|
||||||
|
"targetAlias": "net8.0",
|
||||||
|
"dependencies": {
|
||||||
|
"CounterStrikeSharp.API": {
|
||||||
|
"target": "Package",
|
||||||
|
"version": "[1.0.336, )"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [
|
||||||
|
"net461",
|
||||||
|
"net462",
|
||||||
|
"net47",
|
||||||
|
"net471",
|
||||||
|
"net472",
|
||||||
|
"net48",
|
||||||
|
"net481"
|
||||||
|
],
|
||||||
|
"assetTargetFallback": true,
|
||||||
|
"warn": true,
|
||||||
|
"frameworkReferences": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"privateAssets": "all"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.408/PortableRuntimeIdentifierGraph.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||||
|
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||||
|
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||||
|
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||||
|
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Chris\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||||
|
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||||
|
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.11.1</NuGetToolVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<SourceRoot Include="C:\Users\Chris\.nuget\packages\" />
|
||||||
|
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Configuration.UserSecrets.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Configuration.UserSecrets.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<PkgMicrosoft_DotNet_ApiCompat_Task Condition=" '$(PkgMicrosoft_DotNet_ApiCompat_Task)' == '' ">C:\Users\Chris\.nuget\packages\microsoft.dotnet.apicompat.task\8.0.203</PkgMicrosoft_DotNet_ApiCompat_Task>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<Import Project="$(NuGetPackageRoot)system.text.json\8.0.0\buildTransitive\net6.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\8.0.0\buildTransitive\net6.0\System.Text.Json.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Options.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\8.0.0\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\8.0.0\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||||
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Configuration.UserSecrets.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.usersecrets\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Configuration.UserSecrets.targets')" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
[assembly: System.Reflection.AssemblyCompanyAttribute("CS2WebSocketTelemetryPlugin")]
|
||||||
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||||
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fa67bbe2510858d3f01635b77bb3c7acd18ef6f5")]
|
||||||
|
[assembly: System.Reflection.AssemblyProductAttribute("CS2WebSocketTelemetryPlugin")]
|
||||||
|
[assembly: System.Reflection.AssemblyTitleAttribute("CS2WebSocketTelemetryPlugin")]
|
||||||
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
|
// Von der MSBuild WriteCodeFragment-Klasse generiert.
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
bdfa47b108634ff46d1f32e49c20b58b7e1d00583d7f07453185fc1ed705dbd6
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
is_global = true
|
||||||
|
build_property.TargetFramework = net8.0
|
||||||
|
build_property.TargetPlatformMinVersion =
|
||||||
|
build_property.UsingMicrosoftNETSdkWeb =
|
||||||
|
build_property.ProjectTypeGuids =
|
||||||
|
build_property.InvariantGlobalization =
|
||||||
|
build_property.PlatformNeutralAssembly =
|
||||||
|
build_property.EnforceExtendedAnalyzerRules =
|
||||||
|
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||||
|
build_property.RootNamespace = CS2WebSocketTelemetryPlugin
|
||||||
|
build_property.ProjectDir = C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\
|
||||||
|
build_property.EnableComHosting =
|
||||||
|
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
// <auto-generated/>
|
||||||
|
global using global::System;
|
||||||
|
global using global::System.Collections.Generic;
|
||||||
|
global using global::System.IO;
|
||||||
|
global using global::System.Linq;
|
||||||
|
global using global::System.Net.Http;
|
||||||
|
global using global::System.Threading;
|
||||||
|
global using global::System.Threading.Tasks;
|
||||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
29a097f847e9cc9046a216cfa5e6dfc719414ee5e42dc15f3ee740e9754a5ad0
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.GeneratedMSBuildEditorConfig.editorconfig
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.AssemblyInfoInputs.cache
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.AssemblyInfo.cs
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\bin\Release\net8.0\CS2WebSocketTelemetryPlugin.deps.json
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\bin\Release\net8.0\CS2WebSocketTelemetryPlugin.dll
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\bin\Release\net8.0\CS2WebSocketTelemetryPlugin.pdb
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.csproj.AssemblyReference.cache
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.dll
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\refint\CS2WebSocketTelemetryPlugin.dll
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\CS2WebSocketTelemetryPlugin.pdb
|
||||||
|
C:\Users\Chris\fork\ironie-cs2-websocket-plugin\CS2WebSocketTelemetryPlugin\obj\Release\net8.0\ref\CS2WebSocketTelemetryPlugin.dll
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2629
CS2WebSocketTelemetryPlugin/obj/project.assets.json
Normal file
2629
CS2WebSocketTelemetryPlugin/obj/project.assets.json
Normal file
File diff suppressed because it is too large
Load Diff
57
CS2WebSocketTelemetryPlugin/obj/project.nuget.cache
Normal file
57
CS2WebSocketTelemetryPlugin/obj/project.nuget.cache
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"dgSpecHash": "ZqU4AlfU0L4=",
|
||||||
|
"success": true,
|
||||||
|
"projectFilePath": "C:\\Users\\Chris\\fork\\ironie-cs2-websocket-plugin\\CS2WebSocketTelemetryPlugin\\CS2WebSocketTelemetryPlugin.csproj",
|
||||||
|
"expectedPackageFiles": [
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\counterstrikesharp.api\\1.0.336\\counterstrikesharp.api.1.0.336.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\mcmaster.netcore.plugins\\1.4.0\\mcmaster.netcore.plugins.1.4.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.dotnet.apicompat.task\\8.0.203\\microsoft.dotnet.apicompat.task.8.0.203.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.dotnet.platformabstractions\\3.1.6\\microsoft.dotnet.platformabstractions.3.1.6.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration\\8.0.0\\microsoft.extensions.configuration.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\8.0.0\\microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.binder\\8.0.0\\microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.commandline\\8.0.0\\microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.environmentvariables\\8.0.0\\microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\8.0.0\\microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.json\\8.0.0\\microsoft.extensions.configuration.json.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\8.0.0\\microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.0\\microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.0\\microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.dependencymodel\\6.0.0\\microsoft.extensions.dependencymodel.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.diagnostics\\8.0.0\\microsoft.extensions.diagnostics.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\8.0.0\\microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\8.0.0\\microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\8.0.0\\microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\8.0.0\\microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.hosting\\8.0.0\\microsoft.extensions.hosting.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\8.0.0\\microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.localization.abstractions\\8.0.3\\microsoft.extensions.localization.abstractions.8.0.3.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging\\8.0.0\\microsoft.extensions.logging.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.0\\microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.configuration\\8.0.0\\microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.console\\8.0.0\\microsoft.extensions.logging.console.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.debug\\8.0.0\\microsoft.extensions.logging.debug.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.eventlog\\8.0.0\\microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.logging.eventsource\\8.0.0\\microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.options\\8.0.0\\microsoft.extensions.options.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.options.configurationextensions\\8.0.0\\microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\microsoft.extensions.primitives\\8.0.0\\microsoft.extensions.primitives.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\scrutor\\4.2.2\\scrutor.4.2.2.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\serilog\\3.1.1\\serilog.3.1.1.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\serilog.extensions.logging\\8.0.0\\serilog.extensions.logging.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\serilog.sinks.console\\5.0.0\\serilog.sinks.console.5.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\serilog.sinks.file\\5.0.0\\serilog.sinks.file.5.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.data.datasetextensions\\4.5.0\\system.data.datasetextensions.4.5.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.0\\system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.0\\system.diagnostics.eventlog.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\system.text.json\\8.0.0\\system.text.json.8.0.0.nupkg.sha512",
|
||||||
|
"C:\\Users\\Chris\\.nuget\\packages\\tomlyn\\0.19.0\\tomlyn.0.19.0.nupkg.sha512"
|
||||||
|
],
|
||||||
|
"logs": []
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user