Skip to content

Commit 7689c69

Browse files
committed
Backend: update Nethereum to latest version
This commit updates Nethereum to latest version to support extracting token transfer amount from the raw tx created when sending (hot-storage) or signing (cold-storage). It's noteworthy to say that Web3 no longer accepts a timeout as an argument. Nethereum now supports different types of transactions like those that support EIP-1559, at this moment there's no clear benefit for migrating especially given the fact that it will causes incompatiblity with ETC so we will continue to use Legacy types for now.
1 parent 27543c0 commit 7689c69

File tree

17 files changed

+366
-191
lines changed

17 files changed

+366
-191
lines changed

src/GWallet.Backend.Tests/GWallet.Backend.Tests-legacy.fsproj

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
<HintPath>..\..\packages\NBitcoin.Altcoins.3.0.8\lib\net452\NBitcoin.Altcoins.dll</HintPath>
132132
</Reference>
133133
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
134-
<HintPath>..\..\packages\Microsoft.Extensions.Logging.Abstractions.1.0.2\lib\netstandard1.1\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
134+
<HintPath>..\..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
135135
</Reference>
136136
<Reference Include="NBitcoin">
137137
<HintPath>..\..\packages\NBitcoin.6.0.17\lib\net461\NBitcoin.dll</HintPath>
@@ -153,10 +153,20 @@
153153
<Reference Include="System.Runtime.Extensions">
154154
<HintPath>..\..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
155155
</Reference>
156+
<Reference Include="System.Numerics.Vectors">
157+
<HintPath>..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
158+
</Reference>
159+
<Reference Include="System.Runtime.CompilerServices.Unsafe">
160+
<HintPath>..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
161+
</Reference>
162+
<Reference Include="System.Memory">
163+
<HintPath>..\..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
164+
</Reference>
156165
</ItemGroup>
157166
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
158167
Other similar extension points exist, see Microsoft.Common.targets.
159168
<Target Name="AfterBuild">
160169
</Target>
161170
-->
171+
<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')" />
162172
</Project>

src/GWallet.Backend.Tests/packages.config

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<packages>
33
<package id="FSharp.Core" version="4.7.0" targetFramework="net461" />
44
<package id="Fsdk" version="0.6.0--date20230530-1155.git-3bb8d08" targetFramework="net46" />
5-
<package id="Microsoft.Extensions.Logging.Abstractions" version="1.0.2" targetFramework="net46" />
5+
<package id="Microsoft.Extensions.Logging.Abstractions" version="6.0.0" targetFramework="net471" />
66
<package id="NBitcoin" version="6.0.17" targetFramework="net471" />
77
<package id="NBitcoin.Altcoins" version="3.0.8" targetFramework="net452" />
88
<package id="Newtonsoft.Json" version="13.0.2" targetFramework="net46" />
@@ -15,10 +15,13 @@
1515
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net471" />
1616
<package id="System.Globalization" version="4.3.0" targetFramework="net471" />
1717
<package id="System.Linq" version="4.3.0" targetFramework="net471" />
18+
<package id="System.Memory" version="4.5.4" targetFramework="net471" />
1819
<package id="System.Net.Requests" version="4.3.0" targetFramework="net46" />
20+
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net471" />
1921
<package id="System.Reflection" version="4.3.0" targetFramework="net471" />
2022
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net471" />
2123
<package id="System.Runtime" version="4.3.0" targetFramework="net471" />
24+
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net471" />
2225
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net471" />
2326
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net471" />
2427
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net46" />

src/GWallet.Backend/Ether/EtherAccount.fs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ open System.Numerics
88
open System.Threading.Tasks
99

1010
open Nethereum.ABI.Decoders
11+
open Nethereum.Model
1112
open Nethereum.Signer
1213
open Nethereum.KeyStore
1314
open Nethereum.Util
@@ -20,7 +21,7 @@ open GWallet.Backend.FSharpUtil.UwpHacks
2021
module internal Account =
2122

2223
let private addressUtil = AddressUtil()
23-
let private signer = TransactionSigner()
24+
let private signer = LegacyTransactionSigner()
2425

2526
let private KeyStoreService = KeyStoreService()
2627

@@ -236,7 +237,7 @@ module internal Account =
236237
let private ValidateMinerFee (trans: string) =
237238
let intDecoder = IntTypeDecoder()
238239

239-
let tx = TransactionFactory.CreateTransaction trans
240+
let tx = TransactionFactory.CreateTransaction trans :?> SignedLegacyTransaction
240241

241242
let amountInWei = intDecoder.DecodeBigInteger tx.Value
242243

