diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3dae25a1df..dca46dbbd6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,12 +7,30 @@ on: env: DOTNET_VERSION: 8.0.x - COVERALL_COLLECT_OUTPUT: "/p:CollectCoverage=true /p:CoverletOutput='${{ github.workspace }}/TestResults/coverage/'" - COVERALL_MERGE_PATH: "/p:MergeWith='${{ github.workspace }}/TestResults/coverage/coverage.json'" jobs: + Format: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Check Format (*.cs) + run: dotnet format --verify-no-changes --verbosity diagnostic + + - name: Build (Neo.CLI) + run: | + dotnet build ./src/Neo.CLI \ + --output ./out/Neo.CLI + Test: + needs: [Format] timeout-minutes: 15 strategy: matrix: @@ -25,14 +43,6 @@ jobs: uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - - name: Check format - if: matrix.os == 'ubuntu-latest' - run: | - dotnet format --verify-no-changes --verbosity diagnostic - - name: Build CLI - if: matrix.os == 'ubuntu-latest' - run: | - dotnet publish ./src/Neo.CLI - name: Test if: matrix.os != 'ubuntu-latest' run: | @@ -42,31 +52,40 @@ jobs: if: matrix.os == 'ubuntu-latest' run: | sudo apt-get --assume-yes install libleveldb-dev librocksdb-dev - - dotnet test ./tests/Neo.Cryptography.BLS12_381.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} - dotnet test ./tests/Neo.ConsoleService.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.UnitTests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.VM.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.Json.UnitTests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} + + dotnet test ./tests/Neo.Cryptography.BLS12_381.Tests --output ./bin/tests/Neo.Cryptography.BLS12_381.Tests + dotnet test ./tests/Neo.ConsoleService.Tests --output ./bin/tests/Neo.ConsoleService.Tests + dotnet test ./tests/Neo.UnitTests --output ./bin/tests/Neo.UnitTests + dotnet test ./tests/Neo.VM.Tests --output ./bin/tests/Neo.VM.Tests + dotnet test ./tests/Neo.Json.UnitTests --output ./bin/tests/Neo.Json.UnitTests # Plugins - dotnet test ./tests/Neo.Cryptography.MPTTrie.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.Network.RPC.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.Plugins.OracleService.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.Plugins.RpcServer.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} - dotnet test ./tests/Neo.Plugins.Storage.Tests ${{ env.COVERALL_COLLECT_OUTPUT }} ${{ env.COVERALL_MERGE_PATH }} /p:CoverletOutputFormat='cobertura' + dotnet test ./tests/Neo.Cryptography.MPTTrie.Tests --output ./bin/tests/Neo.Cryptography.MPTTrie.Tests + dotnet test ./tests/Neo.Network.RPC.Tests --output ./bin/tests/Neo.Network.RPC.Tests + dotnet test ./tests/Neo.Plugins.OracleService.Tests --output ./bin/tests/Neo.Plugins.OracleService.Tests + dotnet test ./tests/Neo.Plugins.RpcServer.Tests --output ./bin/tests/Neo.Plugins.RpcServer.Tests + dotnet test ./tests/Neo.Plugins.Storage.Tests --output ./bin/tests/Neo.Plugins.Storage.Tests - name: Coveralls if: matrix.os == 'ubuntu-latest' uses: coverallsapp/github-action@v2.3.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} - format: cobertura - file: ${{ github.workspace }}/TestResults/coverage/coverage.cobertura.xml + files: + ${{ github.workspace }}/tests/Neo.Cryptography.BLS12_381.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.ConsoleService.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.UnitTests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.VM.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Json.UnitTests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Cryptography.MPTTrie.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Network.RPC.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Plugins.OracleService.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Plugins.RpcServer.Tests/TestResults/coverage.info + ${{ github.workspace }}/tests/Neo.Plugins.Storage.Tests/TestResults/coverage.info PublishPackage: if: github.ref == 'refs/heads/master' && startsWith(github.repository, 'neo-project/') - needs: Test + needs: [Test] runs-on: ubuntu-latest steps: - name: Checkout @@ -115,7 +134,7 @@ jobs: Release: if: github.ref == 'refs/heads/master' && startsWith(github.repository, 'neo-project/') - needs: Test + needs: [Test] runs-on: ubuntu-latest steps: - name: Checkout diff --git a/src/Neo.CLI/Neo.CLI.csproj b/src/Neo.CLI/Neo.CLI.csproj index bb52675ec4..a9d4c9919e 100644 --- a/src/Neo.CLI/Neo.CLI.csproj +++ b/src/Neo.CLI/Neo.CLI.csproj @@ -10,6 +10,7 @@ Neo.CLI neo.ico enable + $(SolutionDir)/bin/$(AssemblyTitle) diff --git a/src/Neo.ConsoleService/Neo.ConsoleService.csproj b/src/Neo.ConsoleService/Neo.ConsoleService.csproj index 206e18235e..9b3ad32dfe 100644 --- a/src/Neo.ConsoleService/Neo.ConsoleService.csproj +++ b/src/Neo.ConsoleService/Neo.ConsoleService.csproj @@ -4,6 +4,7 @@ netstandard2.1;net8.0 Neo.ConsoleService enable + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo.Cryptography.BLS12_381/Neo.Cryptography.BLS12_381.csproj b/src/Neo.Cryptography.BLS12_381/Neo.Cryptography.BLS12_381.csproj index 800699719f..d5313d9eab 100644 --- a/src/Neo.Cryptography.BLS12_381/Neo.Cryptography.BLS12_381.csproj +++ b/src/Neo.Cryptography.BLS12_381/Neo.Cryptography.BLS12_381.csproj @@ -5,6 +5,8 @@ netstandard2.1;net8.0 enable enable + Neo.Cryptography.BLS12_381 + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo.Extensions/Neo.Extensions.csproj b/src/Neo.Extensions/Neo.Extensions.csproj index 71330a05a3..c6d549be6a 100644 --- a/src/Neo.Extensions/Neo.Extensions.csproj +++ b/src/Neo.Extensions/Neo.Extensions.csproj @@ -3,7 +3,9 @@ netstandard2.1;net8.0 enable + Neo.Extensions NEO;Blockchain;Extensions + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo.GUI/Neo.GUI.csproj b/src/Neo.GUI/Neo.GUI.csproj index 6c7c20912e..014459be4c 100644 --- a/src/Neo.GUI/Neo.GUI.csproj +++ b/src/Neo.GUI/Neo.GUI.csproj @@ -11,6 +11,7 @@ Neo.GUI neo.ico false + $(SolutionDir)/bin/$(AssemblyTitle) @@ -62,4 +63,4 @@ - \ No newline at end of file + diff --git a/src/Neo.IO/Neo.IO.csproj b/src/Neo.IO/Neo.IO.csproj index f920a40fd5..a1a0a9ea2e 100644 --- a/src/Neo.IO/Neo.IO.csproj +++ b/src/Neo.IO/Neo.IO.csproj @@ -4,7 +4,9 @@ netstandard2.1;net8.0 true enable + Neo.IO NEO;Blockchain;IO + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo.Json/Neo.Json.csproj b/src/Neo.Json/Neo.Json.csproj index cc3ea45278..3d75276dec 100644 --- a/src/Neo.Json/Neo.Json.csproj +++ b/src/Neo.Json/Neo.Json.csproj @@ -4,7 +4,9 @@ netstandard2.1;net8.0 enable enable + Neo.Json NEO;JSON + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo.VM/Neo.VM.csproj b/src/Neo.VM/Neo.VM.csproj index a9157f5bcf..9315a850df 100644 --- a/src/Neo.VM/Neo.VM.csproj +++ b/src/Neo.VM/Neo.VM.csproj @@ -4,6 +4,8 @@ netstandard2.1;net8.0 true enable + Neo.VM + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo/Neo.csproj b/src/Neo/Neo.csproj index a10444df17..707b94fa4c 100644 --- a/src/Neo/Neo.csproj +++ b/src/Neo/Neo.csproj @@ -3,7 +3,9 @@ netstandard2.1;net8.0 true + Neo NEO;AntShares;Blockchain;Smart Contract + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Neo/SmartContract/Native/NativeContract.cs b/src/Neo/SmartContract/Native/NativeContract.cs index be43df68fd..1cc244408d 100644 --- a/src/Neo/SmartContract/Native/NativeContract.cs +++ b/src/Neo/SmartContract/Native/NativeContract.cs @@ -35,7 +35,7 @@ public class CacheEntry public byte[] Script { get; set; } } - internal Dictionary NativeContracts { get; set; } = new Dictionary(); + internal Dictionary NativeContracts { get; set; } = new(); public CacheEntry GetAllowedMethods(NativeContract native, ApplicationEngine engine) { @@ -48,12 +48,12 @@ public CacheEntry GetAllowedMethods(NativeContract native, ApplicationEngine eng } } - public delegate bool IsHardforkEnabledDelegate(Hardfork hf, uint index); - private static readonly List contractsList = new(); - private static readonly Dictionary contractsDictionary = new(); - private readonly ImmutableHashSet usedHardforks; - private readonly ReadOnlyCollection methodDescriptors; - private readonly ReadOnlyCollection eventsDescriptors; + public delegate bool IsHardforkEnabledDelegate(Hardfork hf, uint blockHeight); + private static readonly List s_contractsList = []; + private static readonly Dictionary s_contractsDictionary = new(); + private readonly ImmutableHashSet _usedHardforks; + private readonly ReadOnlyCollection _methodDescriptors; + private readonly ReadOnlyCollection _eventsDescriptors; private static int id_counter = 0; #region Named Native Contracts @@ -108,7 +108,7 @@ public CacheEntry GetAllowedMethods(NativeContract native, ApplicationEngine eng /// /// Gets all native contracts. /// - public static IReadOnlyCollection Contracts { get; } = contractsList; + public static IReadOnlyCollection Contracts { get; } = s_contractsList; /// /// The name of the native contract. @@ -139,17 +139,17 @@ protected NativeContract() // Reflection to get the methods - List listMethods = new(); + List listMethods = []; foreach (MemberInfo member in GetType().GetMembers(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)) { ContractMethodAttribute attribute = member.GetCustomAttribute(); if (attribute is null) continue; listMethods.Add(new ContractMethodMetadata(member, attribute)); } - methodDescriptors = listMethods.OrderBy(p => p.Name, StringComparer.Ordinal).ThenBy(p => p.Parameters.Length).ToList().AsReadOnly(); + _methodDescriptors = listMethods.OrderBy(p => p.Name, StringComparer.Ordinal).ThenBy(p => p.Parameters.Length).ToList().AsReadOnly(); // Reflection to get the events - eventsDescriptors = + _eventsDescriptors = GetType().GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, Array.Empty(), null)?. GetCustomAttributes(). // Take into account not only the contract constructor, but also the base type constructor for proper FungibleToken events handling. @@ -158,26 +158,25 @@ protected NativeContract() OrderBy(p => p.Order).ToList().AsReadOnly(); // Calculate the initializations forks - usedHardforks = - methodDescriptors.Select(u => u.ActiveIn) - .Concat(methodDescriptors.Select(u => u.DeprecatedIn)) - .Concat(eventsDescriptors.Select(u => u.ActiveIn)) - .Concat(new Hardfork?[] { ActiveIn }) - .Where(u => u is not null) - .OrderBy(u => (byte)u) - .Cast().ToImmutableHashSet(); - - contractsList.Add(this); - contractsDictionary.Add(Hash, this); + _usedHardforks = + _methodDescriptors.Select(u => u.ActiveIn) + .Concat(_methodDescriptors.Select(u => u.DeprecatedIn)) + .Concat(_eventsDescriptors.Select(u => u.ActiveIn)) + .Concat([ActiveIn]) + .Where(u => u is not null) + .OrderBy(u => (byte)u) + .Cast().ToImmutableHashSet(); + s_contractsList.Add(this); + s_contractsDictionary.Add(Hash, this); } /// /// The allowed methods and his offsets. /// /// Hardfork checker - /// Block index + /// Block height. Used to check the hardforks and active methods. /// The . - private NativeContractsCache.CacheEntry GetAllowedMethods(IsHardforkEnabledDelegate hfChecker, uint index) + private NativeContractsCache.CacheEntry GetAllowedMethods(IsHardforkEnabledDelegate hfChecker, uint blockHeight) { Dictionary methods = new(); @@ -185,14 +184,14 @@ private NativeContractsCache.CacheEntry GetAllowedMethods(IsHardforkEnabledDeleg byte[] script; using (ScriptBuilder sb = new()) { - foreach (ContractMethodMetadata method in methodDescriptors.Where(u + foreach (ContractMethodMetadata method in _methodDescriptors.Where(u => // no hardfork is involved u.ActiveIn is null && u.DeprecatedIn is null || // deprecated method hardfork is involved - u.DeprecatedIn is not null && hfChecker(u.DeprecatedIn.Value, index) == false || + u.DeprecatedIn is not null && hfChecker(u.DeprecatedIn.Value, blockHeight) == false || // active method hardfork is involved - u.ActiveIn is not null && hfChecker(u.ActiveIn.Value, index)) + u.ActiveIn is not null && hfChecker(u.ActiveIn.Value, blockHeight)) ) { method.Descriptor.Offset = sb.Length; @@ -204,35 +203,35 @@ u.ActiveIn is null && u.DeprecatedIn is null || script = sb.ToArray(); } - return new NativeContractsCache.CacheEntry() { Methods = methods, Script = script }; + return new NativeContractsCache.CacheEntry { Methods = methods, Script = script }; } /// /// The of the native contract. /// /// The where the HardForks are configured. - /// Block index + /// Block index /// The . [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ContractState GetContractState(ProtocolSettings settings, uint index) => GetContractState(settings.IsHardforkEnabled, index); + public ContractState GetContractState(ProtocolSettings settings, uint blockHeight) => GetContractState(settings.IsHardforkEnabled, blockHeight); /// /// The of the native contract. /// /// Hardfork checker - /// Block index + /// Block height. Used to check hardforks and active methods. /// The . - public ContractState GetContractState(IsHardforkEnabledDelegate hfChecker, uint index) + public ContractState GetContractState(IsHardforkEnabledDelegate hfChecker, uint blockHeight) { // Get allowed methods and nef script - var allowedMethods = GetAllowedMethods(hfChecker, index); + var allowedMethods = GetAllowedMethods(hfChecker, blockHeight); // Compose nef file var nef = new NefFile() { Compiler = "neo-core-v3.0", Source = string.Empty, - Tokens = Array.Empty(), + Tokens = [], Script = allowedMethods.Script }; nef.CheckSum = NefFile.ComputeChecksum(nef); @@ -241,17 +240,17 @@ public ContractState GetContractState(IsHardforkEnabledDelegate hfChecker, uint var manifest = new ContractManifest() { Name = Name, - Groups = Array.Empty(), - SupportedStandards = Array.Empty(), - Abi = new ContractAbi() + Groups = [], + SupportedStandards = [], + Abi = new ContractAbi { - Events = eventsDescriptors - .Where(u => u.ActiveIn is null || hfChecker(u.ActiveIn.Value, index)) + Events = _eventsDescriptors + .Where(u => u.ActiveIn is null || hfChecker(u.ActiveIn.Value, blockHeight)) .Select(p => p.Descriptor).ToArray(), Methods = allowedMethods.Methods.Values .Select(p => p.Descriptor).ToArray() }, - Permissions = new[] { ContractPermission.DefaultPermission }, + Permissions = [ContractPermission.DefaultPermission], Trusts = WildcardContainer.Create(), Extra = null }; @@ -282,7 +281,7 @@ internal bool IsInitializeBlock(ProtocolSettings settings, uint index, out Hardf var hfs = new List(); // If is in the hardfork height, add them to return array - foreach (var hf in usedHardforks) + foreach (var hf in _usedHardforks) { if (!settings.Hardforks.TryGetValue(hf, out var activeIn)) { @@ -319,9 +318,9 @@ internal bool IsInitializeBlock(ProtocolSettings settings, uint index, out Hardf /// Is the native contract active /// /// The where the HardForks are configured. - /// Block index + /// Block height /// True if the native contract is active - internal bool IsActive(ProtocolSettings settings, uint index) + internal bool IsActive(ProtocolSettings settings, uint blockHeight) { if (ActiveIn is null) return true; @@ -331,7 +330,7 @@ internal bool IsActive(ProtocolSettings settings, uint index) activeIn = 0; } - return activeIn <= index; + return activeIn <= blockHeight; } /// @@ -357,7 +356,7 @@ private protected KeyBuilder CreateStorageKey(byte prefix) /// The native contract with the specified hash. public static NativeContract GetContract(UInt160 hash) { - contractsDictionary.TryGetValue(hash, out var contract); + s_contractsDictionary.TryGetValue(hash, out var contract); return contract; } @@ -415,7 +414,7 @@ internal async void Invoke(ApplicationEngine engine, byte version) /// if the contract is native; otherwise, . public static bool IsNative(UInt160 hash) { - return contractsDictionary.ContainsKey(hash); + return s_contractsDictionary.ContainsKey(hash); } internal virtual ContractTask InitializeAsync(ApplicationEngine engine, Hardfork? hardFork) diff --git a/src/Plugins/ApplicationLogs/ApplicationLogs.csproj b/src/Plugins/ApplicationLogs/ApplicationLogs.csproj index 89eea3b1bb..4529b946af 100644 --- a/src/Plugins/ApplicationLogs/ApplicationLogs.csproj +++ b/src/Plugins/ApplicationLogs/ApplicationLogs.csproj @@ -4,6 +4,7 @@ Neo.Plugins.ApplicationLogs Neo.Plugins enable + $(SolutionDir)/bin/$(PackageId) @@ -18,4 +19,4 @@ PreserveNewest - \ No newline at end of file + diff --git a/src/Plugins/DBFTPlugin/DBFTPlugin.csproj b/src/Plugins/DBFTPlugin/DBFTPlugin.csproj index b04e2e5c4f..68595be53a 100644 --- a/src/Plugins/DBFTPlugin/DBFTPlugin.csproj +++ b/src/Plugins/DBFTPlugin/DBFTPlugin.csproj @@ -4,6 +4,7 @@ net8.0 Neo.Consensus.DBFT Neo.Consensus + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/Directory.Build.props b/src/Plugins/Directory.Build.props index f7bcef093b..72e96f0300 100644 --- a/src/Plugins/Directory.Build.props +++ b/src/Plugins/Directory.Build.props @@ -9,7 +9,7 @@ - + diff --git a/src/Plugins/LevelDBStore/LevelDBStore.csproj b/src/Plugins/LevelDBStore/LevelDBStore.csproj index ba82156b18..ef605a7afe 100644 --- a/src/Plugins/LevelDBStore/LevelDBStore.csproj +++ b/src/Plugins/LevelDBStore/LevelDBStore.csproj @@ -5,6 +5,7 @@ Neo.Plugins.Storage.LevelDBStore Neo.Plugins.Storage true + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/MPTTrie/MPTTrie.csproj b/src/Plugins/MPTTrie/MPTTrie.csproj index a2c3377a16..ef9e45cc51 100644 --- a/src/Plugins/MPTTrie/MPTTrie.csproj +++ b/src/Plugins/MPTTrie/MPTTrie.csproj @@ -5,6 +5,7 @@ Neo.Cryptography.MPT Neo.Cryptography true + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/OracleService/OracleService.csproj b/src/Plugins/OracleService/OracleService.csproj index 48ca5f3808..1fa5c5602f 100644 --- a/src/Plugins/OracleService/OracleService.csproj +++ b/src/Plugins/OracleService/OracleService.csproj @@ -3,6 +3,7 @@ net8.0 Neo.Plugins.OracleService + $(SolutionDir)/bin/$(PackageId) @@ -23,4 +24,4 @@ - \ No newline at end of file + diff --git a/src/Plugins/RocksDBStore/RocksDBStore.csproj b/src/Plugins/RocksDBStore/RocksDBStore.csproj index 57037c68cf..441b17306e 100644 --- a/src/Plugins/RocksDBStore/RocksDBStore.csproj +++ b/src/Plugins/RocksDBStore/RocksDBStore.csproj @@ -4,6 +4,7 @@ net8.0 Neo.Plugins.Storage.RocksDBStore Neo.Plugins.Storage + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/RpcClient/RpcClient.csproj b/src/Plugins/RpcClient/RpcClient.csproj index cc634337d5..c43c71ef8a 100644 --- a/src/Plugins/RpcClient/RpcClient.csproj +++ b/src/Plugins/RpcClient/RpcClient.csproj @@ -4,6 +4,7 @@ net8.0 Neo.Network.RPC.RpcClient Neo.Network.RPC + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/RpcServer/RpcServer.csproj b/src/Plugins/RpcServer/RpcServer.csproj index 1721c6bccb..3fb7a7bb9a 100644 --- a/src/Plugins/RpcServer/RpcServer.csproj +++ b/src/Plugins/RpcServer/RpcServer.csproj @@ -1,8 +1,9 @@ - + net8.0 Neo.Plugins.RpcServer + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/SQLiteWallet/SQLiteWallet.csproj b/src/Plugins/SQLiteWallet/SQLiteWallet.csproj index fb2d3e71b8..4c9029040f 100644 --- a/src/Plugins/SQLiteWallet/SQLiteWallet.csproj +++ b/src/Plugins/SQLiteWallet/SQLiteWallet.csproj @@ -5,6 +5,7 @@ Neo.Wallets.SQLite Neo.Wallets.SQLite enable + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/StateService/StateService.csproj b/src/Plugins/StateService/StateService.csproj index b8e395c990..2bf85f1465 100644 --- a/src/Plugins/StateService/StateService.csproj +++ b/src/Plugins/StateService/StateService.csproj @@ -4,6 +4,7 @@ net8.0 Neo.Plugins.StateService true + $(SolutionDir)/bin/$(PackageId) @@ -18,4 +19,4 @@ - \ No newline at end of file + diff --git a/src/Plugins/StorageDumper/StorageDumper.csproj b/src/Plugins/StorageDumper/StorageDumper.csproj index 49d5362538..7805140f3e 100644 --- a/src/Plugins/StorageDumper/StorageDumper.csproj +++ b/src/Plugins/StorageDumper/StorageDumper.csproj @@ -5,6 +5,7 @@ Neo.Plugins.StorageDumper enable enable + $(SolutionDir)/bin/$(PackageId) diff --git a/src/Plugins/TokensTracker/TokensTracker.csproj b/src/Plugins/TokensTracker/TokensTracker.csproj index 7c3df5c0c6..bdacd3839c 100644 --- a/src/Plugins/TokensTracker/TokensTracker.csproj +++ b/src/Plugins/TokensTracker/TokensTracker.csproj @@ -1,8 +1,9 @@ - + net8.0 Neo.Plugins.TokensTracker + $(SolutionDir)/bin/$(PackageId) @@ -15,4 +16,4 @@ - \ No newline at end of file + diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index 7ba3905160..a2fc251365 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -7,6 +7,9 @@ false true 0 + true + TestResults/ + lcov