From 26e629b7db507a106123906e62d0855eda2f5b73 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 9 Jul 2025 02:58:20 +0000 Subject: [PATCH 1/5] Initial plan From e95850b3a9216e74739750476a5197153964f998 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 17 Jul 2025 01:16:31 +0000 Subject: [PATCH 2/5] Implement Central Package Management Co-authored-by: KyleMcMaster <11415127+KyleMcMaster@users.noreply.github.com> --- Directory.Packages.props | 22 ++ .../Microsoft.eShopWeb.Web.fsproj | 6 +- src/Microsoft.eShopWeb.Web/packages.lock.json | 244 ------------ tests/FShopOnWeb.Tests.fsproj | 12 +- tests/packages.lock.json | 367 ------------------ 5 files changed, 31 insertions(+), 620 deletions(-) create mode 100644 Directory.Packages.props delete mode 100644 src/Microsoft.eShopWeb.Web/packages.lock.json delete mode 100644 tests/packages.lock.json diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..fdc0e6a --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,22 @@ + + + + + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Microsoft.eShopWeb.Web/Microsoft.eShopWeb.Web.fsproj b/src/Microsoft.eShopWeb.Web/Microsoft.eShopWeb.Web.fsproj index fcaad0f..63c6d28 100644 --- a/src/Microsoft.eShopWeb.Web/Microsoft.eShopWeb.Web.fsproj +++ b/src/Microsoft.eShopWeb.Web/Microsoft.eShopWeb.Web.fsproj @@ -22,8 +22,8 @@ - - - + + + diff --git a/src/Microsoft.eShopWeb.Web/packages.lock.json b/src/Microsoft.eShopWeb.Web/packages.lock.json deleted file mode 100644 index b45c10f..0000000 --- a/src/Microsoft.eShopWeb.Web/packages.lock.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net9.0": { - "EntityFrameworkCore.FSharp": { - "type": "Direct", - "requested": "[6.0.7, )", - "resolved": "6.0.7", - "contentHash": "TeHeXBlrVjUC55q7YnWXieBSNVoHAagykATm2By6RBgn1DNxXtU9jazP0lJ3MigOaTygto4fR2TB9YbAAUYcFg==", - "dependencies": { - "FSharp.Core": "6.0.1", - "Microsoft.EntityFrameworkCore.Design": "6.0.0" - } - }, - "Falco": { - "type": "Direct", - "requested": "[4.0.6, )", - "resolved": "4.0.6", - "contentHash": "EbXhnwdalKEGVBwYctYmh1QpgWs/0zJ37CNtSWwt5mmj1Xk6bNTJhyU55ppiF3HFnXRia3iJEc4x6okWoNnx2Q==", - "dependencies": { - "FSharp.Core": "6.0.0", - "Falco.Markup": "1.0.2" - } - }, - "FSharp.Core": { - "type": "Direct", - "requested": "[9.0.300, )", - "resolved": "9.0.300", - "contentHash": "TVt2J7RCE1KCS2IaONF+p8/KIZ1eHNbW+7qmKF6hGoD4tXl+o07ja1mPtFjMqRa5uHMFaTrGTPn/m945WnDLiQ==" - }, - "Microsoft.EntityFrameworkCore.Sqlite": { - "type": "Direct", - "requested": "[9.0.6, )", - "resolved": "9.0.6", - "contentHash": "bVSdfFrqIo3ZeQfWYYfnVVanP1GWghkdw+MnEmZJz7jUwtdPQpBKHr0BW9dMizPamzU+SMA1Qu4nXuRTlKVAGQ==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Sqlite.Core": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyModel": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.6" - } - }, - "Falco.Markup": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "MbAUvgmPJc+JVawHwlPf4v3ql5E7BIUBkqvSi+6U6j2PDvBWbuB76u+O7ZLN86Jp9hbtaDNizO8L0AGRbAO20Q==", - "dependencies": { - "FSharp.Core": "4.5.2" - } - }, - "Humanizer.Core": { - "type": "Transitive", - "resolved": "2.8.26", - "contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A==" - }, - "Microsoft.Data.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "3auiudiViGzj1TidUdjuDqtP3+f6PBk4xdw6r9sBaTtkYoGc3AZn0cP8LgYZaLRnJBqY5bXRLB+qhjoB+iATzA==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "Microsoft.EntityFrameworkCore": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "r5hzM6Bhw4X3z28l5vmsaCPjk9VsQP4zaaY01THh1SAYjgTMVadYIvpNkCfmrv/Klks6aIf2A9eY7cpGZab/hg==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "9.0.6", - "Microsoft.EntityFrameworkCore.Analyzers": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" - } - }, - "Microsoft.EntityFrameworkCore.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "7MkhPK8emb8hfOx/mFVvHuIHxQ+mH2YdlK4sFUXgsGlvR0A44vsmd2wcHavZOTTzaKhN+aFUVy3zmkztKmTo+A==" - }, - "Microsoft.EntityFrameworkCore.Analyzers": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "VKggHNQC5FCn3/vooaIM/4aEjGmrmWm78IrdRLz9lLV0Rm9bVHEr/jiWApDkU0U9ec2xGAilvQqJ5mMX7QC2cw==" - }, - "Microsoft.EntityFrameworkCore.Design": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "RFdomymyuPNffl+VPk7osdxCJQ0xlGuxr28ifdfFFNUaMK0OYiJOjr6w9z3kscOM2p2gdPWNI1IFUXllEyphow==", - "dependencies": { - "Humanizer.Core": "2.8.26", - "Microsoft.EntityFrameworkCore.Relational": "6.0.0" - } - }, - "Microsoft.EntityFrameworkCore.Relational": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "Ht6OT17sYnO31Dx+hX72YHrc5kZt53g5napaw0FpyIekXCvb+gUVvufEG55Fa7taFm8ccy0Vzs+JVNR9NL0JlA==", - "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" - } - }, - "Microsoft.EntityFrameworkCore.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "xP+SvMDR/GZCDNXFw7z4WYbO2sYpECvht3+lqejg+Md8vLtURwTBvdsOUAnY4jBGmNFqHeh87hZSmUGmuxyqMA==", - "dependencies": { - "Microsoft.Data.Sqlite.Core": "9.0.6", - "Microsoft.EntityFrameworkCore.Relational": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyModel": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.6" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "bL/xQsVNrdVkzjP5yjX4ndkQ03H3+Bk3qPpl+AMCEJR2RkfgAYmoQ/xXffPV7is64+QHShnhA12YAaFmNbfM+A==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "qPW2d798tBPZcRmrlaBJqyChf2+0odDdE+0Lxvrr0ywkSNl1oNMK8AKrOfDwyXyjuLCv0ua7p6nrUExCeXhCcg==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging.Abstractions": "9.0.6", - "Microsoft.Extensions.Options": "9.0.6", - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "3GgMIi2jP8g1fBW93Z9b9Unamc0SIsgyhiCmC91gq4loTixK9vQMuxxUsfJ1kRGwn+/FqLKwOHqmn0oYWn3Fvw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "vS65HMo5RS10DD543fknsyVDxihMcVxVn3/hNaILgBxWYnOLxWIeCIO9X0QFuCvPRNjClvXe9Aj8KaQNx7vFkQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "0Zn6nR/6g+90MxskZyOOMPQvnPnrrGu6bytPwkV+azDcTtCSuQ1+GJUrg8Klmnrjk1i6zMpw2lXijl+tw7Q3kA==" - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "grVU1ixgMHp+kuhIgvEzhE73jXRY6XmxNBPWrotmbjB9AvJvkwHnIzm1JlOsPpyixFgnzreh/bFBMJAjveX+fQ==" - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "XBzjitTFaQhF8EbJ645vblZezV1p52ePTxKHoVkRidHF11Xkjxg94qr0Rvp2qyxK2vBJ4OIZ41NB15YUyxTGMQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.6", - "Microsoft.Extensions.Logging.Abstractions": "9.0.6", - "Microsoft.Extensions.Options": "9.0.6" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "LFnyBNK7WtFmKdnHu3v0HOYQ8BcjYuy0jdC9pgCJ/rbLKoJEG9/dBzSKMEeeWDbDeoWS0TIxOC8a9CM5ufca3A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "wUPhNM1zsI58Dy10xRdF2+pnsisiUuETg5ZBncyAEEUm/CQ9Q1vmivyUWH8RDbAlqyixf2dJNQ2XZb7HsKUEQw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6", - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "BHniU24QV67qp1pJknqYSofAPYGmijGI8D+ci9yfw33iuFdyOeB9lWTg78ThyYLyQwZw3s0vZ36VMb0MqbUuLw==" - }, - "SQLitePCLRaw.bundle_e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "UxWuisvZ3uVcVOLJQv7urM/JiQH+v3TmaJc1BLKl5Dxfm/nTzTUrqswCqg/INiYLi61AXnHo1M1JPmPqqLnAdg==", - "dependencies": { - "SQLitePCLRaw.lib.e_sqlite3": "2.1.10", - "SQLitePCLRaw.provider.e_sqlite3": "2.1.10" - } - }, - "SQLitePCLRaw.core": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", - "dependencies": { - "System.Memory": "4.5.3" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - }, - "SQLitePCLRaw.provider.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "uZVTi02C1SxqzgT0HqTWatIbWGb40iIkfc3FpFCpE/r7g6K0PqzDUeefL6P6HPhDtc6BacN3yQysfzP7ks+wSQ==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.3", - "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "h+ZtYTyTnTh5Ju6mHCKb3FPGx4ylJZgm9W7Y2psUnkhQRPMOIxX+TCN0ZgaR/+Yea+93XHWAaMzYTar1/EHIPg==" - } - } - } -} \ No newline at end of file diff --git a/tests/FShopOnWeb.Tests.fsproj b/tests/FShopOnWeb.Tests.fsproj index 88f719e..ec2efd0 100644 --- a/tests/FShopOnWeb.Tests.fsproj +++ b/tests/FShopOnWeb.Tests.fsproj @@ -12,12 +12,12 @@ - - - - - - + + + + + + diff --git a/tests/packages.lock.json b/tests/packages.lock.json deleted file mode 100644 index 1da65ff..0000000 --- a/tests/packages.lock.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "version": 1, - "dependencies": { - "net9.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.2, )", - "resolved": "6.0.2", - "contentHash": "bJShQ6uWRTQ100ZeyiMqcFlhP7WJ+bCuabUs885dJiBEzMsJMSFr7BOyeCw4rgvQokteGi5rKQTlkhfQPUXg2A==" - }, - "EntityFrameworkCore.FSharp": { - "type": "Direct", - "requested": "[6.0.7, )", - "resolved": "6.0.7", - "contentHash": "TeHeXBlrVjUC55q7YnWXieBSNVoHAagykATm2By6RBgn1DNxXtU9jazP0lJ3MigOaTygto4fR2TB9YbAAUYcFg==", - "dependencies": { - "FSharp.Core": "6.0.1", - "Microsoft.EntityFrameworkCore.Design": "6.0.0" - } - }, - "FSharp.Core": { - "type": "Direct", - "requested": "[9.0.300, )", - "resolved": "9.0.300", - "contentHash": "TVt2J7RCE1KCS2IaONF+p8/KIZ1eHNbW+7qmKF6hGoD4tXl+o07ja1mPtFjMqRa5uHMFaTrGTPn/m945WnDLiQ==" - }, - "Microsoft.EntityFrameworkCore.InMemory": { - "type": "Direct", - "requested": "[9.0.0, )", - "resolved": "9.0.0", - "contentHash": "Pm4NBnv3aB8O5bBNwWRkL4a/H+3WdgKRKYD93FkR9TrUNb0jfns9JVN5w9WEUsQCm0C69Eg2Y85i8pdmSfaNnQ==", - "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.0", - "Microsoft.Extensions.Caching.Memory": "9.0.0", - "Microsoft.Extensions.Logging": "9.0.0" - } - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[17.12.0, )", - "resolved": "17.12.0", - "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==", - "dependencies": { - "Microsoft.CodeCoverage": "17.12.0", - "Microsoft.TestPlatform.TestHost": "17.12.0" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.2, )", - "resolved": "2.9.2", - "contentHash": "7LhFS2N9Z6Xgg8aE5lY95cneYivRMfRI8v+4PATa4S64D5Z/Plkg0qa8dTRHSiGRgVZ/CL2gEfJDE5AUhOX+2Q==", - "dependencies": { - "xunit.analyzers": "1.16.0", - "xunit.assert": "2.9.2", - "xunit.core": "[2.9.2]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[2.8.2, )", - "resolved": "2.8.2", - "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==" - }, - "Falco": { - "type": "Transitive", - "resolved": "4.0.6", - "contentHash": "EbXhnwdalKEGVBwYctYmh1QpgWs/0zJ37CNtSWwt5mmj1Xk6bNTJhyU55ppiF3HFnXRia3iJEc4x6okWoNnx2Q==", - "dependencies": { - "FSharp.Core": "6.0.0", - "Falco.Markup": "1.0.2" - } - }, - "Falco.Markup": { - "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "MbAUvgmPJc+JVawHwlPf4v3ql5E7BIUBkqvSi+6U6j2PDvBWbuB76u+O7ZLN86Jp9hbtaDNizO8L0AGRbAO20Q==", - "dependencies": { - "FSharp.Core": "4.5.2" - } - }, - "Humanizer.Core": { - "type": "Transitive", - "resolved": "2.8.26", - "contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "17.12.0", - "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA==" - }, - "Microsoft.Data.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "3auiudiViGzj1TidUdjuDqtP3+f6PBk4xdw6r9sBaTtkYoGc3AZn0cP8LgYZaLRnJBqY5bXRLB+qhjoB+iATzA==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "Microsoft.EntityFrameworkCore": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "r5hzM6Bhw4X3z28l5vmsaCPjk9VsQP4zaaY01THh1SAYjgTMVadYIvpNkCfmrv/Klks6aIf2A9eY7cpGZab/hg==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "9.0.6", - "Microsoft.EntityFrameworkCore.Analyzers": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" - } - }, - "Microsoft.EntityFrameworkCore.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "7MkhPK8emb8hfOx/mFVvHuIHxQ+mH2YdlK4sFUXgsGlvR0A44vsmd2wcHavZOTTzaKhN+aFUVy3zmkztKmTo+A==" - }, - "Microsoft.EntityFrameworkCore.Analyzers": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "VKggHNQC5FCn3/vooaIM/4aEjGmrmWm78IrdRLz9lLV0Rm9bVHEr/jiWApDkU0U9ec2xGAilvQqJ5mMX7QC2cw==" - }, - "Microsoft.EntityFrameworkCore.Design": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "RFdomymyuPNffl+VPk7osdxCJQ0xlGuxr28ifdfFFNUaMK0OYiJOjr6w9z3kscOM2p2gdPWNI1IFUXllEyphow==", - "dependencies": { - "Humanizer.Core": "2.8.26", - "Microsoft.EntityFrameworkCore.Relational": "6.0.0" - } - }, - "Microsoft.EntityFrameworkCore.Relational": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "Ht6OT17sYnO31Dx+hX72YHrc5kZt53g5napaw0FpyIekXCvb+gUVvufEG55Fa7taFm8ccy0Vzs+JVNR9NL0JlA==", - "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6" - } - }, - "Microsoft.EntityFrameworkCore.Sqlite": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "bVSdfFrqIo3ZeQfWYYfnVVanP1GWghkdw+MnEmZJz7jUwtdPQpBKHr0BW9dMizPamzU+SMA1Qu4nXuRTlKVAGQ==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Sqlite.Core": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyModel": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.6" - } - }, - "Microsoft.EntityFrameworkCore.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "xP+SvMDR/GZCDNXFw7z4WYbO2sYpECvht3+lqejg+Md8vLtURwTBvdsOUAnY4jBGmNFqHeh87hZSmUGmuxyqMA==", - "dependencies": { - "Microsoft.Data.Sqlite.Core": "9.0.6", - "Microsoft.EntityFrameworkCore.Relational": "9.0.6", - "Microsoft.Extensions.Caching.Memory": "9.0.6", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyModel": "9.0.6", - "Microsoft.Extensions.Logging": "9.0.6", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.6" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "bL/xQsVNrdVkzjP5yjX4ndkQ03H3+Bk3qPpl+AMCEJR2RkfgAYmoQ/xXffPV7is64+QHShnhA12YAaFmNbfM+A==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "qPW2d798tBPZcRmrlaBJqyChf2+0odDdE+0Lxvrr0ywkSNl1oNMK8AKrOfDwyXyjuLCv0ua7p6nrUExCeXhCcg==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.6", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6", - "Microsoft.Extensions.Logging.Abstractions": "9.0.6", - "Microsoft.Extensions.Options": "9.0.6", - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "3GgMIi2jP8g1fBW93Z9b9Unamc0SIsgyhiCmC91gq4loTixK9vQMuxxUsfJ1kRGwn+/FqLKwOHqmn0oYWn3Fvw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "vS65HMo5RS10DD543fknsyVDxihMcVxVn3/hNaILgBxWYnOLxWIeCIO9X0QFuCvPRNjClvXe9Aj8KaQNx7vFkQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "0Zn6nR/6g+90MxskZyOOMPQvnPnrrGu6bytPwkV+azDcTtCSuQ1+GJUrg8Klmnrjk1i6zMpw2lXijl+tw7Q3kA==" - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "grVU1ixgMHp+kuhIgvEzhE73jXRY6XmxNBPWrotmbjB9AvJvkwHnIzm1JlOsPpyixFgnzreh/bFBMJAjveX+fQ==" - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "XBzjitTFaQhF8EbJ645vblZezV1p52ePTxKHoVkRidHF11Xkjxg94qr0Rvp2qyxK2vBJ4OIZ41NB15YUyxTGMQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.6", - "Microsoft.Extensions.Logging.Abstractions": "9.0.6", - "Microsoft.Extensions.Options": "9.0.6" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "LFnyBNK7WtFmKdnHu3v0HOYQ8BcjYuy0jdC9pgCJ/rbLKoJEG9/dBzSKMEeeWDbDeoWS0TIxOC8a9CM5ufca3A==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "wUPhNM1zsI58Dy10xRdF2+pnsisiUuETg5ZBncyAEEUm/CQ9Q1vmivyUWH8RDbAlqyixf2dJNQ2XZb7HsKUEQw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.6", - "Microsoft.Extensions.Primitives": "9.0.6" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "BHniU24QV67qp1pJknqYSofAPYGmijGI8D+ci9yfw33iuFdyOeB9lWTg78ThyYLyQwZw3s0vZ36VMb0MqbUuLw==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "17.12.0", - "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==", - "dependencies": { - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "17.12.0", - "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.12.0", - "Newtonsoft.Json": "13.0.1" - } - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.1", - "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" - }, - "SQLitePCLRaw.bundle_e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "UxWuisvZ3uVcVOLJQv7urM/JiQH+v3TmaJc1BLKl5Dxfm/nTzTUrqswCqg/INiYLi61AXnHo1M1JPmPqqLnAdg==", - "dependencies": { - "SQLitePCLRaw.lib.e_sqlite3": "2.1.10", - "SQLitePCLRaw.provider.e_sqlite3": "2.1.10" - } - }, - "SQLitePCLRaw.core": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", - "dependencies": { - "System.Memory": "4.5.3" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - }, - "SQLitePCLRaw.provider.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "uZVTi02C1SxqzgT0HqTWatIbWGb40iIkfc3FpFCpE/r7g6K0PqzDUeefL6P6HPhDtc6BacN3yQysfzP7ks+wSQ==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.3", - "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "9.0.6", - "contentHash": "h+ZtYTyTnTh5Ju6mHCKb3FPGx4ylJZgm9W7Y2psUnkhQRPMOIxX+TCN0ZgaR/+Yea+93XHWAaMzYTar1/EHIPg==" - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.16.0", - "contentHash": "hptYM7vGr46GUIgZt21YHO4rfuBAQS2eINbFo16CV/Dqq+24Tp+P5gDCACu1AbFfW4Sp/WRfDPSK8fmUUb8s0Q==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.2", - "contentHash": "QkNBAQG4pa66cholm28AxijBjrmki98/vsEh4Sx5iplzotvPgpiotcxqJQMRC8d7RV7nIT8ozh97957hDnZwsQ==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.2", - "contentHash": "O6RrNSdmZ0xgEn5kT927PNwog5vxTtKrWMihhhrT0Sg9jQ7iBDciYOwzBgP2krBEk5/GBXI18R1lKvmnxGcb4w==", - "dependencies": { - "xunit.extensibility.core": "[2.9.2]", - "xunit.extensibility.execution": "[2.9.2]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.2", - "contentHash": "Ol+KlBJz1x8BrdnhN2DeOuLrr1I/cTwtHCggL9BvYqFuVd/TUSzxNT5O0NxCIXth30bsKxgMfdqLTcORtM52yQ==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.2", - "contentHash": "rKMpq4GsIUIJibXuZoZ8lYp5EpROlnYaRpwu9Zr0sRZXE7JqJfEEbCsUriZqB+ByXCLFBJyjkTRULMdC+U566g==", - "dependencies": { - "xunit.extensibility.core": "[2.9.2]" - } - }, - "microsoft.eshopweb.web": { - "type": "Project", - "dependencies": { - "EntityFrameworkCore.FSharp": "[6.0.7, )", - "FSharp.Core": "[9.0.300, )", - "Falco": "[4.0.6, )", - "Microsoft.EntityFrameworkCore.Sqlite": "[9.0.6, )" - } - } - } - } -} \ No newline at end of file From 5fb439137cac9f12017c47595c3a713dfaaca053 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 17 Jul 2025 01:20:18 +0000 Subject: [PATCH 3/5] Add documentation and tests for Central Package Management Co-authored-by: KyleMcMaster <11415127+KyleMcMaster@users.noreply.github.com> --- README.md | 29 ++ src/Microsoft.eShopWeb.Web/packages.lock.json | 225 ++++++++++++ tests/CentralPackageManagementTests.fs | 35 ++ tests/FShopOnWeb.Tests.fsproj | 1 + tests/packages.lock.json | 347 ++++++++++++++++++ 5 files changed, 637 insertions(+) create mode 100644 src/Microsoft.eShopWeb.Web/packages.lock.json create mode 100644 tests/CentralPackageManagementTests.fs create mode 100644 tests/packages.lock.json diff --git a/README.md b/README.md index e82ae35..be17a1d 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,35 @@ This will add the SQLite Explorer tray under the File Explorer where you can ini ![SQLite Explorer](./images/sqlite-vscode-explorer-tray.jpg) +## Package Management + +This project uses [Central Package Management](https://docs.microsoft.com/en-us/nuget/consume-packages/central-package-management) to streamline dependency management and ensure consistent package versions across all projects. + +### How it works + +- Package versions are centrally defined in `Directory.Packages.props` +- Individual project files (`*.fsproj`) reference packages without version attributes +- All projects in the solution automatically use the centrally managed versions +- Lock files (`packages.lock.json`) ensure reproducible builds across different environments + +### Benefits + +- **Consistency**: All projects use the same package versions +- **Maintainability**: Update package versions in one place +- **Reduced conflicts**: Eliminates version mismatches between projects +- **Simplified updates**: Easier to upgrade packages across the entire solution + +### Adding new packages + +1. Add the package version to `Directory.Packages.props`: + ```xml + + ``` +2. Reference the package in your project file without a version: + ```xml + + ``` + ## Related Projects and Inspiration - [eShopOnWeb](https://github.com/dotnet-architecture/eShopOnWeb) diff --git a/src/Microsoft.eShopWeb.Web/packages.lock.json b/src/Microsoft.eShopWeb.Web/packages.lock.json new file mode 100644 index 0000000..e263667 --- /dev/null +++ b/src/Microsoft.eShopWeb.Web/packages.lock.json @@ -0,0 +1,225 @@ +{ + "version": 2, + "dependencies": { + "net8.0": { + "EntityFrameworkCore.FSharp": { + "type": "Direct", + "requested": "[6.0.7, )", + "resolved": "6.0.7", + "contentHash": "TeHeXBlrVjUC55q7YnWXieBSNVoHAagykATm2By6RBgn1DNxXtU9jazP0lJ3MigOaTygto4fR2TB9YbAAUYcFg==", + "dependencies": { + "FSharp.Core": "6.0.1", + "Microsoft.EntityFrameworkCore.Design": "6.0.0" + } + }, + "Falco": { + "type": "Direct", + "requested": "[4.0.6, )", + "resolved": "4.0.6", + "contentHash": "EbXhnwdalKEGVBwYctYmh1QpgWs/0zJ37CNtSWwt5mmj1Xk6bNTJhyU55ppiF3HFnXRia3iJEc4x6okWoNnx2Q==", + "dependencies": { + "FSharp.Core": "6.0.0", + "Falco.Markup": "1.0.2" + } + }, + "Microsoft.EntityFrameworkCore.Sqlite": { + "type": "Direct", + "requested": "[8.0.10, )", + "resolved": "8.0.10", + "contentHash": "inVXiKuOczjNVpLKG0nsnUmgL2m/bo6H/p4DCFVGRImJj6p9qrlwnU96A5FNZ56BF9VE1uZOULqgGTGTFVS19A==", + "dependencies": { + "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.10", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" + } + }, + "Falco.Markup": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "MbAUvgmPJc+JVawHwlPf4v3ql5E7BIUBkqvSi+6U6j2PDvBWbuB76u+O7ZLN86Jp9hbtaDNizO8L0AGRbAO20Q==", + "dependencies": { + "FSharp.Core": "4.5.2" + } + }, + "FSharp.Core": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "VrFAiW8dEEekk+0aqlbvMNZzDvYXmgWZwAt68AUBqaWK8RnoEVUNglj66bZzhs4/U63q0EfXlhcEKnH1sTYLjw==" + }, + "Humanizer.Core": { + "type": "Transitive", + "resolved": "2.8.26", + "contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A==" + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "i95bgLqp6rJzmhQEtGhVVHnk1nYAhr/pLDul676PnwI/d7uDSSGs2ZPU9aP0VOuppkZaNinQOUCrD7cstDbQiQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + } + }, + "Microsoft.EntityFrameworkCore": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", + "Microsoft.EntityFrameworkCore.Analyzers": "8.0.10", + "Microsoft.Extensions.Caching.Memory": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1" + } + }, + "Microsoft.EntityFrameworkCore.Abstractions": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==" + }, + "Microsoft.EntityFrameworkCore.Analyzers": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==" + }, + "Microsoft.EntityFrameworkCore.Design": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "RFdomymyuPNffl+VPk7osdxCJQ0xlGuxr28ifdfFFNUaMK0OYiJOjr6w9z3kscOM2p2gdPWNI1IFUXllEyphow==", + "dependencies": { + "Humanizer.Core": "2.8.26", + "Microsoft.EntityFrameworkCore.Relational": "6.0.0" + } + }, + "Microsoft.EntityFrameworkCore.Relational": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==", + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.EntityFrameworkCore.Sqlite.Core": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "dmpgFx5BPqw/jJmBh9gp0UJpCcNDvWnGMoc9XHwp4K0h9skBE6A8E7+AwSiz556iyVf8Gn/qxHF1cgX9ZqGiYQ==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "8.0.10", + "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Microsoft.Extensions.DependencyModel": "8.0.2" + } + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "BmAf6XWt4TqtowmiWe4/5rRot6GerAeklmOPfviOvwLoF5WwgxcJHAxZtySuyW9r9w+HLILnm8VfJFLCUJYW8A==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.6", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.6" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "wO6v9GeMx9CUngAet8hbO7xdm+M42p1XeJq47ogyRoYSvNSp0NGLI+MgC0bhrMk9C17MTVFlLiN6ylyExLCc5w==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "2ObJJLkIUIxRpOUlZNGuD4rICpBnrBR5anjyfUFQep4hMOIeqW+XGQYzrNmHSVz5xSWZ3klSbh7sFR6UyDj68Q==" + }, + "SQLitePCLRaw.provider.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "PQ2Oq3yepLY4P7ll145P3xtx2bX8xF4PzaKPRpw9jZlKvfe4LE/saAV82inND9usn1XRpmxXk7Lal3MTI+6CNg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + } + } + } +} \ No newline at end of file diff --git a/tests/CentralPackageManagementTests.fs b/tests/CentralPackageManagementTests.fs new file mode 100644 index 0000000..1c64e56 --- /dev/null +++ b/tests/CentralPackageManagementTests.fs @@ -0,0 +1,35 @@ +module CentralPackageManagementTests + +open Xunit +open System.IO + +[] +let ``Central Package Management - Directory.Packages.props exists`` () = + // This test verifies that Central Package Management is properly configured + let solutionRoot = Path.Combine(__SOURCE_DIRECTORY__, "..") + let centralPkgFile = Path.Combine(solutionRoot, "Directory.Packages.props") + Assert.True(File.Exists(centralPkgFile), "Directory.Packages.props should exist for Central Package Management") + +[] +let ``Central Package Management - Directory.Packages.props contains ManagePackageVersionsCentrally`` () = + // Verify the central package management is enabled + let solutionRoot = Path.Combine(__SOURCE_DIRECTORY__, "..") + let centralPkgFile = Path.Combine(solutionRoot, "Directory.Packages.props") + let content = File.ReadAllText(centralPkgFile) + Assert.Contains("ManagePackageVersionsCentrally", content) + Assert.Contains("true", content) + +[] +let ``Central Package Management - Project files do not contain Version attributes`` () = + // Verify project files use central package management (no version attributes) + let solutionRoot = Path.Combine(__SOURCE_DIRECTORY__, "..") + let webProject = Path.Combine(solutionRoot, "src", "Microsoft.eShopWeb.Web", "Microsoft.eShopWeb.Web.fsproj") + let testProject = Path.Combine(solutionRoot, "tests", "FShopOnWeb.Tests.fsproj") + + let webContent = File.ReadAllText(webProject) + let testContent = File.ReadAllText(testProject) + + // Should not contain Version attributes in PackageReference elements + Assert.DoesNotContain("PackageReference Include=\"EntityFrameworkCore.FSharp\" Version=", webContent) + Assert.DoesNotContain("PackageReference Include=\"Falco\" Version=", webContent) + Assert.DoesNotContain("PackageReference Include=\"xunit\" Version=", testContent) \ No newline at end of file diff --git a/tests/FShopOnWeb.Tests.fsproj b/tests/FShopOnWeb.Tests.fsproj index ec2efd0..010f798 100644 --- a/tests/FShopOnWeb.Tests.fsproj +++ b/tests/FShopOnWeb.Tests.fsproj @@ -8,6 +8,7 @@ + diff --git a/tests/packages.lock.json b/tests/packages.lock.json new file mode 100644 index 0000000..77e34f0 --- /dev/null +++ b/tests/packages.lock.json @@ -0,0 +1,347 @@ +{ + "version": 2, + "dependencies": { + "net8.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[6.0.2, )", + "resolved": "6.0.2", + "contentHash": "bJShQ6uWRTQ100ZeyiMqcFlhP7WJ+bCuabUs885dJiBEzMsJMSFr7BOyeCw4rgvQokteGi5rKQTlkhfQPUXg2A==" + }, + "EntityFrameworkCore.FSharp": { + "type": "Direct", + "requested": "[6.0.7, )", + "resolved": "6.0.7", + "contentHash": "TeHeXBlrVjUC55q7YnWXieBSNVoHAagykATm2By6RBgn1DNxXtU9jazP0lJ3MigOaTygto4fR2TB9YbAAUYcFg==", + "dependencies": { + "FSharp.Core": "6.0.1", + "Microsoft.EntityFrameworkCore.Design": "6.0.0" + } + }, + "Microsoft.EntityFrameworkCore.InMemory": { + "type": "Direct", + "requested": "[8.0.10, )", + "resolved": "8.0.10", + "contentHash": "TdtSEbBsMg8dFq5T1PiOv48w2oiiduNzaEf3Fa7tO2b3lTBFO1y1Dla6ihs628P53TowsScjLSG8g5ZEw6KN0Q==", + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.10" + } + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.12.0, )", + "resolved": "17.12.0", + "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==", + "dependencies": { + "Microsoft.CodeCoverage": "17.12.0", + "Microsoft.TestPlatform.TestHost": "17.12.0" + } + }, + "xunit": { + "type": "Direct", + "requested": "[2.9.2, )", + "resolved": "2.9.2", + "contentHash": "7LhFS2N9Z6Xgg8aE5lY95cneYivRMfRI8v+4PATa4S64D5Z/Plkg0qa8dTRHSiGRgVZ/CL2gEfJDE5AUhOX+2Q==", + "dependencies": { + "xunit.analyzers": "1.16.0", + "xunit.assert": "2.9.2", + "xunit.core": "[2.9.2]" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[2.8.2, )", + "resolved": "2.8.2", + "contentHash": "vm1tbfXhFmjFMUmS4M0J0ASXz3/U5XvXBa6DOQUL3fEz4Vt6YPhv+ESCarx6M6D+9kJkJYZKCNvJMas1+nVfmQ==" + }, + "Falco.Markup": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "MbAUvgmPJc+JVawHwlPf4v3ql5E7BIUBkqvSi+6U6j2PDvBWbuB76u+O7ZLN86Jp9hbtaDNizO8L0AGRbAO20Q==", + "dependencies": { + "FSharp.Core": "4.5.2" + } + }, + "FSharp.Core": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "VrFAiW8dEEekk+0aqlbvMNZzDvYXmgWZwAt68AUBqaWK8RnoEVUNglj66bZzhs4/U63q0EfXlhcEKnH1sTYLjw==" + }, + "Humanizer.Core": { + "type": "Transitive", + "resolved": "2.8.26", + "contentHash": "OiKusGL20vby4uDEswj2IgkdchC1yQ6rwbIkZDVBPIR6al2b7n3pC91elBul9q33KaBgRKhbZH3+2Ur4fnWx2A==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA==" + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "i95bgLqp6rJzmhQEtGhVVHnk1nYAhr/pLDul676PnwI/d7uDSSGs2ZPU9aP0VOuppkZaNinQOUCrD7cstDbQiQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + } + }, + "Microsoft.EntityFrameworkCore": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==", + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", + "Microsoft.EntityFrameworkCore.Analyzers": "8.0.10", + "Microsoft.Extensions.Caching.Memory": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1" + } + }, + "Microsoft.EntityFrameworkCore.Abstractions": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==" + }, + "Microsoft.EntityFrameworkCore.Analyzers": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==" + }, + "Microsoft.EntityFrameworkCore.Design": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "RFdomymyuPNffl+VPk7osdxCJQ0xlGuxr28ifdfFFNUaMK0OYiJOjr6w9z3kscOM2p2gdPWNI1IFUXllEyphow==", + "dependencies": { + "Humanizer.Core": "2.8.26", + "Microsoft.EntityFrameworkCore.Relational": "6.0.0" + } + }, + "Microsoft.EntityFrameworkCore.Relational": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==", + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.EntityFrameworkCore.Sqlite.Core": { + "type": "Transitive", + "resolved": "8.0.10", + "contentHash": "dmpgFx5BPqw/jJmBh9gp0UJpCcNDvWnGMoc9XHwp4K0h9skBE6A8E7+AwSiz556iyVf8Gn/qxHF1cgX9ZqGiYQ==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "8.0.10", + "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Microsoft.Extensions.DependencyModel": "8.0.2" + } + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==", + "dependencies": { + "System.Reflection.Metadata": "1.6.0" + } + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.12.0", + "Newtonsoft.Json": "13.0.1" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "BmAf6XWt4TqtowmiWe4/5rRot6GerAeklmOPfviOvwLoF5WwgxcJHAxZtySuyW9r9w+HLILnm8VfJFLCUJYW8A==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.6", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.6" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "wO6v9GeMx9CUngAet8hbO7xdm+M42p1XeJq47ogyRoYSvNSp0NGLI+MgC0bhrMk9C17MTVFlLiN6ylyExLCc5w==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "2ObJJLkIUIxRpOUlZNGuD4rICpBnrBR5anjyfUFQep4hMOIeqW+XGQYzrNmHSVz5xSWZ3klSbh7sFR6UyDj68Q==" + }, + "SQLitePCLRaw.provider.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.6", + "contentHash": "PQ2Oq3yepLY4P7ll145P3xtx2bX8xF4PzaKPRpw9jZlKvfe4LE/saAV82inND9usn1XRpmxXk7Lal3MTI+6CNg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.6" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.analyzers": { + "type": "Transitive", + "resolved": "1.16.0", + "contentHash": "hptYM7vGr46GUIgZt21YHO4rfuBAQS2eINbFo16CV/Dqq+24Tp+P5gDCACu1AbFfW4Sp/WRfDPSK8fmUUb8s0Q==" + }, + "xunit.assert": { + "type": "Transitive", + "resolved": "2.9.2", + "contentHash": "QkNBAQG4pa66cholm28AxijBjrmki98/vsEh4Sx5iplzotvPgpiotcxqJQMRC8d7RV7nIT8ozh97957hDnZwsQ==" + }, + "xunit.core": { + "type": "Transitive", + "resolved": "2.9.2", + "contentHash": "O6RrNSdmZ0xgEn5kT927PNwog5vxTtKrWMihhhrT0Sg9jQ7iBDciYOwzBgP2krBEk5/GBXI18R1lKvmnxGcb4w==", + "dependencies": { + "xunit.extensibility.core": "[2.9.2]", + "xunit.extensibility.execution": "[2.9.2]" + } + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.2", + "contentHash": "Ol+KlBJz1x8BrdnhN2DeOuLrr1I/cTwtHCggL9BvYqFuVd/TUSzxNT5O0NxCIXth30bsKxgMfdqLTcORtM52yQ==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.2", + "contentHash": "rKMpq4GsIUIJibXuZoZ8lYp5EpROlnYaRpwu9Zr0sRZXE7JqJfEEbCsUriZqB+ByXCLFBJyjkTRULMdC+U566g==", + "dependencies": { + "xunit.extensibility.core": "[2.9.2]" + } + }, + "microsoft.eshopweb.web": { + "type": "Project", + "dependencies": { + "EntityFrameworkCore.FSharp": "[6.0.7, )", + "Falco": "[4.0.6, )", + "Microsoft.EntityFrameworkCore.Sqlite": "[8.0.10, )" + } + }, + "Falco": { + "type": "CentralTransitive", + "requested": "[4.0.6, )", + "resolved": "4.0.6", + "contentHash": "EbXhnwdalKEGVBwYctYmh1QpgWs/0zJ37CNtSWwt5mmj1Xk6bNTJhyU55ppiF3HFnXRia3iJEc4x6okWoNnx2Q==", + "dependencies": { + "FSharp.Core": "6.0.0", + "Falco.Markup": "1.0.2" + } + }, + "Microsoft.EntityFrameworkCore.Sqlite": { + "type": "CentralTransitive", + "requested": "[8.0.10, )", + "resolved": "8.0.10", + "contentHash": "inVXiKuOczjNVpLKG0nsnUmgL2m/bo6H/p4DCFVGRImJj6p9qrlwnU96A5FNZ56BF9VE1uZOULqgGTGTFVS19A==", + "dependencies": { + "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.10", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" + } + } + } + } +} \ No newline at end of file From 8da2473bad6b3921752cfef807163e623167f40f Mon Sep 17 00:00:00 2001 From: Kyle McMaster Date: Fri, 18 Jul 2025 11:50:00 -0400 Subject: [PATCH 4/5] Fix packages and pack lock file issues --- Directory.Packages.props | 4 +- src/Microsoft.eShopWeb.Web/packages.lock.json | 44 +++---- tests/packages.lock.json | 118 +++++++++--------- 3 files changed, 84 insertions(+), 82 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index fdc0e6a..54b2ed9 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,8 +9,8 @@ - - + + diff --git a/src/Microsoft.eShopWeb.Web/packages.lock.json b/src/Microsoft.eShopWeb.Web/packages.lock.json index e263667..6174825 100644 --- a/src/Microsoft.eShopWeb.Web/packages.lock.json +++ b/src/Microsoft.eShopWeb.Web/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": { + "net9.0": { "EntityFrameworkCore.FSharp": { "type": "Direct", "requested": "[6.0.7, )", @@ -24,11 +24,11 @@ }, "Microsoft.EntityFrameworkCore.Sqlite": { "type": "Direct", - "requested": "[8.0.10, )", - "resolved": "8.0.10", - "contentHash": "inVXiKuOczjNVpLKG0nsnUmgL2m/bo6H/p4DCFVGRImJj6p9qrlwnU96A5FNZ56BF9VE1uZOULqgGTGTFVS19A==", + "requested": "[8.0.18, )", + "resolved": "8.0.18", + "contentHash": "sND0U4KRvbIoxQmPCfCj6crSCZsV7OhzX59vcD7N+GvlqcDWZkALQFGCaIgDLGhxO+IFtfmG0KhkVLQCbiZdKA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.10", + "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.18", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" } }, @@ -52,32 +52,32 @@ }, "Microsoft.Data.Sqlite.Core": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "i95bgLqp6rJzmhQEtGhVVHnk1nYAhr/pLDul676PnwI/d7uDSSGs2ZPU9aP0VOuppkZaNinQOUCrD7cstDbQiQ==", + "resolved": "8.0.18", + "contentHash": "Fw4JZz1MbcpmYzuyWI3FSgb8891AOIbDk1FLug8IWlxbiMUlvZilwv/NVIxnyUw/a/3moFQN/mXA3XHvGGSu2w==", "dependencies": { "SQLitePCLRaw.core": "2.1.6" } }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==", + "resolved": "8.0.18", + "contentHash": "LBc07vlgPxEXmjF0Kgn1S0mip3KLDPVD1OQOFu+4Mfpg1Z8OPMJ82MVCkqek1Ex2WeCzVGbNI9nRXcepHB+48g==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", - "Microsoft.EntityFrameworkCore.Analyzers": "8.0.10", + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.18", + "Microsoft.EntityFrameworkCore.Analyzers": "8.0.18", "Microsoft.Extensions.Caching.Memory": "8.0.1", "Microsoft.Extensions.Logging": "8.0.1" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==" + "resolved": "8.0.18", + "contentHash": "aQGpxj0/RKXhSqDFbWENQgOg6WQH3z5Dezu3VBXaTCBHE6hAWQIZmmqdpO1k+lkANsoCSwPJZ4iFRqPPZXBXzg==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==" + "resolved": "8.0.18", + "contentHash": "aYkyWRkb+o9++mtIWn5XSYPVND5N9mFFfvdmBX1s6kCss6XTaZsFXf8QjvaiXAcGblp/HoYzS5lusx0ZqeFxzQ==" }, "Microsoft.EntityFrameworkCore.Design": { "type": "Transitive", @@ -90,20 +90,20 @@ }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==", + "resolved": "8.0.18", + "contentHash": "SL067ITd6QfDF9wNsNtGm3fROpnv3SNrOY3Fjb+efEUnKn5NI0sUitrtpUim+t1DtCJIs7qgmyCPdD3zjSt4Xw==", "dependencies": { - "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.EntityFrameworkCore": "8.0.18", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.EntityFrameworkCore.Sqlite.Core": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "dmpgFx5BPqw/jJmBh9gp0UJpCcNDvWnGMoc9XHwp4K0h9skBE6A8E7+AwSiz556iyVf8Gn/qxHF1cgX9ZqGiYQ==", + "resolved": "8.0.18", + "contentHash": "1eHyHx2+l3hMrIBILJqNYmP4AnNfeE+D+E1bWrKqqnsLDKudTAeSmTJV2Q65Xd66jKYXQ0D1YWVRerggp9rt8A==", "dependencies": { - "Microsoft.Data.Sqlite.Core": "8.0.10", - "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Microsoft.Data.Sqlite.Core": "8.0.18", + "Microsoft.EntityFrameworkCore.Relational": "8.0.18", "Microsoft.Extensions.DependencyModel": "8.0.2" } }, diff --git a/tests/packages.lock.json b/tests/packages.lock.json index 77e34f0..dc646fd 100644 --- a/tests/packages.lock.json +++ b/tests/packages.lock.json @@ -1,7 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": { + "net9.0": { "coverlet.collector": { "type": "Direct", "requested": "[6.0.2, )", @@ -20,11 +20,13 @@ }, "Microsoft.EntityFrameworkCore.InMemory": { "type": "Direct", - "requested": "[8.0.10, )", - "resolved": "8.0.10", - "contentHash": "TdtSEbBsMg8dFq5T1PiOv48w2oiiduNzaEf3Fa7tO2b3lTBFO1y1Dla6ihs628P53TowsScjLSG8g5ZEw6KN0Q==", + "requested": "[9.0.0, )", + "resolved": "9.0.0", + "contentHash": "Pm4NBnv3aB8O5bBNwWRkL4a/H+3WdgKRKYD93FkR9TrUNb0jfns9JVN5w9WEUsQCm0C69Eg2Y85i8pdmSfaNnQ==", "dependencies": { - "Microsoft.EntityFrameworkCore": "8.0.10" + "Microsoft.EntityFrameworkCore": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" } }, "Microsoft.NET.Test.Sdk": { @@ -79,32 +81,32 @@ }, "Microsoft.Data.Sqlite.Core": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "i95bgLqp6rJzmhQEtGhVVHnk1nYAhr/pLDul676PnwI/d7uDSSGs2ZPU9aP0VOuppkZaNinQOUCrD7cstDbQiQ==", + "resolved": "8.0.18", + "contentHash": "Fw4JZz1MbcpmYzuyWI3FSgb8891AOIbDk1FLug8IWlxbiMUlvZilwv/NVIxnyUw/a/3moFQN/mXA3XHvGGSu2w==", "dependencies": { "SQLitePCLRaw.core": "2.1.6" } }, "Microsoft.EntityFrameworkCore": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==", + "resolved": "9.0.0", + "contentHash": "wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", - "Microsoft.EntityFrameworkCore.Analyzers": "8.0.10", - "Microsoft.Extensions.Caching.Memory": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1" + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.0", + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.0", + "Microsoft.Extensions.Caching.Memory": "9.0.0", + "Microsoft.Extensions.Logging": "9.0.0" } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==" + "resolved": "9.0.0", + "contentHash": "fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==" + "resolved": "9.0.0", + "contentHash": "Qje+DzXJOKiXF72SL0XxNlDtTkvWWvmwknuZtFahY5hIQpRKO59qnGuERIQ3qlzuq5x4bAJ8WMbgU5DLhBgeOQ==" }, "Microsoft.EntityFrameworkCore.Design": { "type": "Transitive", @@ -117,41 +119,41 @@ }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==", + "resolved": "8.0.18", + "contentHash": "SL067ITd6QfDF9wNsNtGm3fROpnv3SNrOY3Fjb+efEUnKn5NI0sUitrtpUim+t1DtCJIs7qgmyCPdD3zjSt4Xw==", "dependencies": { - "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.EntityFrameworkCore": "8.0.18", "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" } }, "Microsoft.EntityFrameworkCore.Sqlite.Core": { "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "dmpgFx5BPqw/jJmBh9gp0UJpCcNDvWnGMoc9XHwp4K0h9skBE6A8E7+AwSiz556iyVf8Gn/qxHF1cgX9ZqGiYQ==", + "resolved": "8.0.18", + "contentHash": "1eHyHx2+l3hMrIBILJqNYmP4AnNfeE+D+E1bWrKqqnsLDKudTAeSmTJV2Q65Xd66jKYXQ0D1YWVRerggp9rt8A==", "dependencies": { - "Microsoft.Data.Sqlite.Core": "8.0.10", - "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Microsoft.Data.Sqlite.Core": "8.0.18", + "Microsoft.EntityFrameworkCore.Relational": "8.0.18", "Microsoft.Extensions.DependencyModel": "8.0.2" } }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", + "resolved": "9.0.0", + "contentHash": "FPWZAa9c0H4dvOj351iR1jkUIs4u9ykL4Bm592yhjDyO5lCoWd+TMAHx2EMbarzUvCvgjWjJIoC6//Q9kH6YhA==", "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" + "Microsoft.Extensions.Primitives": "9.0.0" } }, "Microsoft.Extensions.Caching.Memory": { "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "resolved": "9.0.0", + "contentHash": "zbnPX/JQ0pETRSUG9fNPBvpIq42Aufvs15gGYyNIMhCun9yhmWihz0WgsI7bSDPjxWTKBf8oX/zv6v2uZ3W9OQ==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Primitives": "8.0.0" + "Microsoft.Extensions.Caching.Abstractions": "9.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { @@ -164,16 +166,16 @@ }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "resolved": "9.0.0", + "contentHash": "MCPrg7v3QgNMr0vX4vzRXvkNGgLg8vKWX0nKCWUxu2uPyMsaRgiRc1tHBnbTcfJMhMKj2slE/j2M9oGkd25DNw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + "resolved": "9.0.0", + "contentHash": "+6f2qv2a3dLwd5w6JanPIPs47CxRbnk+ZocMJUhv9NxP88VlOcJYZs9jY+MYSjxvady08bUZn6qgiNh7DadGgg==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", @@ -182,35 +184,35 @@ }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "resolved": "9.0.0", + "contentHash": "crjWyORoug0kK7RSNJBTeSE6VX8IQgLf3nUpTB9m62bPXp/tzbnOsnbe8TXEG0AASNaKZddnpHKw7fET8E++Pg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" + "Microsoft.Extensions.DependencyInjection": "9.0.0", + "Microsoft.Extensions.Logging.Abstractions": "9.0.0", + "Microsoft.Extensions.Options": "9.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "resolved": "9.0.0", + "contentHash": "g0UfujELzlLbHoVG8kPKVBaW470Ewi+jnptGS9KUi6jcb+k2StujtK3m26DFSGGwQ/+bVgZfsWqNzlP6YOejvw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "resolved": "9.0.0", + "contentHash": "y2146b3jrPI3Q0lokKXdKLpmXqakYbDIPDV6r3M8SqvSf45WwOTzkyfDpxnZXJsJQEpAsAqjUq5Pu8RCJMjubg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", + "Microsoft.Extensions.Primitives": "9.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + "resolved": "9.0.0", + "contentHash": "N3qEBzmLMYiASUlKxxFIISP4AiwuPTHF5uCh+2CWSwwzAJiIYx0kBJsS30cp1nvhSySFAVi30jecD307jV+8Kg==" }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", @@ -319,7 +321,7 @@ "dependencies": { "EntityFrameworkCore.FSharp": "[6.0.7, )", "Falco": "[4.0.6, )", - "Microsoft.EntityFrameworkCore.Sqlite": "[8.0.10, )" + "Microsoft.EntityFrameworkCore.Sqlite": "[8.0.18, )" } }, "Falco": { @@ -334,11 +336,11 @@ }, "Microsoft.EntityFrameworkCore.Sqlite": { "type": "CentralTransitive", - "requested": "[8.0.10, )", - "resolved": "8.0.10", - "contentHash": "inVXiKuOczjNVpLKG0nsnUmgL2m/bo6H/p4DCFVGRImJj6p9qrlwnU96A5FNZ56BF9VE1uZOULqgGTGTFVS19A==", + "requested": "[8.0.18, )", + "resolved": "8.0.18", + "contentHash": "sND0U4KRvbIoxQmPCfCj6crSCZsV7OhzX59vcD7N+GvlqcDWZkALQFGCaIgDLGhxO+IFtfmG0KhkVLQCbiZdKA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.10", + "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.18", "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6" } } From 8e5313df719920e981225f516ea09a5db1cb8b27 Mon Sep 17 00:00:00 2001 From: Kyle McMaster Date: Fri, 18 Jul 2025 11:50:50 -0400 Subject: [PATCH 5/5] Update README.md --- README.md | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/README.md b/README.md index be17a1d..e82ae35 100644 --- a/README.md +++ b/README.md @@ -50,35 +50,6 @@ This will add the SQLite Explorer tray under the File Explorer where you can ini ![SQLite Explorer](./images/sqlite-vscode-explorer-tray.jpg) -## Package Management - -This project uses [Central Package Management](https://docs.microsoft.com/en-us/nuget/consume-packages/central-package-management) to streamline dependency management and ensure consistent package versions across all projects. - -### How it works - -- Package versions are centrally defined in `Directory.Packages.props` -- Individual project files (`*.fsproj`) reference packages without version attributes -- All projects in the solution automatically use the centrally managed versions -- Lock files (`packages.lock.json`) ensure reproducible builds across different environments - -### Benefits - -- **Consistency**: All projects use the same package versions -- **Maintainability**: Update package versions in one place -- **Reduced conflicts**: Eliminates version mismatches between projects -- **Simplified updates**: Easier to upgrade packages across the entire solution - -### Adding new packages - -1. Add the package version to `Directory.Packages.props`: - ```xml - - ``` -2. Reference the package in your project file without a version: - ```xml - - ``` - ## Related Projects and Inspiration - [eShopOnWeb](https://github.com/dotnet-architecture/eShopOnWeb)