@@ -365,8 +366,7 @@ module internal Account =
365366
else
366367
failwith <| SPrintF1 "Assertion failed: Ether currency %A not supported?" account.Currency
367368

368-
let chain = GetNetwork account.Currency
369-
if not (signer.VerifyTransaction(trans, chain)) then
369+
if not (TransactionVerificationAndRecovery.VerifyTransaction trans) then
370370
failwith "Transaction could not be verified?"
371371
trans
372372

@@ -461,7 +461,7 @@ module internal Account =
461461
signedTransaction.TransactionInfo.Proposal :> ITransactionDetails
462462

463463
| _ ->
464-
let getTransactionChainId (tx: TransactionBase) =
464+
let getTransactionChainId (tx: SignedLegacyTransactionBase) =
465465
// the chain id can be deconstructed like so -
466466
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md
467467
// into one of the following -
@@ -472,22 +472,22 @@ module internal Account =
472472
let chainId = (v - BigInteger 35) / BigInteger 2
473473
chainId
474474

475-
let getTransactionCurrency (tx: TransactionBase) =
475+
let getTransactionCurrency (tx: SignedLegacyTransactionBase) =
476476
match int (getTransactionChainId tx) with
477477
| chainId when chainId = int Config.EthNet -> ETH
478478
| chainId when chainId = int Config.EtcNet -> ETC
479479
| other -> failwith <| SPrintF1 "Could not infer currency from transaction where chainId = %i." other
480480

481-
let tx = TransactionFactory.CreateTransaction signedTransaction.RawTransaction
481+
let tx = TransactionFactory.CreateTransaction signedTransaction.RawTransaction :?> SignedLegacyTransaction
482482

483483
// HACK: I prefix 12 elements to the address due to AddressTypeDecoder expecting some sort of header...
484484
let address = AddressTypeDecoder().Decode (Array.append (Array.zeroCreate 12) tx.ReceiveAddress)
485485

486-
let destAddress = addressUtil.ConvertToChecksumAddress address
486+
let destAddress = address.ConvertToEthereumChecksumAddress()
487487

488488
let txDetails =
489489
{
490-
OriginAddress = signer.GetSenderAddress signedTransaction.RawTransaction
490+
OriginAddress = TransactionVerificationAndRecovery.GetSenderAddress signedTransaction.RawTransaction
491491
Amount = UnitConversion.Convert.FromWei (IntTypeDecoder().DecodeBigInteger tx.Value)
492492
Currency = getTransactionCurrency tx
493493
DestinationAddress = destAddress

src/GWallet.Backend/Ether/EtherServer.fs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ open System.Linq
88

99
open Nethereum.Util
1010
open Nethereum.Hex.HexTypes
11+
open Nethereum.JsonRpc.Client
1112
open Nethereum.Web3
1213
open Nethereum.RPC.Eth.DTOs
1314
open Nethereum.StandardTokenEIP20.ContractDefinition
@@ -20,8 +21,8 @@ type BalanceType =
2021
| Unconfirmed
2122
| Confirmed
2223

23-
type SomeWeb3 (connectionTimeOut, url: string) =
24-
inherit Web3 (connectionTimeOut, url)
24+
type SomeWeb3 (url: string) =
25+
inherit Web3 (url)
2526

2627
member val Url = url with get
2728

@@ -67,7 +68,7 @@ module Web3ServerSeedList =
6768

6869
module Server =
6970

70-
let private Web3Server (connectionTimeOut, serverDetails: ServerDetails) =
71+
let private Web3Server (serverDetails: ServerDetails) =
7172
match serverDetails.ServerInfo.ConnectionType with
7273
| { Protocol = Tcp _ ; Encrypted = _ } ->
7374
failwith <| SPrintF1 "Ether server of TCP connection type?: %s" serverDetails.ServerInfo.NetworkPath
@@ -78,7 +79,7 @@ module Server =
7879
else
7980
"http"
8081
let uri = SPrintF2 "%s://%s" protocol serverDetails.ServerInfo.NetworkPath
81-
SomeWeb3 (connectionTimeOut, uri)
82+
SomeWeb3 uri
8283

8384
let HttpRequestExceptionMatchesErrorCode (ex: Http.HttpRequestException) (errorCode: int): bool =
8485
ex.Message.StartsWith(SPrintF1 "%i " errorCode) || ex.Message.Contains(SPrintF1 " %i " errorCode)
@@ -200,7 +201,7 @@ module Server =
200201
]
201202

