From 14409ddfff7f8ef8752f8b6554aa8362bd09d488 Mon Sep 17 00:00:00 2001 From: Allen <3340557+scegg@users.noreply.github.com> Date: Sat, 15 Aug 2026 17:20:41 +0800 Subject: [PATCH 1/2] Upgrade to .NET 10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moves from .NET Framework 4.8.1 to net10.0-windows, keeping Windows Forms. The database engine is deliberately untouched so that any breakage is unambiguously the framework change. The csproj becomes SDK-style, so files no longer have to be hand-listed. The six dlls committed under ImageStore/ are gone: upstream Shipwreck.Phash 0.5.0 turns out to expose the same GetCrossCorrelation overloads the fork was kept for, and the other four are part of the BCL on .NET 10. Assembly metadata moves into the csproj. That is not cosmetic — with GenerateAssemblyInfo disabled the SDK also omits SupportedOSPlatform("windows") for a -windows TFM, and every WinForms call then reports CA1416. System.Management.Automation is referenced with ExcludeAssets="runtime;native". Excluding only runtime still ships the host's native payload, including libpsl-native for Linux and macOS in a Windows-only module. Consequence: Windows PowerShell 5.1 can no longer load the module, since it runs on .NET Framework. v2026.08.15.2 remains the last release for 5.1 users. Also adds a pull_request trigger that builds without publishing, so a change this size can be verified before it reaches master. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/build-and-release.yml | 120 ++++--- ImageStore/Database/CompressDatabaseCmdlet.cs | 2 +- .../DatabaseShared/DatabaseConnection.cs | 2 +- .../DatabaseShared/WhereCauseBuilder.cs | 2 +- ImageStore/Extension/AddExtensionCmdlet.cs | 2 +- ImageStore/Extension/ExtensionHelper.cs | 2 +- ImageStore/Extension/FindExtensionCmdlet.cs | 2 +- ImageStore/Extension/GetExtensionCmdlet.cs | 2 +- ImageStore/Extension/RemoveExtensionCmdlet.cs | 2 +- ImageStore/Extension/SearchExtensionCmdlet.cs | 2 +- ImageStore/Extension/UpdateExtensionCmdlet.cs | 2 +- ImageStore/File/AddFileCmdlet.cs | 2 +- ImageStore/File/FileHelper.cs | 2 +- ImageStore/File/FindFileCmdlet.cs | 2 +- ImageStore/File/GetFileCmdlet.cs | 2 +- ImageStore/File/MeasureFileCmdlet.cs | 2 +- ImageStore/File/MeasureFileHelper.cs | 4 +- ImageStore/File/MeasureFilesCmdlet.cs | 2 +- ImageStore/File/MoveFileCmdlet.cs | 2 +- ImageStore/File/RemoveDirectoryCmdlet.cs | 2 +- ImageStore/File/RemoveFileCmdlet.cs | 2 +- ImageStore/File/RenameFileCmdlet.cs | 2 +- ImageStore/File/SearchFileCmdlet.cs | 2 +- ImageStore/File/UpdateFileCmdlet.cs | 2 +- ImageStore/Folder/AddFolderCmdlet.cs | 2 +- ImageStore/Folder/FindFolderCmdlet.cs | 2 +- ImageStore/Folder/FolderHelper.cs | 2 +- ImageStore/Folder/GetFolderCmdlet.cs | 2 +- ImageStore/Folder/RemoveFolderCmdlet.cs | 2 +- ImageStore/Folder/SearchFolderCmdlet.cs | 2 +- ImageStore/Folder/SyncFolderCmdlet.cs | 2 +- ImageStore/Folder/UpdateFolderCmdlet.cs | 2 +- .../AddIgnoredDirectoryCmdlet.cs | 2 +- .../FindIgnoredDirectoryCmdlet.cs | 2 +- .../GetIgnoredDirectoryCmdlet.cs | 2 +- .../IgnoredDirectoryHelper.cs | 2 +- .../RemoveIgnoredDirectoryCmdlet.cs | 2 +- .../SearchIgnoredDirectoryCmdlet.cs | 2 +- .../UpdateIgnoredDirectoryCmdlet.cs | 2 +- ImageStore/ImageStore.csproj | 310 +++--------------- ImageStore/Properties/AssemblyInfo.cs | 29 +- .../ClearSameFileObsoletedGroupsCmdlet.cs | 2 +- ImageStore/SameFile/CompareSameFilesCmdlet.cs | 2 +- ImageStore/SameFile/GetSameFileCmdlet.cs | 2 +- ImageStore/SameFile/HideSameFileCmdlet.cs | 2 +- ImageStore/SameFile/IgnoreSameFileHelper.cs | 2 +- ImageStore/SameFile/RemoveSameFileCmdlet.cs | 2 +- .../SameFile/RemoveSameFileGroupCmdlet.cs | 2 +- ImageStore/SameFile/SearchSameFileCmdlet.cs | 2 +- ImageStore/SameFile/SelectSameFileCmdlet.cs | 2 +- ImageStore/SameFile/ShowSameFileCmdlet.cs | 2 +- ImageStore/SameFile/UpdateSameFileCmdlet.cs | 2 +- ImageStore/Shipwreck.Phash.Bitmaps.dll | Bin 12800 -> 0 bytes ImageStore/Shipwreck.Phash.dll | Bin 23552 -> 0 bytes .../SimilarFile/CompareSimilarFileHelper.cs | 2 +- .../SimilarFile/CompareSimilarFilesCmdlet.cs | 2 +- ImageStore/SimilarFile/DoublePictureBox.cs | 2 + .../SimilarFile/GetSimilarFileCmdlet.cs | 2 +- .../SimilarFile/HideSimilarFileCmdlet.cs | 2 +- .../SimilarFile/IgnoreSimilarFileHelper.cs | 2 +- .../SimilarFile/RemoveSimilarFileCmdlet.cs | 2 +- .../SimilarFile/ResetSimilarFilesCmdlet.cs | 2 +- .../SimilarFile/ResolveSimilarFilesCmdlet.cs | 2 +- .../SimilarFile/SearchSimilarFileCmdlet.cs | 2 +- .../SetThumbprintCacheFolderCmdlet.cs | 9 +- .../SimilarFile/ShowSimilarFileCmdlet.cs | 2 +- ImageStore/SimilarFile/SimilarFileCheck.cs | 5 + .../SimilarFile/UpdateSimilarFileCmdlet.cs | 2 +- ImageStore/System.Buffers.dll | Bin 20856 -> 0 bytes ImageStore/System.Memory.dll | Bin 141184 -> 0 bytes ImageStore/System.Numerics.Vectors.dll | Bin 115856 -> 0 bytes ...System.Runtime.CompilerServices.Unsafe.dll | Bin 16768 -> 0 bytes 72 files changed, 198 insertions(+), 399 deletions(-) delete mode 100644 ImageStore/Shipwreck.Phash.Bitmaps.dll delete mode 100644 ImageStore/Shipwreck.Phash.dll delete mode 100644 ImageStore/System.Buffers.dll delete mode 100644 ImageStore/System.Memory.dll delete mode 100644 ImageStore/System.Numerics.Vectors.dll delete mode 100644 ImageStore/System.Runtime.CompilerServices.Unsafe.dll diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 30583de..c4906cf 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -3,6 +3,11 @@ name: Build and Release # Every push to master builds the module and publishes a release, tagged with # the build date. Pushing a v* tag by hand publishes under that tag instead. # +# A pull request runs the same build but stops short of publishing, which is +# how a risky change gets verified without leaving half-working commits on +# master. Nothing here can be built or tested on Linux, so CI is the only +# feedback available before merging. +# # This does not recurse. The tag created below is pushed with GITHUB_TOKEN, and # GitHub deliberately does not start a new workflow run for events raised by # that token — so "push to master -> create v* tag" does not re-enter the @@ -11,30 +16,35 @@ on: push: branches: [master] tags: ['v*'] + pull_request: + branches: [master] workflow_dispatch: # The date-based sequence number is derived from tags that already exist, so # two runs racing each other could pick the same number. Keep runs serialised # and let queued ones finish rather than cancelling them — every push is meant -# to produce its own release. +# to produce its own release. Pull requests get their own group per branch so +# that iterating on a PR does not queue up behind unrelated runs. concurrency: - group: build-and-release - cancel-in-progress: false + group: build-and-release-${{ github.event_name == 'pull_request' && github.ref || 'master' }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} permissions: contents: write # create tags and releases env: - SOLUTION: ImageStore.sln + PROJECT: ImageStore/ImageStore.csproj CONFIGURATION: Release - BUILD_OUTPUT: ImageStore\bin\Release + # dotnet publish, not build: it gathers the full runtime dependency set into + # one directory, which is what a PowerShell module folder has to contain. + BUILD_OUTPUT: publish # Date-based tags follow this timezone rather than the runner's UTC clock, so # a tag reads the same date the commit was authored in. TAG_TIMEZONE: China Standard Time jobs: build: - # .NET Framework 4.8.1 + Windows Forms — this cannot be built on Linux. + # net10.0-windows + Windows Forms — this cannot be built on Linux. runs-on: windows-latest steps: @@ -48,8 +58,17 @@ jobs: - name: Resolve version id: version shell: pwsh + env: + PR_NUMBER: ${{ github.event.pull_request.number }} run: | - if ($env:GITHUB_REF -like 'refs/tags/*') { + if ($env:GITHUB_EVENT_NAME -eq 'pull_request') { + # Never published, so it gets a name that cannot be mistaken for a + # release if the artifact is downloaded and passed around. + $tag = "pr$($env:PR_NUMBER)-$($env:GITHUB_SHA.Substring(0, 7))" + $tagExists = 'false' + Write-Host "Pull request build, not a release: $tag" + } + elseif ($env:GITHUB_REF -like 'refs/tags/*') { # A human pushed a tag — publish under it verbatim. $tag = $env:GITHUB_REF -replace '^refs/tags/', '' $tagExists = 'true' @@ -84,39 +103,33 @@ jobs: Add-Content -Path $env:GITHUB_OUTPUT -Value "tag=$tag" Add-Content -Path $env:GITHUB_OUTPUT -Value "tag_exists=$tagExists" - - name: Set up MSBuild - uses: microsoft/setup-msbuild@v3 - - - name: Set up NuGet - uses: nuget/setup-nuget@v4 - - - name: Restore NuGet packages - shell: pwsh - # Legacy csproj with a PackageReference (Microsoft.PowerShell.5.ReferenceAssemblies); - # restore has to run before msbuild. - run: nuget restore $env:SOLUTION + - name: Set up .NET + uses: actions/setup-dotnet@v6 + with: + dotnet-version: '10.0.x' - - name: Build + - name: Build and publish shell: pwsh run: | - msbuild $env:SOLUTION ` - /p:Configuration=$env:CONFIGURATION ` - '/p:Platform=Any CPU' ` - /m /nologo /verbosity:minimal + dotnet publish $env:PROJECT ` + --configuration $env:CONFIGURATION ` + --output $env:BUILD_OUTPUT ` + --nologo - name: Verify build output shell: pwsh run: | # Import-Module fails at load time if any of these is missing from the # module folder, so publishing without them would ship a broken release. + # The BCL packages the 4.8.1 build needed (System.Buffers, System.Memory, + # System.Numerics.Vectors, System.Runtime.CompilerServices.Unsafe) are + # part of the framework on .NET 10 and no longer appear here. $required = @( 'ImageStore.dll' + 'ImageStore.deps.json' 'Shipwreck.Phash.dll' 'Shipwreck.Phash.Bitmaps.dll' - 'System.Buffers.dll' - 'System.Memory.dll' - 'System.Numerics.Vectors.dll' - 'System.Runtime.CompilerServices.Unsafe.dll' + 'Microsoft.Data.SqlClient.dll' ) $missing = $required | Where-Object { -not (Test-Path (Join-Path $env:BUILD_OUTPUT $_)) } if ($missing) { @@ -124,19 +137,42 @@ jobs: exit 1 } - # And the opposite check. Reference assemblies have no method bodies - # and must never be shipped — the PowerShell host supplies the real - # System.Management.Automation at run time. ExcludeAssets=runtime in - # the csproj keeps it out of the output; this is the net that catches - # a regression there, since a merely-too-large zip looks fine. - $banned = @('System.Management.Automation.dll') - $leaked = $banned | Where-Object { Test-Path (Join-Path $env:BUILD_OUTPUT $_) } + # SqlClient's native SNI library lives in a runtimes\ subdirectory. A + # module missing it loads fine and then fails on the first connection, + # so check it separately from the flat files above. + if (-not (Get-ChildItem $env:BUILD_OUTPUT -Recurse -File -Filter 'Microsoft.Data.SqlClient.SNI.dll')) { + Write-Error "Native SNI library missing from $($env:BUILD_OUTPUT)\runtimes" + exit 1 + } + + # And the opposite check: nothing belonging to the PowerShell host may + # ship. System.Management.Automation.dll is a reference assembly with no + # method bodies, and the native payload beside it is the host's own + # (including Linux and macOS libraries, in a Windows-only module). + # ExcludeAssets="runtime;native" in the csproj keeps them out; this is + # the net for a regression, since an oversized package still looks fine. + # Recursive, because the native files sit under runtimes\\native. + $banned = @( + 'System.Management.Automation.dll' + 'pwrshplugin.dll' + 'PowerShell.Core.Instrumentation.dll' + 'libpsl-native.*' + 'getfilesiginforedist.dll' + ) + $leaked = $banned | + ForEach-Object { Get-ChildItem $env:BUILD_OUTPUT -Recurse -File -Filter $_ } | + Select-Object -ExpandProperty Name -Unique if ($leaked) { - Write-Error "Reference assembly leaked into $($env:BUILD_OUTPUT): $($leaked -join ', ')" + Write-Error "PowerShell host payload leaked into the package: $($leaked -join ', ')" exit 1 } - Get-ChildItem $env:BUILD_OUTPUT | Format-Table Name, Length, LastWriteTime + # Recursive: Microsoft.Data.SqlClient carries a native SNI library under + # runtimes\win-*\native, and that layout has to survive into the package. + Get-ChildItem $env:BUILD_OUTPUT -Recurse -File | + Select-Object @{n='Path';e={$_.FullName.Substring((Resolve-Path $env:BUILD_OUTPUT).Path.Length + 1)}}, Length | + Sort-Object Path | + Format-Table -AutoSize - name: Package id: package @@ -149,11 +185,16 @@ jobs: run: | $tag = $env:TAG - # The module: dlls only — the .pdb is not part of a release. + # The module: the whole publish output minus debug symbols. Copied + # wholesale rather than picking out *.dll, because the tree matters — + # ImageStore.deps.json drives dependency resolution, and SqlClient's + # native SNI library lives under runtimes\win-*\native. Flattening it + # produces a module that loads and then fails on first connect. $moduleStage = Join-Path $env:RUNNER_TEMP 'module' $moduleZip = "ImageStore-$tag.zip" New-Item -ItemType Directory -Path $moduleStage -Force | Out-Null - Copy-Item "$env:BUILD_OUTPUT\*.dll" -Destination $moduleStage + Copy-Item "$env:BUILD_OUTPUT\*" -Destination $moduleStage -Recurse -Force + Get-ChildItem $moduleStage -Recurse -Include '*.pdb' | Remove-Item -Force Compress-Archive -Path "$moduleStage\*" -DestinationPath $moduleZip -Force # The database: shipped as its own asset. It is a one-time download @@ -180,6 +221,9 @@ jobs: if-no-files-found: error - name: Publish release + # Pull requests stop here: they have proved the build and produced a + # downloadable artifact, which is the whole point of the PR run. + if: github.event_name != 'pull_request' shell: pwsh env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/ImageStore/Database/CompressDatabaseCmdlet.cs b/ImageStore/Database/CompressDatabaseCmdlet.cs index ff31091..3d9211b 100644 --- a/ImageStore/Database/CompressDatabaseCmdlet.cs +++ b/ImageStore/Database/CompressDatabaseCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/DatabaseShared/DatabaseConnection.cs b/ImageStore/DatabaseShared/DatabaseConnection.cs index 5513cb5..d1e05fd 100644 --- a/ImageStore/DatabaseShared/DatabaseConnection.cs +++ b/ImageStore/DatabaseShared/DatabaseConnection.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/DatabaseShared/WhereCauseBuilder.cs b/ImageStore/DatabaseShared/WhereCauseBuilder.cs index 5dd5e28..a9cf85c 100644 --- a/ImageStore/DatabaseShared/WhereCauseBuilder.cs +++ b/ImageStore/DatabaseShared/WhereCauseBuilder.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/Extension/AddExtensionCmdlet.cs b/ImageStore/Extension/AddExtensionCmdlet.cs index b0ad180..abf5c37 100644 --- a/ImageStore/Extension/AddExtensionCmdlet.cs +++ b/ImageStore/Extension/AddExtensionCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Extension/ExtensionHelper.cs b/ImageStore/Extension/ExtensionHelper.cs index d557b74..a346a83 100644 --- a/ImageStore/Extension/ExtensionHelper.cs +++ b/ImageStore/Extension/ExtensionHelper.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Extension; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/Extension/FindExtensionCmdlet.cs b/ImageStore/Extension/FindExtensionCmdlet.cs index bb6c8fe..7c4bbc6 100644 --- a/ImageStore/Extension/FindExtensionCmdlet.cs +++ b/ImageStore/Extension/FindExtensionCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Extension/GetExtensionCmdlet.cs b/ImageStore/Extension/GetExtensionCmdlet.cs index df6158f..d415780 100644 --- a/ImageStore/Extension/GetExtensionCmdlet.cs +++ b/ImageStore/Extension/GetExtensionCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Extension/RemoveExtensionCmdlet.cs b/ImageStore/Extension/RemoveExtensionCmdlet.cs index dc5ec4d..8e8e999 100644 --- a/ImageStore/Extension/RemoveExtensionCmdlet.cs +++ b/ImageStore/Extension/RemoveExtensionCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Management.Automation.Runspaces; diff --git a/ImageStore/Extension/SearchExtensionCmdlet.cs b/ImageStore/Extension/SearchExtensionCmdlet.cs index d4742b1..5aaa02f 100644 --- a/ImageStore/Extension/SearchExtensionCmdlet.cs +++ b/ImageStore/Extension/SearchExtensionCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.DatabaseShared; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Extension/UpdateExtensionCmdlet.cs b/ImageStore/Extension/UpdateExtensionCmdlet.cs index d547e7b..2cc076c 100644 --- a/ImageStore/Extension/UpdateExtensionCmdlet.cs +++ b/ImageStore/Extension/UpdateExtensionCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/AddFileCmdlet.cs b/ImageStore/File/AddFileCmdlet.cs index dbeb275..6367f42 100644 --- a/ImageStore/File/AddFileCmdlet.cs +++ b/ImageStore/File/AddFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/FileHelper.cs b/ImageStore/File/FileHelper.cs index 0b3e9e9..addad1b 100644 --- a/ImageStore/File/FileHelper.cs +++ b/ImageStore/File/FileHelper.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/File/FindFileCmdlet.cs b/ImageStore/File/FindFileCmdlet.cs index 80cf621..ab4b999 100644 --- a/ImageStore/File/FindFileCmdlet.cs +++ b/ImageStore/File/FindFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/GetFileCmdlet.cs b/ImageStore/File/GetFileCmdlet.cs index 3f74159..0778f45 100644 --- a/ImageStore/File/GetFileCmdlet.cs +++ b/ImageStore/File/GetFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/MeasureFileCmdlet.cs b/ImageStore/File/MeasureFileCmdlet.cs index f79fb8b..b6c3c51 100644 --- a/ImageStore/File/MeasureFileCmdlet.cs +++ b/ImageStore/File/MeasureFileCmdlet.cs @@ -3,7 +3,7 @@ using Shipwreck.Phash; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/MeasureFileHelper.cs b/ImageStore/File/MeasureFileHelper.cs index f30db67..557b0b9 100644 --- a/ImageStore/File/MeasureFileHelper.cs +++ b/ImageStore/File/MeasureFileHelper.cs @@ -14,7 +14,9 @@ namespace SecretNest.ImageStore.File { class MeasureFileHelper : IDisposable { - SHA1Managed sha1 = new SHA1Managed(); + //SHA1.Create() rather than new SHA1Managed(): the derived crypto types + //are obsolete on .NET 5+ (SYSLIB0021). Same algorithm, same output. + SHA1 sha1 = SHA1.Create(); byte[] ComputeSha1Hash(FileStream stream) { diff --git a/ImageStore/File/MeasureFilesCmdlet.cs b/ImageStore/File/MeasureFilesCmdlet.cs index 1b11447..fba40f5 100644 --- a/ImageStore/File/MeasureFilesCmdlet.cs +++ b/ImageStore/File/MeasureFilesCmdlet.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/MoveFileCmdlet.cs b/ImageStore/File/MoveFileCmdlet.cs index db77000..186509a 100644 --- a/ImageStore/File/MoveFileCmdlet.cs +++ b/ImageStore/File/MoveFileCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Folder; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/RemoveDirectoryCmdlet.cs b/ImageStore/File/RemoveDirectoryCmdlet.cs index 0519953..3c03971 100644 --- a/ImageStore/File/RemoveDirectoryCmdlet.cs +++ b/ImageStore/File/RemoveDirectoryCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Folder; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.IO; using System.Linq; using System.Management.Automation; diff --git a/ImageStore/File/RemoveFileCmdlet.cs b/ImageStore/File/RemoveFileCmdlet.cs index 36b860c..4eb3421 100644 --- a/ImageStore/File/RemoveFileCmdlet.cs +++ b/ImageStore/File/RemoveFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/RenameFileCmdlet.cs b/ImageStore/File/RenameFileCmdlet.cs index 214d5cc..8a105c9 100644 --- a/ImageStore/File/RenameFileCmdlet.cs +++ b/ImageStore/File/RenameFileCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Extension; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/SearchFileCmdlet.cs b/ImageStore/File/SearchFileCmdlet.cs index df582fe..fdbab20 100644 --- a/ImageStore/File/SearchFileCmdlet.cs +++ b/ImageStore/File/SearchFileCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.DatabaseShared; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/File/UpdateFileCmdlet.cs b/ImageStore/File/UpdateFileCmdlet.cs index bfb27eb..d1a03ec 100644 --- a/ImageStore/File/UpdateFileCmdlet.cs +++ b/ImageStore/File/UpdateFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Folder/AddFolderCmdlet.cs b/ImageStore/Folder/AddFolderCmdlet.cs index f9dad56..b6e1ab1 100644 --- a/ImageStore/Folder/AddFolderCmdlet.cs +++ b/ImageStore/Folder/AddFolderCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Folder/FindFolderCmdlet.cs b/ImageStore/Folder/FindFolderCmdlet.cs index 1a69cd4..3b1f965 100644 --- a/ImageStore/Folder/FindFolderCmdlet.cs +++ b/ImageStore/Folder/FindFolderCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Folder/FolderHelper.cs b/ImageStore/Folder/FolderHelper.cs index 817b549..deb9637 100644 --- a/ImageStore/Folder/FolderHelper.cs +++ b/ImageStore/Folder/FolderHelper.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Folder; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/Folder/GetFolderCmdlet.cs b/ImageStore/Folder/GetFolderCmdlet.cs index 6c46c68..ae32628 100644 --- a/ImageStore/Folder/GetFolderCmdlet.cs +++ b/ImageStore/Folder/GetFolderCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Folder/RemoveFolderCmdlet.cs b/ImageStore/Folder/RemoveFolderCmdlet.cs index 26b14c8..0cd0193 100644 --- a/ImageStore/Folder/RemoveFolderCmdlet.cs +++ b/ImageStore/Folder/RemoveFolderCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Management.Automation.Runspaces; diff --git a/ImageStore/Folder/SearchFolderCmdlet.cs b/ImageStore/Folder/SearchFolderCmdlet.cs index 9af3fd1..b24d616 100644 --- a/ImageStore/Folder/SearchFolderCmdlet.cs +++ b/ImageStore/Folder/SearchFolderCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.DatabaseShared; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Folder/SyncFolderCmdlet.cs b/ImageStore/Folder/SyncFolderCmdlet.cs index 88fbe92..4e1fecf 100644 --- a/ImageStore/Folder/SyncFolderCmdlet.cs +++ b/ImageStore/Folder/SyncFolderCmdlet.cs @@ -4,7 +4,7 @@ using SecretNest.ImageStore.IgnoredDirectory; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.IO; using System.Linq; using System.Management.Automation; diff --git a/ImageStore/Folder/UpdateFolderCmdlet.cs b/ImageStore/Folder/UpdateFolderCmdlet.cs index ab9b74b..85400b8 100644 --- a/ImageStore/Folder/UpdateFolderCmdlet.cs +++ b/ImageStore/Folder/UpdateFolderCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/AddIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/AddIgnoredDirectoryCmdlet.cs index 35b3711..c4f4d25 100644 --- a/ImageStore/IgnoredDirectory/AddIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/AddIgnoredDirectoryCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/FindIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/FindIgnoredDirectoryCmdlet.cs index dfe2fc2..ed6784c 100644 --- a/ImageStore/IgnoredDirectory/FindIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/FindIgnoredDirectoryCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/GetIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/GetIgnoredDirectoryCmdlet.cs index c64d0c0..9cf85ee 100644 --- a/ImageStore/IgnoredDirectory/GetIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/GetIgnoredDirectoryCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/IgnoredDirectoryHelper.cs b/ImageStore/IgnoredDirectory/IgnoredDirectoryHelper.cs index 6db74d9..dd222c6 100644 --- a/ImageStore/IgnoredDirectory/IgnoredDirectoryHelper.cs +++ b/ImageStore/IgnoredDirectory/IgnoredDirectoryHelper.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.IgnoredDirectory; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/IgnoredDirectory/RemoveIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/RemoveIgnoredDirectoryCmdlet.cs index 3dcfa7a..2dc6e77 100644 --- a/ImageStore/IgnoredDirectory/RemoveIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/RemoveIgnoredDirectoryCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/SearchIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/SearchIgnoredDirectoryCmdlet.cs index 9ba11d7..2d517a3 100644 --- a/ImageStore/IgnoredDirectory/SearchIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/SearchIgnoredDirectoryCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.DatabaseShared; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/IgnoredDirectory/UpdateIgnoredDirectoryCmdlet.cs b/ImageStore/IgnoredDirectory/UpdateIgnoredDirectoryCmdlet.cs index 59112a2..bacc2ba 100644 --- a/ImageStore/IgnoredDirectory/UpdateIgnoredDirectoryCmdlet.cs +++ b/ImageStore/IgnoredDirectory/UpdateIgnoredDirectoryCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/ImageStore.csproj b/ImageStore/ImageStore.csproj index 8085b5a..e5e5eec 100644 --- a/ImageStore/ImageStore.csproj +++ b/ImageStore/ImageStore.csproj @@ -1,276 +1,46 @@ - - - + + - Debug - AnyCPU - {8FA09B96-6FA3-4BBF-9E30-CC720D43C041} + net10.0-windows + true Library - Properties SecretNest.ImageStore ImageStore - v4.8.1 - 512 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - + + true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + + + + ImageStore + ImageStore + SecretNest.info + Copyright © SecretNest.info 2018 + 1.0.0.0 + 1.0.0.0 - - - False - .\Shipwreck.Phash.dll - - - False - .\Shipwreck.Phash.Bitmaps.dll - - - - False - .\System.Buffers.dll - - - - - False - .\System.Memory.dll - - - False - .\System.Numerics.Vectors.dll - - - False - .\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - - - - - - - - - - - - - - Component - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - - - - - - Form - - - SameFileManager.cs - - - - - - - - - - - - UserControl - - - DoublePictureBox.cs - - - - - - - - - - - - - - - - - - UserControl - - - SimilarFileCheck.cs - - - - Form - - - SimilarFileInGroupManager.cs - - - Form - - - SimilarFileOneManager.cs - - - Form - - - SimilarFilesManager.cs - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - SameFileManager.cs - - - DoublePictureBox.cs - - - SimilarFileCheck.cs - - - SimilarFileInGroupManager.cs - - - SimilarFileOneManager.cs - - - SimilarFilesManager.cs - - - - - 1.1.0 - - runtime - - - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/ImageStore/Properties/AssemblyInfo.cs b/ImageStore/Properties/AssemblyInfo.cs index 6f017d5..7ef64b8 100644 --- a/ImageStore/Properties/AssemblyInfo.cs +++ b/ImageStore/Properties/AssemblyInfo.cs @@ -1,18 +1,8 @@ -using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ImageStore")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("SecretNest.info")] -[assembly: AssemblyProduct("ImageStore")] -[assembly: AssemblyCopyright("Copyright © SecretNest.info 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] +// Titles, versions and copyright now live in ImageStore.csproj and are emitted +// by the SDK. Only the COM attributes remain here, because there are no MSBuild +// properties for them. // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from @@ -21,16 +11,3 @@ // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("8fa09b96-6fa3-4bbf-9e30-cc720d43c041")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ImageStore/SameFile/ClearSameFileObsoletedGroupsCmdlet.cs b/ImageStore/SameFile/ClearSameFileObsoletedGroupsCmdlet.cs index f0594d4..4b94c9f 100644 --- a/ImageStore/SameFile/ClearSameFileObsoletedGroupsCmdlet.cs +++ b/ImageStore/SameFile/ClearSameFileObsoletedGroupsCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/CompareSameFilesCmdlet.cs b/ImageStore/SameFile/CompareSameFilesCmdlet.cs index 627bc8d..16bb491 100644 --- a/ImageStore/SameFile/CompareSameFilesCmdlet.cs +++ b/ImageStore/SameFile/CompareSameFilesCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Runtime.InteropServices; diff --git a/ImageStore/SameFile/GetSameFileCmdlet.cs b/ImageStore/SameFile/GetSameFileCmdlet.cs index cd8faaf..4496054 100644 --- a/ImageStore/SameFile/GetSameFileCmdlet.cs +++ b/ImageStore/SameFile/GetSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/HideSameFileCmdlet.cs b/ImageStore/SameFile/HideSameFileCmdlet.cs index c851aa5..87b2e33 100644 --- a/ImageStore/SameFile/HideSameFileCmdlet.cs +++ b/ImageStore/SameFile/HideSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/IgnoreSameFileHelper.cs b/ImageStore/SameFile/IgnoreSameFileHelper.cs index 6680629..53eb9ef 100644 --- a/ImageStore/SameFile/IgnoreSameFileHelper.cs +++ b/ImageStore/SameFile/IgnoreSameFileHelper.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/SameFile/RemoveSameFileCmdlet.cs b/ImageStore/SameFile/RemoveSameFileCmdlet.cs index d6e0bdc..41f0ee9 100644 --- a/ImageStore/SameFile/RemoveSameFileCmdlet.cs +++ b/ImageStore/SameFile/RemoveSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/RemoveSameFileGroupCmdlet.cs b/ImageStore/SameFile/RemoveSameFileGroupCmdlet.cs index 7cd4d6d..93579af 100644 --- a/ImageStore/SameFile/RemoveSameFileGroupCmdlet.cs +++ b/ImageStore/SameFile/RemoveSameFileGroupCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/SearchSameFileCmdlet.cs b/ImageStore/SameFile/SearchSameFileCmdlet.cs index 870668c..49343de 100644 --- a/ImageStore/SameFile/SearchSameFileCmdlet.cs +++ b/ImageStore/SameFile/SearchSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/SelectSameFileCmdlet.cs b/ImageStore/SameFile/SelectSameFileCmdlet.cs index 8e4ad0b..7ce269a 100644 --- a/ImageStore/SameFile/SelectSameFileCmdlet.cs +++ b/ImageStore/SameFile/SelectSameFileCmdlet.cs @@ -3,7 +3,7 @@ using SecretNest.ImageStore.Folder; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Drawing; using System.Linq; using System.Management.Automation; diff --git a/ImageStore/SameFile/ShowSameFileCmdlet.cs b/ImageStore/SameFile/ShowSameFileCmdlet.cs index 4f277aa..b113da3 100644 --- a/ImageStore/SameFile/ShowSameFileCmdlet.cs +++ b/ImageStore/SameFile/ShowSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SameFile/UpdateSameFileCmdlet.cs b/ImageStore/SameFile/UpdateSameFileCmdlet.cs index 135a091..1988c82 100644 --- a/ImageStore/SameFile/UpdateSameFileCmdlet.cs +++ b/ImageStore/SameFile/UpdateSameFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/Shipwreck.Phash.Bitmaps.dll b/ImageStore/Shipwreck.Phash.Bitmaps.dll deleted file mode 100644 index b9b2664e9b0b5fa28f3a2b627244f095bbbada17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12800 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 diff --git a/ImageStore/Shipwreck.Phash.dll b/ImageStore/Shipwreck.Phash.dll deleted file mode 100644 index bfc626606569d4fadd19c71dc3358c80b9e71dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 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 diff --git a/ImageStore/SimilarFile/CompareSimilarFileHelper.cs b/ImageStore/SimilarFile/CompareSimilarFileHelper.cs index 5b340a1..cb298fd 100644 --- a/ImageStore/SimilarFile/CompareSimilarFileHelper.cs +++ b/ImageStore/SimilarFile/CompareSimilarFileHelper.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Management.Automation.Runspaces; diff --git a/ImageStore/SimilarFile/CompareSimilarFilesCmdlet.cs b/ImageStore/SimilarFile/CompareSimilarFilesCmdlet.cs index bf77067..d2c388f 100644 --- a/ImageStore/SimilarFile/CompareSimilarFilesCmdlet.cs +++ b/ImageStore/SimilarFile/CompareSimilarFilesCmdlet.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/DoublePictureBox.cs b/ImageStore/SimilarFile/DoublePictureBox.cs index 443b47d..7b073e0 100644 --- a/ImageStore/SimilarFile/DoublePictureBox.cs +++ b/ImageStore/SimilarFile/DoublePictureBox.cs @@ -17,6 +17,8 @@ internal partial class DoublePictureBox : UserControl Guid loadedFileId1, loadedFileId2; bool _autoResizePictures; + //See the note in SimilarFileCheck: set from code, not the designer (WFO1000). + [DefaultValue(false)] public bool AutoResizePictures { get => _autoResizePictures; diff --git a/ImageStore/SimilarFile/GetSimilarFileCmdlet.cs b/ImageStore/SimilarFile/GetSimilarFileCmdlet.cs index ae64430..0d280c5 100644 --- a/ImageStore/SimilarFile/GetSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/GetSimilarFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/HideSimilarFileCmdlet.cs b/ImageStore/SimilarFile/HideSimilarFileCmdlet.cs index c981838..a0388e3 100644 --- a/ImageStore/SimilarFile/HideSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/HideSimilarFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/IgnoreSimilarFileHelper.cs b/ImageStore/SimilarFile/IgnoreSimilarFileHelper.cs index 6cedc6c..65c493c 100644 --- a/ImageStore/SimilarFile/IgnoreSimilarFileHelper.cs +++ b/ImageStore/SimilarFile/IgnoreSimilarFileHelper.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/ImageStore/SimilarFile/RemoveSimilarFileCmdlet.cs b/ImageStore/SimilarFile/RemoveSimilarFileCmdlet.cs index 123c337..9d5ab41 100644 --- a/ImageStore/SimilarFile/RemoveSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/RemoveSimilarFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/ResetSimilarFilesCmdlet.cs b/ImageStore/SimilarFile/ResetSimilarFilesCmdlet.cs index 6dbe612..1bd2295 100644 --- a/ImageStore/SimilarFile/ResetSimilarFilesCmdlet.cs +++ b/ImageStore/SimilarFile/ResetSimilarFilesCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.Folder; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/ResolveSimilarFilesCmdlet.cs b/ImageStore/SimilarFile/ResolveSimilarFilesCmdlet.cs index 6c709d8..14eb402 100644 --- a/ImageStore/SimilarFile/ResolveSimilarFilesCmdlet.cs +++ b/ImageStore/SimilarFile/ResolveSimilarFilesCmdlet.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; diff --git a/ImageStore/SimilarFile/SearchSimilarFileCmdlet.cs b/ImageStore/SimilarFile/SearchSimilarFileCmdlet.cs index 74b0235..9c4a198 100644 --- a/ImageStore/SimilarFile/SearchSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/SearchSimilarFileCmdlet.cs @@ -1,7 +1,7 @@ using SecretNest.ImageStore.DatabaseShared; using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/SetThumbprintCacheFolderCmdlet.cs b/ImageStore/SimilarFile/SetThumbprintCacheFolderCmdlet.cs index 2be9839..d1702c2 100644 --- a/ImageStore/SimilarFile/SetThumbprintCacheFolderCmdlet.cs +++ b/ImageStore/SimilarFile/SetThumbprintCacheFolderCmdlet.cs @@ -3,7 +3,6 @@ using System.IO; using System.Linq; using System.Management.Automation; -using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -18,10 +17,10 @@ public class SetThumbprintCacheFolderCmdlet : Cmdlet protected override void ProcessRecord() { - Assembly assembly = typeof(SetThumbprintCacheFolderCmdlet).Assembly; - var path = new Uri(assembly.CodeBase).LocalPath; - var assemblyFolder = System.IO.Path.GetDirectoryName(path); - LoadImageHelper.cachePath = System.IO.Path.Combine(assemblyFolder, Path); + //Assembly.CodeBase is obsolete on .NET 5+ and throws for single-file + //publishes. AppContext.BaseDirectory gives the module folder directly, + //without the Uri round-trip. + LoadImageHelper.cachePath = System.IO.Path.Combine(AppContext.BaseDirectory, Path); Directory.CreateDirectory(LoadImageHelper.cachePath); } } diff --git a/ImageStore/SimilarFile/ShowSimilarFileCmdlet.cs b/ImageStore/SimilarFile/ShowSimilarFileCmdlet.cs index 3b4ea36..02d4343 100644 --- a/ImageStore/SimilarFile/ShowSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/ShowSimilarFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/SimilarFile/SimilarFileCheck.cs b/ImageStore/SimilarFile/SimilarFileCheck.cs index 98020bc..55e926a 100644 --- a/ImageStore/SimilarFile/SimilarFileCheck.cs +++ b/ImageStore/SimilarFile/SimilarFileCheck.cs @@ -12,12 +12,17 @@ namespace SecretNest.ImageStore.SimilarFile { internal partial class SimilarFileCheck : UserControl { + //DefaultValue tells the WinForms designer these need no serialization + //unless changed from the default (WFO1000). They are set from code, not + //the designer. + [DefaultValue(false)] public bool AutoResizePictures { get => doublePictureBox1.AutoResizePictures; set => doublePictureBox1.AutoResizePictures = value; } + [DefaultValue(false)] public bool AutoMoveNext { get; set; } public SimilarFileCheck() diff --git a/ImageStore/SimilarFile/UpdateSimilarFileCmdlet.cs b/ImageStore/SimilarFile/UpdateSimilarFileCmdlet.cs index 98550da..fd55e48 100644 --- a/ImageStore/SimilarFile/UpdateSimilarFileCmdlet.cs +++ b/ImageStore/SimilarFile/UpdateSimilarFileCmdlet.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Data.SqlClient; +using Microsoft.Data.SqlClient; using System.Linq; using System.Management.Automation; using System.Text; diff --git a/ImageStore/System.Buffers.dll b/ImageStore/System.Buffers.dll deleted file mode 100644 index f2d83c51416e90dbc31154545b16df3b3f7a7909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20856 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 VSA1A~Xq)uh0^wu(F;p2s{|B2kf;9jD diff --git a/ImageStore/System.Memory.dll b/ImageStore/System.Memory.dll deleted file mode 100644 index 5d1947056f1c1dd2d48561cf721f615bb8dc0d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141184 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�cyw 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 diff --git a/ImageStore/System.Numerics.Vectors.dll b/ImageStore/System.Numerics.Vectors.dll deleted file mode 100644 index 08659724d4f8534ee97a543e93dd6d3c702fcd15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115856 zcmeFad0<_|c{eFC<>BFUC5+gxnfc*C{~1{>ReS&bKvWm1rBVGGNWkz@h{ zr_P(LY1|S*;0-Bh$U;feG;NkPdqNUQNM1q$Nt>i0RLM(7($9TE+N5pLCV79q=ggTi zbME!M7Yp%ye|&~J^DMu4X3m^BGtV<;(UpB~Q3<6~62IU5PN`2I=f91TR!&Yp-8lDC zjp}3Bug&{J?250=+jVGgtn=vT$idP6Bc1#EhlfYTJNFHAjvgEC931Z4a`n#6BO?a} zmgV!g1={rXtx8=HOQ^(!|J4`NHlgNs*2k7Bb!!Y2_|i|^3%V2ZgUFR?7CP>?n*z39 z{!Ks+`Id|0IIfMaCzSt(xn_N|x(Rl#CJnnk$!Q_8H^kIiEYfz-{B;A328hLMO+HcH93tmAY}+=-B9f2&HXkqcr9=a%h~7wnxx{APZ8J~V%zuTld(XJ9X+l15W%}1`JNLU9>7|VHG)bXD&iN2V@zL@>$nSM6Q&u05s8#BKz-h?rO z;pVldJ25@v?(ATKPDoDFLo^56L_;RMXU5)}2lLYl$#0+!+N9IJfsqvxsyG*@?#zrr za@~4ZvmiJ*C6E~|1gFe_%!HL+;7}|pIFb?wMuiQ*Q96*>u<{`nf*vS=yxE1IcWg-A zoI-NRVXGnNwi5m2mLA>a=+TNLODsLciKD0edR`T&u}*a19a%5A*B_$^buCUh&b=4^ z?Q{&)w&J^h>Ny6|vKKi6E92qWt4~klS{s%WQkmYwNuINZ2;PyI(c6$I&O>D@f7Cir zzt}PsIalkoF|;mONP5YMd~2a@No&@t3krSC}ZY zv=*kpa*H?Zn{!N?S!%a84VI^Q(?ZJy+j3;g2bSSkBnzz``fhq_VFoNu_hwj@S!%a8 z1D0oaGeXO)w&lpx5?J0y%d@;$6NQ+CpMnJks! zIxHharDddOa~UaCjxtiL8)c-JK*~t5UX+ny1t=rM{8L5>hqjCqPDdFjypS?dbYU4O zRcViBgKVLMv9fU zj1)_887Y?JGEywTWu#bD%1AN&myyE3C?kby;dH+{q4#_k3#il4)E{3EH6_x8Wu=SC zO3x}QEtZv@T~>;9)IA(&!xBjCi`iX8N)Lzn<6KjmgB0n~veIQ`rRS8DE-x!xQC7OL ztaKHm_Tfa9u02kxsXWeAtW_iqf*AA7(xz0IuM0#Pw4i_cM6?Xf8%Hv$s96KW2R91RXS?T6T zo$eyn-R)SX^7xjh9g%LOokj6PYY|s`ZgF9GQr(K_AG3PkYbKV~GrCKS;o{HTk!)Sr zkoe=ly4ml5J6(r$t~jh-onx7+LBwbsxQlw+ZsF+&9p5hF_<9{qEu11E9x!XE zt&CfwuKcINaZ=9I(F&GshdX3J`F(B#T$>Y;HjU0uuE251_} zmdQhtFRN*U#=S}dYfaEJm6pNjn`=7>oc+SZs>eEgGIh@L=1mkjy-w%!`7>r`$?4Pb zlGCT+7idaP zU!W;HeWJnXn`fUst}NE+`;qa$@07Kv%j=pb%=hLyr_W!F=HoQES6?8P9TN8f)T&vc za<4(Hnk_2#GSsRzQMp&5R<(=Dy%@EsLsahdC@OS8m)!+i`O0^Jtep$Jg%gDZ-U6o! z{MB+nNf!iisoU)Wtt!_AT2-zKw5nVeXjQo`(5iA>AS!ghLc0sNGKXEzeY>9KWnn+d zJ8Pn_$XnzbzrU0(!jq*dkGBr3G&Y`aa7NFi_%#dTQXEtx1R_7*#B@|}gnm_gir5;?3d zv8_kqhrqgc4NJYH6NPTC+p+HZ3Ed^uMGosrZR=d|%k-x>4Ci>~Oca)R%N*;zi?FPu zKefDEe`-~^{uCA3bdKGoNYrtW?Ov?#R!kI@d&`|R`3}YMk|P#5tgrB65o`|lvB-B3 zIbbg-h()XoYA$nDcdSU{Qpw(&ZU7paY{*R1x8|2Lq_e%LZ0{vIvNL+~S$`MrRO>{8 zeHffsEn6EC+~Q957Ici}2N5YRHBqQ*Eu@#Ucy(U7*GnR~c!!t9{vbB5eaqNJFQjbK zoUts^+Y;QwPI7uFWOQQ}@QMgGsb>ZrzL)VgtG7km`hP+lj$6+u!L6ggYw+u6&~?a6 zh^=UN>#c>RB{RLe*ThD^)tCIzon8};qseRXkArnI+Q-35+^qv!)Je_-g=Src%r-4v z%S6FzEfi3P=M@O>n*IFpU0wloU;{d=qs6X+m#kX{HlqDHrs+Cl_6RqcXNm{TI;LU6 z8Tn5;bsaJrU^^M!bZemv$1%%mBLJ?rRPW0b-+ak>zHrX5xKf?99TyE<5-~U z*ut@k#Rcn8YvC-^vCun9j$?tJUwxf-7V5wn6xOk5v2~McO+0Z6H{_4=PNRSEFCqm$ zrht3l4`VL^yT)G0CPXTUU5J%!qnC5P0dqkrDfH!+Sq`!-HG3k#`kOf;w`g^^pgq~1%l-o@!jPd%O3yTG*58^?qbR_FVS z&P4R>X%*+8y@_$$5NP9Mw6Ksvl{sBy7FFh2@8YzjZ<=ApA?elka<+)$E?HQs@25F; z&%QOS;>?6val@glfaz&rp%Jw<>RR)twXyXsPGow9>hkhQuSwV1WYy}sM$Tk~S}V;} zs1>8AjoS|k3oWR%Mc3+~)|S@0IJN0Hs|(u^UZIy)NgUHuc&x-krZ3c5Y4$>`7>jMZ zm$tCbidtKBt?0&`L(i{uhE=QY-Z=NoP-~_647FnOt&Nk~!oqCS zI$PH|3$@N}y^GVIp4Ym(SxK+0mse{XQ(1VdzR%-Kaj3P@42N2=NVjpCTUeNbTIc9m zJ5cMK*1I?%>Y1(!I}F}jUF%${R^JzLCOySv`oh~fQN3HX9t@BXp{MNfT zMe4b)%bS<bLI4=G+&V~yMi%{_*UGYLxyr}gq&YOBd z?D7^Sy|eV;o@G@m4v#xGqT)sN^y_*!J(%fGF()H>&cSrVY2xf9xnMq`XPxZzC+An; z;F3GQ&%k^k&jP#(+o>X%X(VWeNM;!cZ#A;iY$HLPB55;{td_JJ32!g5RELr9)*>Zy zj09JqNDy}i4dOjTg68Io2;rhZ(Uv~zgu&?I@qOh-d z$50A}eT_Q?=<7-gQO`H9(Cf7b(UH3rEk$RWwFm)}xU_mCFM#Qt5MkQn!sHKcgbgB` zX$#>_h;WuI0a%vc9-sR z(JZrcpX;3~9=PrU#wxoZLbJGz`yIpkn!78n*r-fa>^0sRcg0?d%FK$r)>~^=#-L?4 zL{4SA`H9LZE!606S*X`}>)eI92bGzHy2tCWJDkzWwGcTSzDWz64(AP0BApK3Oku^9 zy!#rxjIa0ByUX}_XqH*V&-2c+`(O*~UI&rW2U{uR>Mb$LyW$8~7_&&ob51hRdQPi^ zC!TgoG2XALjE?QvTADgqD=2OI@bC z>>^~n>;z+z1h4GNPZC;Ep3ZTZ^1M*_I3M;%yquK3OuD_KJl)(fY8?{rm34t+^%b@szl) zO))<&V!6w)aB4q-m>FW&TB+coY7s^SR(?`Er+aYOAADwG0CmB6`?)2XCm2kXqhSvp2+K0I? zRFSj~b5W=wX%6$OP)^buCY@cMA0`(f zZIGmWnDm^rillv*^q;kgq&ZBw&{|H?945VJEhlLXb44g8X%3UVw8oP(he>x@%SlEL zlPh32mv-;hmoOJgU5ccs{oGJa($u~tl#?{IuMOoSqqRqt+MsqWwYqkaruLptPSVuA zK9rL*wVxNtNk(hO6>J~-Dt+u+sCDfmjkOJ-oMhA*F8XrTxNK`{B#kw?w^~jzYK<#% zne(zSEJf1v%%)II()7$lp`4_teRC)$8Lb`5pj~^=GjsuTn@JjLTSGZXv1U00T=#Fm zYKKJv?x|GXo(kb$>oZl#;$t~+tT&=?%21STVq%t zoYv!J-NKZ!jZQ=%*^(^cD%IAkP4#a&*4+87dmZ0TDW>9h7X{Od-j*k(kZMU4acOIN z?i(v#cTBo-3r(iQqFqsvT_RRxg3b~eC5fe&a5{F%Y zQ|#YFaZN@pPMEA0llE3UF@=Vfh9c&oz@)Qr@0yHUaWI(|lXa;Ol58skZ`IDK%dDb-(i0g2fmJy=~ z<-~M-%b@A@mJw&mi|Ou`LDSVOBW@@!ri)t!P4~8pnBHv}F`e5oV$3k*#F(|piRsze zM(hB^oq(M4LBH0Tb%OJO66M60SIUVoH#Up@*Gf4t{nj$=rq5bN zOn9?Vmhm3#Pn6mi0P`@V*7l!Q+Us(;IalCzktQUSvwHZNi8E@R9;N~ zv<#Z=X&EuS(=uW@r)9+SO>MD#T<$vJ92Y%PYv~A%i(Y9NF+I{UVmhQ{#PmnYi0O`& z5z`wjBc?NIi|ylzEM~tKw4Sc0wRi<$%$McFYs!n)M#Of-ktNSmypCnUB`&DAr@VN5 zdGUD>v0X72J^ZhAk`;E{{RQbUJOZy-Z#lAH}N8ZV}#dUY&|(LMLDxlX)zW9KlJ- zjo_5z7NycUpWEq|315Vsv1jEMQ*rTNX6&hGW9|ih+0+P5ng9NLQhg0e9IEs8&3ewk znK|wH-@RFCnfPr}4sP^WsdR6X@;%F@n4cGM((MOIEKmBW)ELgL^Awo7nuXRI;8&lO z$-=ttWH!b8+_KK1_VaO1WlF5Ob946&zwI->``e~MlCJi0JUCIu-Qp&tUGAosCaj8R zWvADK4DcxE4$qH z*1zoKO1d#JTj|Q?@W}AedLETEczNz{G^{>xr-NoA2)&OS1{M_)i?EqK7uKQcd1KxIB*RYohgvCpC)(u;^7{;j`wj$$=;{sg>x6fNJ3*s0>jM3posy7Brwce3}Xy!ha@n} zTnqyajUfpPGZ(|?Lt{t+!_37n6ww%xz%X+$j7v0zBrwce41*MnAqfmK7sH4}V@LwS z%*8N#(HN4zFmo}CWi*B)Fw9&G0~?JY2@EqAWfnnxiumA)YlE5%?F_^al3`t;^xfo2h z0frjM3Fg(*3lE5%?F`XfXBrwce3A~q3-4CZQMfuZL$X&sk>J*JZU`aSdz`5YSrbA?_8w>ILe_>5 zlD)^7uKQyw?$#NnqgS!H>q09ed*$m2ZbdyIgkZC2qD>foT&>rFNBcnJ}6J-)wMe zL0A<)NcJ9Qx~|~Xf=kb;rRS|BBV}V~g=FvHrT+G%GLlPKf-ZV^C5_`Y2u`N1c3S-;QI((3+ zjBUe;xWG+uY#Ua_rC^F<+pscDno}IxhLv&3o8s6utc(-Z6vwtjM3Fp|}F zNCLym#pFT^Nnn_{7)G+%4oP5`xfn*W8bcBoW-f-2tj3T8hM9|DB&#tbfnnxi7|Ci3 zNnn_{7)G)hLlPKfF2)NnB!OY(Vp>8BNnn_{7)G+XE|S17n`~^mr-s-T7_2Li=3oH` znnMy8W^R))ZwDBXz%X+$m~I0MNnn_{7|fCZh9oe|Tnr|+07DWOW-bPEQh*@|3^NzQ zNLF_jL0G9y{t%_M;72@EqA!$?-!Aqfn#$;P&OYKU!tsT$h?Q#G~)rfO^pOx4&Hm=z`6 zvoh=+lE5%?yO5Er?n08lFq>>_yQg|=yQg|=yQg|=yXPf|ZTD1R`O!q_&nKE<(ZSkcQ6+lH0B46$uk*~<{yhLybxv29q{%Mja!mAwqHZCKgM z5Zi{8AxwOkV%xqNVq0LU#HMRw&YHSNk)z}u8sZg!%rCjT7|H5OkR&k7CL7!K)ezePQ#G~)rfO^pOx4&Hn5wZYFjZq)V5-Kp zz`PW(ZC?$sEihGMTVSfjw!l=4ZGov8+X7QHwgskYYzxdw5!?1vk8S&^$F_adW81!$ zB)09V9^3X+k8S&^$F_Zwk8S&^$F_Zwk8S&^$F_YhNo?C!Lu?C7)z}soIE@hxhLNnE zVo3tS?95}^z8Yd%VC>iy-_V2ig%w@D%b!n-p$)ls5%+;}i(6Dpj~l9z#|^{p+`%=0 zL!QK+2g9%I;k#3+*SueC)LG>+v;HGq`H_|-B!npJZ|WBA@?}ono!~nF*>QbDvhDU#n4H0 zG2*s5bom3YiZmWZ#lj>r`ZFMko zQeBL=tqw+R$vFKiZmWZlTQUwt+*Su8w`3fQxUCL`PO94;aa$b>om3YiZmWaoD#1`v zi`(j$SrD4x?iO4(O5EW?Csj8`V<>SkbW&Z6xUEiIbW&Z6xUCL`PO6I$x7ESWNp&&e zwmKL(sV;^Rx6O1?T}-WRt5a2XXoh=saNQ_ztD=*ttI`;8TOB)eQeBL=tqz7xs*4e~ z)xpq7bur?$Iv6^sE=Jr|2SX>-#faPLVCbZ}m|ERd$BaB~=wCS8iPUbZ135RW$%jzj zcJi7igaQ|`HVUDjmd6d9wyX=Sa4%E4tq!Co3ZcMl%lasU0vB>#6hcAO#|@o^oFAIN zB#X9E;MTGs3ZbCtom3YiZmWZ#lj>q9sqD5o2DXF-;M2tdx7ERHEx}MCfB&|`XN`-`nm7ZWReRs) zj%3`w&fwU@T%T2A>Pj$_=yRzt^iW+pl(-mrs4m9xS+yN{s4m9xSv7_ps*ACFR*j*D z>S8RPRb%L(x){r6)fjrHF2?d%HHIFli?MuGjiHC?Vl1CkW9Xr}7|UnX7<#BK#`0M; zh90Vmp~O8G^iW-l<+Ex#^iW;Qi}P8v8G5MNjP^$@pH*Y%p}H7K+$O`*h+rsjF<43? z7)o3WJyf?YN?Z&*R2M^ui=l_=VkmJj^iW+4B`$^@s*ACFR^31JP+g4WvuX@IR2O6U ztQtcP)x}sotH#hnbupIDsxkCXU5w?kY79M87i0OX8bc4&#k@G5RhwB5n!%We_^cYU zumnSidn)Lm>gH%Wl(-mrs4m9xS#@3XP+g4WvuX@IR2O6UtQtcP)x}sotH#hnbull_ zXVqrtp=vX@WFkJR#?V7`F_zD&G4xPfjODXx3_VmAWBIHaLl4!(SU#)9&_i`Gl(?sh z9;%D6d{%9T9;%CZaXzayL!VWf@f}hM+}6-Vbs!YDkTp>V1uldxs$+$M+I?2tT>7lq z3MMz#XVnn8s1Aezw=Hy09S8+3gf6NBp`b>eRX2n#sy2a1*7aF6gf6NBc@aLVHbECv zo4_>f`m7p47uA8hIGv$X_6iTJE9^|v2jcnY5(3a!HdnacNL!iu=kO!50MVP%}#r}+Jturkhq zQ~Z8RSQ+QADSkgDtc;V;6u%!6R>rw#ir*Z za-X$96N5WdB!OY(Vi?BiiI5~P%v=n^SdAeG3^NzQFjiwo0>jM3FpSk0lE5%?F$`lh zh9oe|TnxiljUfq)1h&riGZ@Bd3`t;^xpo-FY79wWn7J5+u^K}X7-lYpVXVfG1csT5 zVHm41B!OY(Vi?A13`t;^xfq7A8bcBoW|MtCW^WD85CJ2Bt<%j|0D|U_1csU0WX#(E zh9oe|TnxileOM%cVdi2mO9mK{z%X+$nA`#kNnn_{7|cllh9oe|Tnxil-5!#_NMP$6 zJHuFwAqfmK*ABy2jUfq)1h$SHhOrt$5*TK#9fq+QLlPKfE{0*O#*hStnTufj zVdi2O#%c^nV3^f%GsZbA2DaJ^$-Ol^Lj=r1K;7mn3hj^thM9|D7^~|d2@EqA!!TB3 zNCLym#W0N37?Qv+b1@8KHHIWG%v=n^SdAeG4716;AG5cHXNZ82z}7hx3}bb3NCLym zZ8F1HjUfpPGZ(`!R%1v4!_37njMW&Dz%X+$3}ZEhBrwce48vHBAqfn#$-W4zA-eu0d4_0j^=F9oR)2wNeTzw--D+-+-8(*%r_rJ)t_g8Owzi#`=SHow*183Vfgcdcag#UMDmf`!JmqFBu z@6fN&!)5GpVhnes!(HWYS3BHxhr7n%b~xNlhuh_FyUEG7PJY*<6g*G;9nTF(=QB4R z!nyFPJmHr%Px~EDEahE}lmBDpSP4Qk%SQ%mfROWn$zlQI4?)1OC8h*!fMTPHpN@dB`n=$qfO{5~5 zIgeHUkf&Xne8_V}g%5dJwIMD+ZO-TWAFKW)&ujf-ldrGJmpoTj_>!m8mPSyb6b=tT zPAama^QG!v^X#)aQ@-Z8uEN(mrNVkdIQ~CWil`|S+1dI0X};>2#vhlmzSrbVB0aao z`6aUQAM{*irVjmKPx~QTf1Trojs^4gcQh;&u9ze(7+F&(+7~RWBrOnPS}?N4T4M+!X~D=E z7*>kF8c7RA*1(!W7)c98*1#|<0&65K7+C{r31K8H7+C`=gfNm8jBLxav1_^FS)-D7 z1Hz@v9hH2XL3bNT-x!x1{Vh=4yWIHEFp?IGtZ5qeel(1v1tV)BrO6{%s+PTz7MX0F~$cc^q?f^8>0uRcb;_bo*TkQS}?N4+L{nX(t?pS zu(ctKqy-~e<_It~p7sdVg~mww#^~1S%_w~YJt2&w1tV*kwmyWBv|wZn?7R?0(t?pK za|D)k3{<%J=R zq>UqArb+~G2Qj@NvgBGV_ELMX`ylp+JYD1?%XKq)fN%^{Rz1WHkv zBZ7Zw9Z~m9#@d$98p&lPKDqw9sqV|IA)I6xIK@E&tgrD;!Ct_1Q@R%rTE|s8m3skU zMYy=8dM_ZX442hZ?*)XFaVDPPy@0SXPMTA^7a)~|Q`{8q1z5Gs#j#ECUVzl*%xY7- z7a$du%sW%Q7qGIny#NbVCsUiA2{EGv9tTMaM%K))jQF)kMHeEf`q?n-{`JS}?K(#)x0Hjid!5YhaA{HH@SMBOAD6)(#a$ zgyj?VRN4#hjnO};xEEl-7TQf)6gG{d1tV*YfDykw0+JSttbsA&*D#V6jI4n%;@2>e z7L2TcG2+)Sk`|1tfidFOFp?IGY?>59jqC;Z#^{h$+zYT^mG%NGSf#xH3sz|_ zz=BoU3$S37_5v(erM&30X++KPJt7OY3=)Sk-v&>Be#M%Ik*^FkO&3r4og2*-3_9l`1M0@j9(a>cy> z8@Hi+mAFRASIG?k-D4zI`c=|fuDBOq<1Q>;<%`%0Sm}7p$1CjxM4*-S0wT~#djS#X zB=-VVmiXiq_X5hmU%tJ7-YMM+2(9C)oyxs{up(SsQ@s}uR)))Js`moI$~Y5G@m@e! z87Ivt-V2b*!YOWw_X4ciIJ-^pUVzl*%xY7-7a$du%sW%Q7qGmxy#NbVX)nNnRoV-% zV3qa)ELf$z01H-WFTjFT+6%B?mG%NGSf#xH3sz|_z=BoU3$S37_5v(erM&qiJuwawl3-FC`$*H&(V8JTw1z503djS@#(q4cCn<EU$4dz{XuzzRDM|7qHy%nvYl73y44~?FB@jmG%N6&`ItE zEHClNEA9o9fuCkCU~5ih<1Trysa;W1?&$@gdy>eKL_ z;e~kC<~DpedvwI(_OqGp&Ud$~grU=yoL!=ncXoRIAnv@^06)yOvDJSx`nOGdui@-e zy0=NCi&%N|XDI~zdt^yH#KeBH;p?d}3?Jv=Qg?H?`!e7D%(4A~&!SQV%iNnVr#_&q~>qPh?6efx~7WgnoQo9w<+?7V4I)@RDBLH)pdVug

