Skip to content

Commit c1cd425

Browse files
committed
Synapse3
1 parent 97d0146 commit c1cd425

14 files changed

+548
-315
lines changed

AdvancedCustomRoles/AdvancedConfig.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Collections.Generic;
2+
using Syml;
3+
4+
namespace AdvancedCustomRoles;
5+
6+
public class AdvancedConfig : IDocumentSection
7+
{
8+
public List<string> CommandToExecuteAtSpawn = new();
9+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+

2+
using AdvancedCustomRoles.Handlers;
3+
using Neuron.Core.Plugins;
4+
using Synapse3.SynapseModule;
5+
using Synapse3.SynapseModule.Events;
6+
7+
namespace AdvancedCustomRoles;
8+
9+
[Plugin(
10+
Name = "AdvancedCustomRoles",
11+
Author = "Dimenzio",
12+
Description = "Allows to create new Role with just a few config files",
13+
Version = "1.0.0"
14+
)]
15+
public class AdvancedCustomRoles : ReloadablePlugin
16+
{
17+
public CustomRoleHandler RoleHandler { get; private set; }
18+
public PlayerHandler PlayerHandler { get; private set; }
19+
public ScpHandler ScpHandler { get; private set; }
20+
public RoundHandler RoundHandler { get; private set; }
21+
22+
public override void EnablePlugin()
23+
{
24+
RoleHandler = Synapse.GetAndBind<CustomRoleHandler>();
25+
RoleHandler.Load();
26+
27+
PlayerHandler = Synapse.GetAndBind<PlayerHandler>();
28+
RoundHandler = Synapse.GetAndBind<RoundHandler>();
29+
ScpHandler = Synapse.GetAndBind<ScpHandler>();
30+
31+
Logger.Info("AdvancedCustomRoles Loaded");
32+
}
33+
34+
public override void Reload(ReloadEvent _ = null) => RoleHandler?.Reload();
35+
}

AdvancedCustomRoles/AdvancedCustomRoles.csproj

Lines changed: 73 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
1313
<FileAlignment>512</FileAlignment>
1414
<Deterministic>true</Deterministic>
15+
<LangVersion>10</LangVersion>
1516
</PropertyGroup>
1617
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
1718
<DebugSymbols>true</DebugSymbols>
@@ -21,6 +22,8 @@
2122
<DefineConstants>DEBUG;TRACE</DefineConstants>
2223
<ErrorReport>prompt</ErrorReport>
2324
<WarningLevel>4</WarningLevel>
25+
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
26+
<PlatformTarget>x64</PlatformTarget>
2427
</PropertyGroup>
2528
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
2629
<DebugType>pdbonly</DebugType>
@@ -29,68 +32,112 @@
2932
<DefineConstants>TRACE</DefineConstants>
3033
<ErrorReport>prompt</ErrorReport>
3134
<WarningLevel>4</WarningLevel>
35+
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
36+
<PlatformTarget>x64</PlatformTarget>
3237
</PropertyGroup>
3338
<ItemGroup>
34-
<Reference Include="0Harmony, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
35-
<HintPath>..\packages\Lib.Harmony.2.2.0\lib\net472\0Harmony.dll</HintPath>
39+
<Reference Include="Assembly-CSharp">
40+
<HintPath>..\..\..\..\Synapse-synapse3\Synapse3.SynapseModule\bin\Debug\net472\Assembly-CSharp-Publicized.dll</HintPath>
3641
</Reference>
37-
<Reference Include="Assembly-CSharp, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
38-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\Assembly-CSharp.dll</HintPath>
42+
<Reference Include="Assembly-CSharp-firstpass">
43+
<HintPath>..\..\..\..\Synapse-synapse3\Synapse3.SynapseModule\bin\Debug\net472\Assembly-CSharp-firstpass.dll</HintPath>
3944
</Reference>
40-
<Reference Include="Assembly-CSharp-firstpass, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
41-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\Assembly-CSharp-firstpass.dll</HintPath>
45+
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
46+
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
4247
</Reference>
43-
<Reference Include="LiteDB, Version=5.0.11.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27, processorArchitecture=MSIL">
44-
<HintPath>..\packages\LiteDB.5.0.11\lib\net45\LiteDB.dll</HintPath>
48+
<Reference Include="Microsoft.Extensions.Caching.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
49+
<HintPath>..\packages\Microsoft.Extensions.Caching.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>
4550
</Reference>
46-
<Reference Include="Mirror, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
47-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\Mirror.dll</HintPath>
51+
<Reference Include="Microsoft.Extensions.Caching.Memory, Version=6.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
52+
<HintPath>..\packages\Microsoft.Extensions.Caching.Memory.6.0.1\lib\net461\Microsoft.Extensions.Caching.Memory.dll</HintPath>
4853
</Reference>
49-
<Reference Include="Swan.Lite, Version=3.1.0.0, Culture=neutral, processorArchitecture=MSIL">
50-
<HintPath>..\packages\Unosquare.Swan.Lite.3.1.0\lib\net461\Swan.Lite.dll</HintPath>
54+
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
55+
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
5156
</Reference>
52-
<Reference Include="Synapse, Version=2.8.1.0, Culture=neutral, processorArchitecture=MSIL">
53-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\Synapse.dll</HintPath>
57+
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
58+
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
59+
</Reference>
60+
<Reference Include="Microsoft.Extensions.Options, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
61+
<HintPath>..\packages\Microsoft.Extensions.Options.6.0.0\lib\net461\Microsoft.Extensions.Options.dll</HintPath>
62+
</Reference>
63+
<Reference Include="Microsoft.Extensions.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
64+
<HintPath>..\packages\Microsoft.Extensions.Primitives.6.0.0\lib\net461\Microsoft.Extensions.Primitives.dll</HintPath>
65+
</Reference>
66+
<Reference Include="mscorlib" />
67+
<Reference Include="Neuron.Core, Version=1.0.0.5, Culture=neutral, processorArchitecture=Amd64">
68+
<HintPath>..\packages\NeuronModding.Core.1.0.0.5\lib\netstandard2.0\Neuron.Core.dll</HintPath>
69+
</Reference>
70+
<Reference Include="Neuron.Modules.Commands, Version=1.0.0.5, Culture=neutral, processorArchitecture=Amd64">
71+
<HintPath>..\packages\NeuronModding.Modules.Commands.1.0.0.5\lib\netstandard2.0\Neuron.Modules.Commands.dll</HintPath>
72+
</Reference>
73+
<Reference Include="Neuron.Modules.Configs, Version=1.0.0.5, Culture=neutral, processorArchitecture=Amd64">
74+
<HintPath>..\packages\NeuronModding.Modules.Configs.1.0.0.5\lib\netstandard2.0\Neuron.Modules.Configs.dll</HintPath>
75+
</Reference>
76+
<Reference Include="Ninject, Version=3.3.6.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
77+
<HintPath>..\packages\Ninject.3.3.6\lib\net45\Ninject.dll</HintPath>
78+
</Reference>
79+
<Reference Include="SYML, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL">
80+
<HintPath>..\packages\SYML.1.0.2\lib\netstandard2.0\SYML.dll</HintPath>
81+
</Reference>
82+
<Reference Include="Synapse3.SynapseModule">
83+
<HintPath>..\..\..\..\Synapse-synapse3\Synapse3.SynapseModule\bin\Debug\net472\Synapse3.SynapseModule.dll</HintPath>
5484
</Reference>
5585
<Reference Include="System" />
86+
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
87+
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
88+
</Reference>
89+
<Reference Include="System.ComponentModel.DataAnnotations" />
5690
<Reference Include="System.Core" />
91+
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
92+
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
93+
</Reference>
94+
<Reference Include="System.Numerics" />
95+
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
96+
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
97+
</Reference>
5798
<Reference Include="System.Runtime" />
5899
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
59-
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0-preview.7.21377.19\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
100+
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
60101
</Reference>
61-
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
62-
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
102+
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
103+
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
63104
</Reference>
64105
<Reference Include="System.Xml.Linq" />
65106
<Reference Include="System.Data.DataSetExtensions" />
66107
<Reference Include="Microsoft.CSharp" />
67108
<Reference Include="System.Data" />
68109
<Reference Include="System.Net.Http" />
69110
<Reference Include="System.Xml" />
70-
<Reference Include="UnityEngine, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
71-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\UnityEngine.dll</HintPath>
72-
</Reference>
73-
<Reference Include="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
74-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\UnityEngine.CoreModule.dll</HintPath>
75-
</Reference>
76-
<Reference Include="UnityEngine.PhysicsModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
77-
<HintPath>..\packages\SynapseSL.2.8.3-pre1\lib\net472\UnityEngine.PhysicsModule.dll</HintPath>
111+
<Reference Include="UnityEngine.CoreModule">
112+
<HintPath>..\..\..\..\Synapse-synapse3\Synapse3.SynapseModule\bin\Debug\net472\UnityEngine.CoreModule.dll</HintPath>
78113
</Reference>
79114
<Reference Include="YamlDotNet, Version=11.0.0.0, Culture=neutral, PublicKeyToken=ec19458f3c15af5e, processorArchitecture=MSIL">
80115
<HintPath>..\packages\YamlDotNet.11.2.1\lib\net45\YamlDotNet.dll</HintPath>
81116
</Reference>
82117
</ItemGroup>
83118
<ItemGroup>
119+
<Compile Include="AdvancedConfig.cs" />
120+
<Compile Include="AdvancedCustomRoles.cs" />
84121
<Compile Include="AdvancedRoleScript.cs" />
85122
<Compile Include="CustomRoleHandler.cs" />
86123
<Compile Include="CustomRole.cs" />
87124
<Compile Include="Handlers\PlayerHandler.cs" />
88125
<Compile Include="Handlers\RoundHandler.cs" />
89-
<Compile Include="PluginClass.cs" />
126+
<Compile Include="Handlers\ScpHandler.cs" />
127+
<Compile Include="HumanConfig.cs" />
90128
<Compile Include="Properties\AssemblyInfo.cs" />
129+
<Compile Include="ScpConfig.cs" />
91130
</ItemGroup>
92131
<ItemGroup>
132+
<None Include="App.config" />
93133
<None Include="packages.config" />
94134
</ItemGroup>
95135
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
136+
<Import Project="..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\build\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\build\Microsoft.Extensions.Logging.Abstractions.targets')" />
137+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
138+
<PropertyGroup>
139+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}.</ErrorText>
140+
</PropertyGroup>
141+
<Error Condition="!Exists('..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\build\Microsoft.Extensions.Logging.Abstractions.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\build\Microsoft.Extensions.Logging.Abstractions.targets'))" />
142+
</Target>
96143
</Project>
Lines changed: 72 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,89 @@
1-
using Synapse.Api;
2-
using System.Collections.Generic;
3-
4-
namespace AdvancedCustomRoles
1+
using System.Collections.Generic;
2+
using Neuron.Core.Logging;
3+
using Synapse3.SynapseModule;
4+
using Synapse3.SynapseModule.Map;
5+
using Synapse3.SynapseModule.Player;
6+
using Synapse3.SynapseModule.Role;
7+
8+
namespace AdvancedCustomRoles;
9+
public class AdvancedRoleScript : SynapseAbstractRole
510
{
6-
public class AdvancedRoleScript : Synapse.Api.Roles.Role
7-
{
8-
public static PluginClass Plugin { private get; set; }
9-
10-
public AdvancedRoleScript(CustomRole role) => CustomRole = role;
11-
12-
public AdvancedRoleScript(int id) => CustomRole = Plugin.RoleHandler.GetCustomRole(id);
13-
14-
public CustomRole CustomRole { get; }
11+
public CustomRole RoleConfig;
12+
private CustomInfoList.CustomInfoEntry _customInfo;
13+
private readonly CustomRoleHandler _roleHandler;
14+
private readonly MapService _map;
15+
private readonly PlayerService _player;
1516

16-
public override int GetRoleID() => CustomRole.RoleID;
17-
18-
public override string GetRoleName() => CustomRole != null ? CustomRole.Name : "NULL";
19-
20-
public override List<int> GetEnemiesID() => CustomRole != null ? CustomRole.Enemies : new List<int>();
21-
22-
public override List<int> GetFriendsID() => CustomRole != null ? CustomRole.Friends : new List<int>();
17+
public AdvancedRoleScript(CustomRoleHandler roleHandler, MapService map, PlayerService player)
18+
{
19+
_roleHandler = roleHandler;
20+
_map = map;
21+
_player = player;
22+
}
23+
24+
public override void Load()
25+
{
26+
RoleConfig = _roleHandler.GetCustomRole(Attribute.Id);
27+
}
2328

24-
public override int GetTeamID() => CustomRole != null ? CustomRole.TeamID : 0;
29+
protected override IAbstractRoleConfig GetConfig() => RoleConfig;
30+
public override List<uint> GetEnemiesID() => RoleConfig.Enemies;
31+
public override List<uint> GetFriendsID() => RoleConfig.Friends;
32+
33+
protected override void OnSpawn(IAbstractRoleConfig _)
34+
{
35+
if (!string.IsNullOrWhiteSpace(RoleConfig.DisplayInfo))
36+
{
37+
_customInfo = new CustomInfoList.CustomInfoEntry()
38+
{
39+
Info = RoleConfig.DisplayInfo,
40+
EveryoneCanSee = true
41+
};
42+
Player.CustomInfo.Add(_customInfo);
43+
}
44+
if (RoleConfig.GodMode)
45+
Player.GodMode = true;
2546

26-
public override void Spawn()
47+
if (RoleConfig.Human != null)
2748
{
28-
Player.RoleType = CustomRole.Spawnrole;
29-
Player.MaxHealth = CustomRole.MaxHealth;
30-
Player.Health = CustomRole.SpawnHealth;
31-
if (CustomRole.GodMode)
32-
Player.GodMode = true;
33-
CustomRole.Inventory.Apply(Player);
49+
Player.WalkSpeed = RoleConfig.Human.WalkSpeed;
50+
Player.SprintSpeed = RoleConfig.Human.SprintSpeed;
51+
}
3452

35-
if (!string.IsNullOrWhiteSpace(CustomRole.DisplayInfo))
36-
Player.DisplayInfo = CustomRole.DisplayInfo.Replace("\\n","\n");
37-
if (CustomRole.RemoveRoleName)
38-
Player.RemoveDisplayInfo(PlayerInfoArea.Role);
3953

40-
if (!string.IsNullOrWhiteSpace(CustomRole.SpawnBroadcast))
41-
Player.SendBroadcast(CustomRole.SpawnMessageTime, CustomRole.SpawnBroadcast.Replace("\\n", "\n"));
54+
if (!string.IsNullOrWhiteSpace(RoleConfig.SpawnBroadcast))
55+
Player.SendBroadcast(RoleConfig.SpawnBroadcast.Replace("\\n", "\n"), RoleConfig.SpawnMessageTime);
4256

43-
if (!string.IsNullOrWhiteSpace(CustomRole.SpawnHint))
44-
Player.GiveTextHint(CustomRole.SpawnHint.Replace("\\n", "\n"), CustomRole.SpawnMessageTime);
57+
if (!string.IsNullOrWhiteSpace(RoleConfig.SpawnHint))
58+
Player.SendHint(RoleConfig.SpawnHint.Replace("\\n", "\n"), RoleConfig.SpawnMessageTime);
4559

46-
if (!string.IsNullOrWhiteSpace(CustomRole.SpawnWindow))
47-
Player.OpenReportWindow(CustomRole.SpawnWindow.Replace("\\n", "\n"));
48-
}
60+
if (!string.IsNullOrWhiteSpace(RoleConfig.SpawnWindow))
61+
Player.SendWindowMessage(RoleConfig.SpawnWindow.Replace("\\n", "\n"));
4962

50-
public override void Escape()
63+
NeuronLogger.For<Synapse>().Warn("Found Advanced");
64+
if (RoleConfig.Advanced != null)
5165
{
52-
if (CustomRole.EscapeRole > 0)
53-
Player.RoleID = CustomRole.EscapeRole;
66+
NeuronLogger.For<Synapse>().Warn("Found Advanced");
67+
foreach (var command in RoleConfig.Advanced.CommandToExecuteAtSpawn ?? new())
68+
{
69+
NeuronLogger.For<Synapse>().Warn("Executed Command " + command);
70+
_player.Host.ExecuteCommand(command.Replace("%player%", Player.PlayerId.ToString()));
71+
}
5472
}
73+
}
74+
75+
protected override void OnDeSpawn(DeSpawnReason reason)
76+
{
77+
if (_customInfo != null)
78+
Player.CustomInfo.Remove(_customInfo);
79+
80+
if (RoleConfig.GodMode)
81+
Player.GodMode = false;
5582

56-
public override void DeSpawn()
83+
if (RoleConfig.Human != null)
5784
{
58-
if (!string.IsNullOrWhiteSpace(CustomRole.DisplayInfo))
59-
Player.DisplayInfo = string.Empty;
60-
if (CustomRole.RemoveRoleName)
61-
Player.AddDisplayInfo(PlayerInfoArea.Role);
62-
if(CustomRole.GodMode)
63-
Player.GodMode = false;
85+
Player.WalkSpeed = _map.HumanWalkSpeed;
86+
Player.SprintSpeed = _map.HumanSprintSpeed;
6487
}
6588
}
6689
}

AdvancedCustomRoles/App.config

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?><configuration>
2+
<runtime>
3+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
4+
<dependentAssembly>
5+
<assemblyIdentity name="Microsoft.Extensions.Caching.Memory" publicKeyToken="adb9793829ddae60" culture="neutral" />
6+
<bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="6.0.0.1" />
7+
</dependentAssembly>
8+
<dependentAssembly>
9+
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
10+
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
11+
</dependentAssembly>
12+
</assemblyBinding>
13+
</runtime>
14+
</configuration>

0 commit comments

Comments
 (0)