202203
let MaybeRethrowRpcResponseException (ex: Exception): unit =
203-
let maybeRpcResponseEx = FSharpUtil.FindException<JsonRpcSharp.Client.RpcResponseException> ex
204+
let maybeRpcResponseEx = FSharpUtil.FindException<RpcResponseException> ex
204205
match maybeRpcResponseEx with
205206
| Some rpcResponseEx ->
206207
if not (isNull rpcResponseEx.RpcError) then
@@ -243,7 +244,7 @@ module Server =
243244

244245
let MaybeRethrowRpcClientTimeoutException (ex: Exception): unit =
245246
let maybeRpcTimeoutException =
246-
FSharpUtil.FindException<JsonRpcSharp.Client.RpcClientTimeoutException> ex
247+
FSharpUtil.FindException<RpcClientTimeoutException> ex
247248
match maybeRpcTimeoutException with
248249
| Some rpcTimeoutEx ->
249250
raise <| ServerTimedOutException(exMsg, rpcTimeoutEx)
@@ -260,7 +261,7 @@ module Server =
260261

261262
// this could be a Xamarin.Android bug (see https://gitlab.com/nblockchain/geewallet/issues/119)
262263
let MaybeRethrowObjectDisposedException (ex: Exception): unit =
263-
let maybeRpcUnknownEx = FSharpUtil.FindException<JsonRpcSharp.Client.RpcClientUnknownException> ex
264+
let maybeRpcUnknownEx = FSharpUtil.FindException<RpcClientUnknownException> ex
264265
match maybeRpcUnknownEx with
265266
| Some _ ->
266267
let maybeObjectDisposedEx = FSharpUtil.FindException<ObjectDisposedException> ex
@@ -274,12 +275,12 @@ module Server =
274275
()
275276

276277
let MaybeRethrowInnerRpcException (ex: Exception): unit =
277-
let maybeRpcUnknownEx = FSharpUtil.FindException<JsonRpcSharp.Client.RpcClientUnknownException> ex
278+
let maybeRpcUnknownEx = FSharpUtil.FindException<RpcClientUnknownException> ex
278279
match maybeRpcUnknownEx with
279280
| Some rpcUnknownEx ->
280281

281282
let maybeDeSerializationEx =
282-
FSharpUtil.FindException<JsonRpcSharp.Client.DeserializationException> rpcUnknownEx
283+
FSharpUtil.FindException<DeserializationException> rpcUnknownEx
283284
match maybeDeSerializationEx with
284285
| None ->
285286
()
@@ -411,10 +412,10 @@ module Server =
411412
return raise <| FSharpUtil.ReRaise ex
412413
}
413414

414-
let connectionTimeout = Config.DEFAULT_NETWORK_TIMEOUT
415+
ClientBase.ConnectionTimeout <- Config.DEFAULT_NETWORK_TIMEOUT
415416