A56h=o3u)Ar^3va&BemI`C*}HC8>xqw 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 P)6yq*$X=&d&4~X8FD<25 diff --git a/ImageStore/System.Runtime.CompilerServices.Unsafe.dll b/ImageStore/System.Runtime.CompilerServices.Unsafe.dll deleted file mode 100644 index de9e12447827d55c3995c3ea6b26f8ef50d1eb65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16768 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 Date: Sat, 15 Aug 2026 17:26:16 +0800 Subject: [PATCH 2/2] Update documentation for .NET 10 README gains a requirements section and switches to pwsh. The minimum is PowerShell 7.6, not just "7 or later": 7.6 is the first release built on .NET 10, and an older pwsh cannot load a net10.0 assembly. Also documents that the two window-opening cmdlets need STA, which pwsh provides by default but VS Code's Integrated Console does not, and that the archive has to be unpacked as a whole because the module now ships with its dependency tree. Drops the fork attribution for phash. CLAUDE.md is rewritten where it went stale: the rule about hand-adding files to the csproj is gone with the legacy project format, and the claim that this cannot be built on Linux was wrong enough to matter -- EnableWindowsTargeting builds and publishes fine there, which is how the native-payload leak was caught. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 101 +++++++++++++++++++++++++++++++----------------------- README.md | 18 +++++++--- 2 files changed, 73 insertions(+), 46 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 48b872d..eafff49 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -17,39 +17,50 @@ Duplicate detection has two independent pipelines: - **Same File** — byte-identical files, detected via SHA-1 (`SameFile` table). - **Similar File** — visually similar images, detected via pHash - ([Shipwreck.Phash](https://github.com/scegg/phash), a fork of pgrho/phash) (`SimilarFile` table). + ([Shipwreck.Phash](https://github.com/pgrho/phash)) (`SimilarFile` table). ## Build and toolchain | | | |---|---| -| Target | .NET Framework **4.8.1**, `AnyCPU`, `OutputType=Library` | -| UI | Windows Forms (`System.Windows.Forms`, `System.Drawing`) | -| Project style | **Legacy (non-SDK) csproj**, ToolsVersion 15.0 | -| Build | Visual Studio 2017+ or `msbuild ImageStore.sln` on **Windows** | +| Target | `net10.0-windows`, `OutputType=Library` | +| UI | Windows Forms (`UseWindowsForms`) | +| Project style | SDK-style csproj (`Microsoft.NET.Sdk`) | +| Build | `dotnet build` / `dotnet publish ImageStore/ImageStore.csproj -c Release` | +| Host | **PowerShell 7.6+** only. 7.6 is the first release built on .NET 10; Windows PowerShell 5.1 cannot load the module at all. | | Root namespace | `SecretNest.ImageStore` (assembly name `ImageStore`) | | Tests | None. There is no test project. | -| CI | `.github/workflows/build-and-release.yml` — builds on `windows-latest` and publishes a release on every push to `master`. | +| CI | `.github/workflows/build-and-release.yml` — builds on `windows-latest`, publishes a release on every push to `master`, builds without publishing on pull requests. | -**The project cannot be built on Linux/macOS.** `dotnet build` will not work — this is a legacy -csproj targeting .NET Framework with WinForms. On a non-Windows machine, restrict work to source -edits, review, and documentation; do not claim a change compiles unless it was actually built on -Windows. +**It builds on Linux**, which is worth knowing because the WinForms target suggests otherwise: -**Adding or removing a source file requires editing `ImageStore/ImageStore.csproj` by hand.** -Legacy csproj has no glob includes. A new `.cs` file that is not listed in a `` -item is silently excluded from the build. WinForms files need the matching structure too: - -```xml -Form -MyForm.cs -MyForm.cs ``` +dotnet build ImageStore/ImageStore.csproj -c Release -p:EnableWindowsTargeting=true +dotnet publish ImageStore/ImageStore.csproj -c Release -o /tmp/out -p:EnableWindowsTargeting=true +``` + +That compiles and produces a complete publish tree, so compile errors, analyzer errors and the +exact package contents can all be checked locally. It cannot be *run* there — use it to verify +the build, then rely on CI or a Windows box for anything behavioural. + +Dependencies come from NuGet; nothing is committed to the repo: -Third-party assemblies (`Shipwreck.Phash*.dll`, `System.Memory.dll`, `System.Buffers.dll`, -`System.Numerics.Vectors.dll`, `System.Runtime.CompilerServices.Unsafe.dll`) are **committed to the -repo** under `ImageStore/` and referenced by `HintPath`, not by NuGet. Only -`Microsoft.PowerShell.5.ReferenceAssemblies` comes from a `PackageReference`. +| Package | Note | +|---|---| +| `Shipwreck.Phash`, `Shipwreck.Phash.Bitmaps` | Upstream. A fork used to be vendored here for extra `GetCrossCorrelation` overloads; upstream 0.5.0 has them. | +| `Microsoft.Data.SqlClient` | Replaces `System.Data.SqlClient`, which has no .NET 10 story. | +| `System.Management.Automation` | `ExcludeAssets="runtime;native"` — see below. | + +**`ExcludeAssets` on `System.Management.Automation` must keep both `runtime` and `native`.** +The PowerShell host supplies that assembly at run time, and the package's managed dll is a +reference assembly with no method bodies. Excluding only `runtime` still drags the host's *native* +payload into the output — `pwrshplugin.dll`, `PowerShell.Core.Instrumentation.dll`, and +`libpsl-native.so`/`.dylib` for Linux and macOS, in a Windows-only module. That mistake costs +~36 files and is invisible unless the package is opened. + +Use `dotnet publish`, not `dotnet build`, when producing something to ship: the module needs its +full dependency closure, `ImageStore.deps.json`, and `runtimes/win-*/native/Microsoft.Data.SqlClient.SNI.dll`. +A package missing SNI loads fine and then fails on the first database connection. ## Repository layout @@ -98,7 +109,9 @@ one connection is reused for the whole operation. Neither setting survives a Pow ### ADO.NET conventions -Raw `System.Data.SqlClient` throughout — no ORM, no EF, no async. The consistent shape is: +Raw `Microsoft.Data.SqlClient` throughout — no ORM, no EF, no async. Only the namespace differs +from the old `System.Data.SqlClient`; the type names are the same, and `SqlDbType` is still +`System.Data.SqlDbType`. The consistent shape is: ```csharp var connection = DatabaseConnection.Current; @@ -169,8 +182,9 @@ careful about adding per-file state to those structures. `Select-ImageStoreSameFile` and `Resolve-ImageStoreSimilarFiles` call `Application.EnableVisualStyles()` in `BeginProcessing` and then `ShowDialog()`. There is no -message loop of the module's own — the dialogs rely on the host thread being STA (the default in -the Windows PowerShell console host). The heaviest UI is +message loop of the module's own — the dialogs rely on the host thread being STA. `pwsh` is STA by +default on Windows (restored in 7.0-preview.3 precisely so WinForms and WPF work), but VS Code's +PowerShell Integrated Console is MTA, where these two cmdlets misbehave. The heaviest UI is `SimilarFile/SimilarFileInGroupManager.cs`; `DoubleBufferedDataGridView` / `DoubleBufferedListView` exist to keep large lists from flickering. @@ -214,8 +228,8 @@ wipes both the pair table and those thresholds. ## CI and releases -`.github/workflows/build-and-release.yml` runs on `windows-latest` (the only option — see -build constraints above) and does restore → build → verify → package → release. +`.github/workflows/build-and-release.yml` runs on `windows-latest` and does +publish → verify → package → release. **Every push to `master` publishes a real release.** The tag is date-based, `v.`, where `n` continues from the highest tag already published that day; the date is stamped in @@ -223,24 +237,27 @@ where `n` continues from the highest tag already published that day; the date is publishes under that tag verbatim instead. Because the sequence number is derived from existing tags, the workflow is serialised with a `concurrency` group — do not remove that. -Each release carries two assets: `ImageStore-.zip` (every `.dll` from `ImageStore\bin\Release`) -and `ImageStore-Database-.zip` (the empty `.mdf`/`.ldf` and `CreateDatabase.txt`). The database -is deliberately separate — its contents are identical in every release and are only needed once, -when setting up a project. +**A pull request runs the same build but skips publishing** (`if: github.event_name != 'pull_request'` +on the last step) and labels its artifact `pr-` so it cannot be mistaken for a release. +Use it for anything risky: nothing here can be *run* outside Windows, so CI is the only behavioural +feedback before merging. + +Each release carries two assets: `ImageStore-.zip` (the whole publish tree minus `.pdb`) and +`ImageStore-Database-.zip` (the empty `.mdf`/`.ldf` and `CreateDatabase.txt`). The database is +deliberately separate — its contents are identical in every release and are only needed once, when +setting up a project. The module archive is copied wholesale rather than as flat `*.dll`, because +`deps.json` and `runtimes/win-*/native/` have to keep their layout. The "Verify build output" step guards the package in both directions: -- **Nothing missing.** The six third-party dlls must sit next to `ImageStore.dll`, because - `Import-Module` fails at load time if any is absent. They reach the output through `` - CopyLocal, *not* through their `` entries (those carry no `CopyToOutputDirectory` and - copy nothing) — so switching a dependency to a plain `` item would silently stop - packaging it. -- **Nothing extra.** `System.Management.Automation.dll` must not appear. It comes from the - `Microsoft.PowerShell.5.ReferenceAssemblies` package and is a *reference assembly* — metadata - only, no method bodies — and the PowerShell host supplies the real one at run time. - `runtime` on that `PackageReference` keeps it out of the output; - the check is the net for a regression, since an oversized zip otherwise looks perfectly healthy. - v2026.08.15.1 shipped with it by mistake. +- **Nothing missing.** `ImageStore.dll`, `ImageStore.deps.json`, both `Shipwreck.Phash*` dlls, + `Microsoft.Data.SqlClient.dll`, and — checked recursively — the native SNI library. +- **Nothing extra.** No `System.Management.Automation.dll`, `pwrshplugin.dll`, + `PowerShell.Core.Instrumentation.dll`, `libpsl-native.*` or `getfilesiginforedist.dll`. These + belong to the PowerShell host and are kept out by `ExcludeAssets="runtime;native"`; the check is + the net for a regression, since an oversized package otherwise looks perfectly healthy. Both + halves of this have already caught a real mistake — v2026.08.15.1 shipped the reference assembly, + and the native payload leaked in during the .NET 10 upgrade. The workflow does not touch `AssemblyInfo.cs`: the dll stays at `1.0.0.0` and the version lives only in the tag, release title, and asset name. diff --git a/README.md b/README.md index deb1db5..e91ddbb 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,31 @@ Image deduplication tool, optimized for large amount of pictures and CG librarie This tool is built as PowerShell cmdlets, providing user a flexible way to deal with large amount of image files (~1 million). Specially, it is optimized for CG libraries storing by allowing user to suppress the comparing among files in the same folder. +# Requirements + * Windows. + * [PowerShell 7.6](https://github.com/PowerShell/PowerShell/releases) or later. The module targets .NET 10, and 7.6 is the first PowerShell release built on it. + * Sql Server 2017. See [Database](#database) below. + +*Note: Windows PowerShell 5.1 — the ```powershell.exe``` that ships with Windows — cannot load this module, because it runs on .NET Framework. Use ```pwsh```. The last release that works under 5.1 is [v2026.08.15.2](https://github.com/SecretNest/ImageStore/releases/tag/v2026.08.15.2).* + # Image Hashing Arithmetic -This tool use a [forked version](https://github.com/scegg/phash) of [priHash](https://github.com/pgrho/phash), which added methods optimized for ImageStore calling. -priHash is a C# Implementation of pHash (http://phash.org). Based on phash-0.9.4 for Windows. +This tool use [priHash](https://github.com/pgrho/phash), a C# Implementation of pHash (http://phash.org), based on phash-0.9.4 for Windows. In this tool, [difference degree](doc/concept/DifferenceDegree.md) is based on the calculation of priHash. # Use Module in PowerShell To use any module from dll in PowerShell, you just need 3 steps: -1. Start PowerShell. Usually it is placed as ```C:\windows\System32\windowspowershell\v1.0\powershell.exe``` in Windows. +1. Start PowerShell by running ```pwsh```. 2. Use command ```Import-Module``` to load module from dll file. The parameter of this command is the path of the dll file. ```Import-Module C:\ImageStore.dll``` will load the module file named as ImageStore.dll and placed in the root folder of drive C. ```Import-Module .\ImageStore.dll``` will load the module file named as ImageStore.dll from the current directory. 3. Use [cmdlets](doc/cmdlet/cmdlets.md). +Unpack the whole release archive into one folder and load ImageStore.dll from there. The other files beside it are its dependencies, and the module will not work without them. + Also, you can combine the step 1 and 2 as one, by passing the command as a parameter while starting PowerShell. -```C:\windows\System32\windowspowershell\v1.0\powershell.exe -noexit -command "Import-Module .\ImageStore.dll"``` +```pwsh -noexit -command "Import-Module .\ImageStore.dll"``` + +*Note: [Select-ImageStoreSameFile](doc/cmdlet/SameFile/SelectSameFile.md) and [Resolve-ImageStoreSimilarFiles](doc/cmdlet/SimilarFile/ResolveSimilarFiles.md) open windows, which requires the host to run in a single-threaded apartment. ```pwsh``` does so by default, but the PowerShell Integrated Console in Visual Studio Code does not — run those two cmdlets from a real console.* ## Enable Information and Verbose Output By default, the information and verbose level output will be silenced. ImageStore will report key information as informational output and progress updates as verbose one. Thus, enabling information output is highly recommended. If ImageStore is dealing with large amount of files, turning on verbose output is advised.