This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.6" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.7" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.7" />
|
||||||
<PackageReference Include="Telegram.Bot" Version="19.0.0" />
|
<PackageReference Include="Telegram.Bot" Version="19.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
|
||||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
|
||||||
<PackageReference Include="Selenium.WebDriver" Version="4.21.0" />
|
<PackageReference Include="Selenium.WebDriver" Version="4.21.0" />
|
||||||
<PackageReference Include="Telegram.Bot" Version="19.0.0" />
|
<PackageReference Include="Telegram.Bot" Version="19.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class DeviceController : ControllerBase
|
|||||||
[HttpGet("GetDeviceById")]
|
[HttpGet("GetDeviceById")]
|
||||||
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
|
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public IActionResult GetById(int id) // Получить устройство по id
|
public IActionResult GetById(Guid id) // Получить устройство по id
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
@@ -69,7 +69,7 @@ public class DeviceController : ControllerBase
|
|||||||
#region DELETE
|
#region DELETE
|
||||||
|
|
||||||
[HttpDelete("DelDevice")]
|
[HttpDelete("DelDevice")]
|
||||||
public IActionResult DelDevice(int id) //Удалить устройство по id
|
public IActionResult DelDevice(Guid id) //Удалить устройство по id
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class ObjectController : ControllerBase
|
|||||||
[HttpGet("GetObjectById")]
|
[HttpGet("GetObjectById")]
|
||||||
[ProducesResponseType<ObjectItem>(StatusCodes.Status200OK)]
|
[ProducesResponseType<ObjectItem>(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public IActionResult GetById(int id)
|
public IActionResult GetById(Guid id)
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
@@ -69,7 +69,7 @@ public class ObjectController : ControllerBase
|
|||||||
|
|
||||||
//========================= DELETE ====================================//
|
//========================= DELETE ====================================//
|
||||||
[HttpDelete("DelObject")]
|
[HttpDelete("DelObject")]
|
||||||
public IActionResult DelObject(int id)
|
public IActionResult DelObject(Guid id)
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class TypeController : ControllerBase
|
|||||||
[HttpGet("GetTypeById")]
|
[HttpGet("GetTypeById")]
|
||||||
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
|
[ProducesResponseType<DeviceItem>(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
public IActionResult GetById(int id) // Получить устройство по id
|
public IActionResult GetById(Guid id) // Получить устройство по id
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ public class TypeController : ControllerBase
|
|||||||
//========================= DELETE ====================================//
|
//========================= DELETE ====================================//
|
||||||
#region DELETE
|
#region DELETE
|
||||||
[HttpDelete("DelType")]
|
[HttpDelete("DelType")]
|
||||||
public IActionResult DelType(int id) //Удалить тип устройства по id
|
public IActionResult DelType(Guid id) //Удалить тип устройства по id
|
||||||
{
|
{
|
||||||
using (var db = new SQLiteService())
|
using (var db = new SQLiteService())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
public string? Description { get; set; }
|
public string? Description { get; set; }
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
public string? Location { get; set; }
|
public string? Location { get; set; }
|
||||||
public List<DeviceItem>? ListDevices { get; set; }
|
public List<Guid>? ListDevices { get; set; }
|
||||||
public DeviceType? DeviceType { get; set; }
|
public Guid? DeviceType { get; set; }
|
||||||
public ObjectItem? DeviceObject { get; set; }
|
public Guid? DeviceObject { get; set; }
|
||||||
public Guid ConnectedToSwitchId { get; set; }
|
public Guid? ConnectedToSwitchId { get; set; }
|
||||||
public int ConnectedToPortOnSwitch { get; set; }
|
public int ConnectedToPortOnSwitch { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ namespace Strela.Services
|
|||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
//optionsBuilder.UseNpgsql("Host=172.24.12.201;Port=5432;Database=Notifications;Username=postgres;Password=4NUDZhJ7");
|
optionsBuilder.UseNpgsql("Host=172.22.10.39;Port=5432;Database=strela;Username=postgres;Password=4NUDZhJ7");
|
||||||
optionsBuilder.UseSqlite("Data Source=Services/DataBase.db");
|
//optionsBuilder.UseSqlite("Data Source=Services/DataBase.db");
|
||||||
}
|
}
|
||||||
|
|
||||||
//protected override void OnModelCreating(ModelBuilder modelBuilder)
|
//protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
|
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
|
||||||
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
public string? Description { get; set; }
|
public string? Description { get; set; }
|
||||||
public string? Name { get; set; }
|
public string? Name { get; set; }
|
||||||
public string? Location { get; set; }
|
public string? Location { get; set; }
|
||||||
public List<DeviceItems>? ListDevices { get; set; }
|
public List<Guid>? ListDevices { get; set; }
|
||||||
public DeviceTypeItems? DeviceType { get; set; }
|
public Guid? DeviceType { get; set; }
|
||||||
public ObjectItems? DeviceObject { get; set; }
|
public Guid? DeviceObject { get; set; }
|
||||||
public Guid ConnectedToSwitchId { get; set; }
|
public Guid? ConnectedToSwitchId { get; set; }
|
||||||
public int ConnectedToPortOnSwitch { get; set; }
|
public int ConnectedToPortOnSwitch { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,9 @@
|
|||||||
<Button Color="Color.Primary" Clicked="@AddNewObject">
|
<Button Color="Color.Primary" Clicked="@AddNewObject">
|
||||||
<Icon Name="IconName.Add" />
|
<Icon Name="IconName.Add" />
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button Color="Color.Primary" Clicked="@GetCurrentObject">
|
||||||
|
<Icon Name="IconName.Redo" />
|
||||||
|
</Button>
|
||||||
</Field>
|
</Field>
|
||||||
</CardText>
|
</CardText>
|
||||||
</CardBody>
|
</CardBody>
|
||||||
@@ -142,7 +145,7 @@
|
|||||||
<AddonLabel Width="Width.Is25">IP</AddonLabel>
|
<AddonLabel Width="Width.Is25">IP</AddonLabel>
|
||||||
</Addon>
|
</Addon>
|
||||||
<Addon AddonType="AddonType.Body">
|
<Addon AddonType="AddonType.Body">
|
||||||
<InputMask @bind-Value="dev_ip" Width="Width.Is50" Mask="999.999.999.999" MaskPlaceholder="X" Placeholder="Введите IP" />
|
<InputMask @bind-Value="dev_ip" Width="Width.Is50" Placeholder="Введите IP" />
|
||||||
</Addon>
|
</Addon>
|
||||||
</Addons>
|
</Addons>
|
||||||
<Addons Size="Size.Small">
|
<Addons Size="Size.Small">
|
||||||
@@ -150,7 +153,7 @@
|
|||||||
<AddonLabel Width="Width.Is25">MAC</AddonLabel>
|
<AddonLabel Width="Width.Is25">MAC</AddonLabel>
|
||||||
</Addon>
|
</Addon>
|
||||||
<Addon AddonType="AddonType.Body">
|
<Addon AddonType="AddonType.Body">
|
||||||
<InputMask @bind-Value="dev_mac" Width="Width.Is50" Mask="****-****-****" MaskPlaceholder="X" Placeholder="Введите MAC" />
|
<InputMask @bind-Value="dev_mac" Width="Width.Is50" Placeholder="Введите MAC" />
|
||||||
</Addon>
|
</Addon>
|
||||||
</Addons>
|
</Addons>
|
||||||
<Addons Size="Size.Small">
|
<Addons Size="Size.Small">
|
||||||
@@ -211,18 +214,18 @@
|
|||||||
</Addon>
|
</Addon>
|
||||||
<Addon AddonType="AddonType.Body">
|
<Addon AddonType="AddonType.Body">
|
||||||
<Select Width="Width.Is50" TValue="Guid" @bind-Value="@id_dev">
|
<Select Width="Width.Is50" TValue="Guid" @bind-Value="@id_dev">
|
||||||
<SelectItem Value="999">коммутатор</SelectItem>
|
<SelectItem Value="999">Коммутатор</SelectItem>
|
||||||
@foreach (var sel in _list_switch)
|
@foreach (var sel in _list_switch)
|
||||||
{
|
{
|
||||||
<SelectItem Value="@sel.Id">@sel.Name</SelectItem>
|
<SelectItem Value="@sel.Id">@sel.Name</SelectItem>
|
||||||
}
|
}
|
||||||
</Select>
|
</Select>
|
||||||
</Addon>
|
</Addon>
|
||||||
<Addon AddonType="AddonType.End">
|
@* <Addon AddonType="AddonType.End">
|
||||||
<Button Clicked="@RefreshListSwitch">
|
<Button Clicked="@RefreshListSwitch">
|
||||||
<Icon Name="IconName.Undo" />
|
<Icon Name="IconName.Undo" />
|
||||||
</Button>
|
</Button>
|
||||||
</Addon>
|
</Addon> *@
|
||||||
</Addons>
|
</Addons>
|
||||||
<Addons Size="Size.Small">
|
<Addons Size="Size.Small">
|
||||||
<Addon AddonType="AddonType.Start">
|
<Addon AddonType="AddonType.Start">
|
||||||
@@ -246,7 +249,6 @@
|
|||||||
<TableRow>
|
<TableRow>
|
||||||
<TableHeaderCell>Имя</TableHeaderCell>
|
<TableHeaderCell>Имя</TableHeaderCell>
|
||||||
<TableHeaderCell>Адрес</TableHeaderCell>
|
<TableHeaderCell>Адрес</TableHeaderCell>
|
||||||
<TableHeaderCell>Тип</TableHeaderCell>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
@@ -255,7 +257,6 @@
|
|||||||
<TableRow>
|
<TableRow>
|
||||||
<TableRowCell>@item.Name</TableRowCell>
|
<TableRowCell>@item.Name</TableRowCell>
|
||||||
<TableRowCell>@item.Ip</TableRowCell>
|
<TableRowCell>@item.Ip</TableRowCell>
|
||||||
<TableRowCell>@item.DeviceType.Name</TableRowCell>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
}
|
}
|
||||||
</TableBody>
|
</TableBody>
|
||||||
@@ -272,7 +273,7 @@
|
|||||||
<Card>
|
<Card>
|
||||||
<CardBody>
|
<CardBody>
|
||||||
<CardTitle TextAlignment="TextAlignment.Center">
|
<CardTitle TextAlignment="TextAlignment.Center">
|
||||||
ОБЪЕКТЫ
|
ОБЪЕКТЫ
|
||||||
</CardTitle>
|
</CardTitle>
|
||||||
<CardText>
|
<CardText>
|
||||||
Объектов к добавлению - @_list_obj.Count
|
Объектов к добавлению - @_list_obj.Count
|
||||||
@@ -372,13 +373,12 @@
|
|||||||
return Task.FromResult(true);
|
return Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshListSwitch()
|
|
||||||
{
|
|
||||||
_list_switch = _list_dev.Where(s => s.DeviceType.Name.Contains("Switch")).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void AddNewObject()
|
private async void AddNewObject()
|
||||||
{
|
{
|
||||||
|
if (obj_name == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
obj_item = new()
|
obj_item = new()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
@@ -391,6 +391,10 @@
|
|||||||
}
|
}
|
||||||
private async void AddNewType()
|
private async void AddNewType()
|
||||||
{
|
{
|
||||||
|
if (type_name == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
type_item = new()
|
type_item = new()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
@@ -403,6 +407,8 @@
|
|||||||
}
|
}
|
||||||
private async void AddNewDev()
|
private async void AddNewDev()
|
||||||
{
|
{
|
||||||
|
if (dev_ip == null || dev_mac == null || dev_name == null) return;
|
||||||
|
|
||||||
dev_item = new()
|
dev_item = new()
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
@@ -411,12 +417,13 @@
|
|||||||
Description = dev_desc,
|
Description = dev_desc,
|
||||||
Name = dev_name,
|
Name = dev_name,
|
||||||
Location = dev_loc,
|
Location = dev_loc,
|
||||||
DeviceType = _list_type.SingleOrDefault(t => t.Id == id_type),
|
ListDevices = null,
|
||||||
DeviceObject = _list_obj.SingleOrDefault(o => o.Id == id_obj),
|
DeviceType = _list_type.Single(t => t.Id == id_type).Id,
|
||||||
|
DeviceObject = _list_obj.Single(o => o.Id == id_obj).Id,
|
||||||
ConnectedToPortOnSwitch = num_port
|
ConnectedToPortOnSwitch = num_port
|
||||||
};
|
};
|
||||||
_list_dev.Add(dev_item);
|
_list_dev.Add(dev_item);
|
||||||
if (dev_item.DeviceType.Name.Contains("Switch")) _list_switch.Add(dev_item);
|
if (list_type.First(d => d.Id == dev_item.DeviceType).Name.Contains("Switch")) _list_switch.Add(dev_item);
|
||||||
dev_ip = string.Empty;
|
dev_ip = string.Empty;
|
||||||
dev_mac = string.Empty;
|
dev_mac = string.Empty;
|
||||||
dev_desc = string.Empty;
|
dev_desc = string.Empty;
|
||||||
@@ -426,41 +433,63 @@
|
|||||||
|
|
||||||
private async void clickSave()
|
private async void clickSave()
|
||||||
{
|
{
|
||||||
if (nextButton == "Далее") stepsRef.NextStep();
|
if (nextButton == "Далее") await stepsRef.NextStep();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
visibleProgress = Visibility.Visible;
|
visibleProgress = Visibility.Visible;
|
||||||
foreach (var item in _list_obj)
|
try
|
||||||
{
|
{
|
||||||
var p = await AllPubData.http.PostAsJsonAsync("api/Object/AddObject", item);
|
foreach (var item in _list_obj)
|
||||||
if (!p.IsSuccessStatusCode)
|
|
||||||
{
|
{
|
||||||
error_group = "ОБЪЕКТ";
|
var p = await AllPubData.http.PostAsJsonAsync("api/Object/AddObject", item);
|
||||||
error_msg = $"{item.NameObject} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
if (!p.IsSuccessStatusCode)
|
||||||
toastError = true;
|
{
|
||||||
|
error_group = "ОБЪЕКТ";
|
||||||
|
error_msg = $"{item.NameObject} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
||||||
|
toastError = true;
|
||||||
|
//await Task.Delay(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var item in _list_type)
|
||||||
|
{
|
||||||
|
var p = await AllPubData.http.PostAsJsonAsync("api/Type/AddType", item);
|
||||||
|
if (!p.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
error_group = "ТИП";
|
||||||
|
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
||||||
|
toastError = true;
|
||||||
|
//await Task.Delay(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var item in _list_dev)
|
||||||
|
{
|
||||||
|
var p = await AllPubData.http.PostAsJsonAsync("api/Device/AddDevice", item);
|
||||||
|
if (!p.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
error_group = "УСТРОЙСТВА";
|
||||||
|
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
||||||
|
toastError = true;
|
||||||
|
//await Task.Delay(500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var item in _list_type)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
var p = await AllPubData.http.PostAsJsonAsync("api/Type/AddType", item);
|
error_group = "ПРОЦЕСС";
|
||||||
if (!p.IsSuccessStatusCode)
|
error_msg = $"Во время добавления произошел сбой.";
|
||||||
{
|
toastError = true;
|
||||||
error_group = "ТИП";
|
|
||||||
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
|
||||||
toastError = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
foreach (var item in _list_dev)
|
finally
|
||||||
{
|
{
|
||||||
var p = await AllPubData.http.PostAsJsonAsync("api/Device/AddDevice", item);
|
visibleProgress = Visibility.Invisible;
|
||||||
if (!p.IsSuccessStatusCode)
|
|
||||||
{
|
|
||||||
error_group = "УСТРОЙСТВА";
|
|
||||||
error_msg = $"{item.Name} не добавлено.\r\nСтатус код: {p.StatusCode}";
|
|
||||||
toastError = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
visibleProgress = Visibility.Invisible;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GetCurrentObject()
|
||||||
|
{
|
||||||
|
_list_obj = AllPubData.ListObjectItems;
|
||||||
|
_list_type = AllPubData.ListDeviceTypeItems;
|
||||||
|
_list_dev = AllPubData.ListDeviceItems;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,5 @@
|
|||||||
<Project Path="SettingSNMPDahua/SettingSNMPDahua.csproj" Id="6a5aeee0-a683-473f-87b7-2815c2144027" />
|
<Project Path="SettingSNMPDahua/SettingSNMPDahua.csproj" Id="6a5aeee0-a683-473f-87b7-2815c2144027" />
|
||||||
<Project Path="SetVideoDataHikvision/SetVideoDataHikvision.csproj" Id="c4e10081-462c-4be5-9f58-9e1926325c9d" />
|
<Project Path="SetVideoDataHikvision/SetVideoDataHikvision.csproj" Id="c4e10081-462c-4be5-9f58-9e1926325c9d" />
|
||||||
<Project Path="SwitchDahua/SwitchDahua.csproj" Id="12504b58-758f-444b-a79b-4ce2db8398cc" />
|
<Project Path="SwitchDahua/SwitchDahua.csproj" Id="12504b58-758f-444b-a79b-4ce2db8398cc" />
|
||||||
<Project Path="Web/Web.csproj" />
|
|
||||||
<Project Path="Wiking/Wiking.csproj" Id="fa0eb4bd-8bfb-4873-bb71-1c2a608ab911" />
|
<Project Path="Wiking/Wiking.csproj" Id="fa0eb4bd-8bfb-4873-bb71-1c2a608ab911" />
|
||||||
</Solution>
|
</Solution>
|
||||||
|
|||||||
Reference in New Issue
Block a user