416417
async {
417-
let web3Server = Web3Server (connectionTimeout, server)
418+
let web3Server = Web3Server (server)
418419
try
419420
return! HandlePossibleEtherFailures (web3ClientFunc web3Server)
420421

@@ -692,7 +693,7 @@ module Server =
692693
web3Funcs
693694
with
694695
| ex ->
695-
match FSharpUtil.FindException<JsonRpcSharp.Client.RpcResponseException> ex with
696+
match FSharpUtil.FindException<RpcResponseException> ex with
696697
| None ->
697698
return raise (FSharpUtil.ReRaise ex)
698699
| Some rpcResponseException ->

src/GWallet.Backend/Ether/TokenManager.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ module TokenManager =
4747

4848
// this is a dummy instance we need in order to pass it to base class of StandardTokenService, but not
4949
// really used online; FIXME: propose "Web3-less" overload to Nethereum
50-
let private dummyOfflineWeb3 = Web3 Config.DEFAULT_NETWORK_TIMEOUT
50+
let private dummyOfflineWeb3 = Web3()
5151
type OfflineTokenServiceWrapper(currency: Currency) =
5252
inherit TokenServiceWrapper(dummyOfflineWeb3, currency)

src/GWallet.Backend/GWallet.Backend-legacy.fsproj

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@
236236
</Reference>
237237
<Reference Include="System.Xml" />
238238
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
239-
<HintPath>..\..\packages\Microsoft.Extensions.Logging.Abstractions.1.0.2\lib\netstandard1.1\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
239+
<HintPath>..\..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
240240
</Reference>
241241
<Reference Include="JsonRpcSharp.TcpClient">
242242
<HintPath>..\..\packages\JsonRpcSharp.0.98.0--date20230731-1252.git-6788e32\lib\netstandard2.0\JsonRpcSharp.TcpClient.dll</HintPath>
@@ -262,38 +262,59 @@
262262
<Reference Include="JsonRpcSharp.WebSocketClient">
263263
<HintPath>..\..\packages\JsonRpcSharp.0.98.0--date20230731-1252.git-6788e32\lib\netstandard2.0\JsonRpcSharp.WebSocketClient.dll</HintPath>
264264
</Reference>
265+
<Reference Include="ADRaffy.ENSNormalize">
266+
<HintPath>..\..\packages\ADRaffy.ENSNormalize.0.1.5\lib\net461\ADRaffy.ENSNormalize.dll</HintPath>
267+
</Reference>
268+
<Reference Include="Nethereum.BlockchainProcessing">
269+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.BlockchainProcessing.dll</HintPath>
270+
</Reference>
271+
<Reference Include="Nethereum.JsonRpc.Client">
272+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.JsonRpc.Client.dll</HintPath>
273+
</Reference>
274+
<Reference Include="Nethereum.JsonRpc.RpcClient">
275+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.JsonRpc.RpcClient.dll</HintPath>
276+
</Reference>
277+
<Reference Include="Nethereum.Merkle.Patricia">
278+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Merkle.Patricia.dll</HintPath>
279+
</Reference>
280+
<Reference Include="Nethereum.Model">
281+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Model.dll</HintPath>
282+
</Reference>
283+
<Reference Include="Nethereum.Signer.EIP712">
284+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Signer.EIP712.dll</HintPath>
285+
</Reference>
265286
<Reference Include="Nethereum.ABI">
266-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.ABI.dll</HintPath>
287+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.ABI.dll</HintPath>
267288
</Reference>
268289
<Reference Include="Nethereum.Accounts">
269-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Accounts.dll</HintPath>
290+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Accounts.dll</HintPath>
270291
</Reference>
271292
<Reference Include="Nethereum.Contracts">
272-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Contracts.dll</HintPath>
293+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Contracts.dll</HintPath>
273294
</Reference>
274295
<Reference Include="Nethereum.Hex">
275-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Hex.dll</HintPath>
296+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Hex.dll</HintPath>
276297
</Reference>
277298
<Reference Include="Nethereum.KeyStore">
278-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.KeyStore.dll</HintPath>
299+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.KeyStore.dll</HintPath>
279300
</Reference>
280301
<Reference Include="Nethereum.RLP">
281-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.RLP.dll</HintPath>
302+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.RLP.dll</HintPath>
282303
</Reference>
283304
<Reference Include="Nethereum.RPC">
284-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.RPC.dll</HintPath>
305+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.RPC.dll</HintPath>
285306
</Reference>
286307
<Reference Include="Nethereum.Signer">
287-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Signer.dll</HintPath>
308+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Signer.dll</HintPath>
288309
</Reference>
289310
<Reference Include="Nethereum.StandardTokenEIP20">
290-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.StandardTokenEIP20.dll</HintPath>
311+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.StandardTokenEIP20.dll</HintPath>
291312
</Reference>
292313
<Reference Include="Nethereum.Util">
293-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Util.dll</HintPath>
314+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Util.dll</HintPath>
294315
</Reference>
295316
<Reference Include="Nethereum.Web3">
296-
<HintPath>..\..\packages\Nethereum.0.95.0--date20210125-0551.git-05a29e9\lib\netstandard2.0\Nethereum.Web3.dll</HintPath>
317+
<HintPath>..\..\packages\Nethereum.3.99.0--date20231003-1147.git-b9a16cf\lib\netstandard2.0\Nethereum.Web3.dll</HintPath>
297318
</Reference>
298319
<Reference Include="HtmlAgilityPack">
299320
<HintPath>..\..\packages\HtmlAgilityPack.1.11.24\lib\Net45\HtmlAgilityPack.dll</HintPath>
@@ -315,4 +336,5 @@
315336
</Target>
316337
-->
317338
<Import Project="..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
339+
<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')" />
318340
</Project>

src/GWallet.Backend/GWallet.Backend.fsproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@
6969
<PackageReference Include="NBitcoin.Altcoins" Version="3.0.8">
7070
<GeneratePathProperty></GeneratePathProperty>
7171
</PackageReference>
72-
<PackageReference Include="Nethereum" Version="0.95.0--date20210125-0551.git-05a29e9">
72+
<PackageReference Include="Nethereum" Version="3.99.0--date20231003-1147.git-b9a16cf">
73+
<GeneratePathProperty></GeneratePathProperty>
74+
</PackageReference>
75+
<PackageReference Include="JsonRpcSharp" Version="0.98.0--date20230731-1252.git-6788e32">
7376
<GeneratePathProperty></GeneratePathProperty>
7477
</PackageReference>
7578
<PackageReference Include="SharpRaven" Version="2.4.0">

0 commit comments

Comments
 (0)