Catalog/imagecatalog/ImageCatalog 2.csproj
MaddoScientisto 6a5173a20d Add AI/OCR extraction feature with UI and CSV export
Integrates optional AI/OCR (AIFotoONLUS.Core) support to extract numbers from images after processing. Adds new "AI" tab in the UI for enabling extraction, selecting models folder, specifying CSV output, and previewing results. Results can be exported to CSV. Uses reflection for AI library invocation, with fallback simulation if unavailable. Persists new AI settings. Updates related NuGet packages and adds theme resources.
2026-02-16 18:37:05 +01:00

149 lines
No EOL
7.8 KiB
XML

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AssemblyVersion>3.1.2.0</AssemblyVersion>
<FileVersion>3.1.2.0</FileVersion>
<InformationalVersion>3.1.2</InformationalVersion>
<Version>3.1.2</Version>
<!-- Default assembly name for regular builds -->
<AssemblyName>ImageCatalog</AssemblyName>
<LangVersion>default</LangVersion>
<ApplicationIcon>Logo.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
<PropertyGroup>
<UpdateVersionProperties>true</UpdateVersionProperties>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<ItemGroup>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Sorgenti\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MaddoShared\MaddoShared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AIFotoONLUS.Core" Version="0.1.1" />
<PackageReference Include="AutoMapper" Version="16.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.3" />
<PackageReference Include="GitVersion.MsBuild" Version="6.5.1" PrivateAssets="all" />
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.4.421302">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<!-- If GitVersion ran and produced values, prefer them for assembly/file/informational version
so the built assembly exposes FullSemVer for runtime and the publish rename uses the same value. -->
<PropertyGroup>
<!-- AssemblyVersion uses AssemblySemVer when available (three-part) -->
<AssemblyVersion Condition="'$(GitVersion_AssemblySemVer)' != ''">$(GitVersion_AssemblySemVer)</AssemblyVersion>
<!-- FileVersion uses GitVersion FileVersion when available -->
<FileVersion Condition="'$(GitVersion_FileVersion)' != ''">$(GitVersion_FileVersion)</FileVersion>
<!-- Prefer FullSemVer for informational version -->
<InformationalVersion Condition="'$(GitVersion_FullSemVer)' != ''">$(GitVersion_FullSemVer)</InformationalVersion>
</PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<PropertyGroup />
<!-- When building inside Visual Studio (which runs .NET Framework MSBuild), the GitVersion.MsBuild
task (net8.0) may fail. Run the GitVersion CLI as a fallback to produce obj/gitversion.json so
subsequent targets can consume the same values. Developers should install the global tool:
dotnet tool install __global GitVersion.Tool __version 6.5.1
-->
<Target Name="RunGitVersionCliForVisualStudio" BeforeTargets="GenerateAssemblyInfo" Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<Message Text="Building inside Visual Studio: attempting to run GitVersion CLI to generate obj\gitversion.json (if `dotnet-gitversion` is installed)." Importance="High" />
<!-- Try the typical global tool command. ContinueOnError=true so VS build doesn't fail if CLI is not installed. -->
<Exec Command="dotnet-gitversion -output file -outputfile &quot;$(ProjectDir)obj\gitversion.json&quot;" ContinueOnError="true" />
<!-- Also try 'dotnet tool run' in case a local tool manifest is used. -->
<Exec Command="dotnet tool run GitVersion.Tool -- -output file -outputfile &quot;$(ProjectDir)obj\gitversion.json&quot;" ContinueOnError="true" />
</Target>
<!-- After publish, rename the produced executable to ImageCatalog.<year>.<major>.<minor>.<build>.<revision>.<ext>
The destination extension is taken from the actual produced file (exe or dll).
-->
<Target Name="RenamePublishedExeWithYearAndVersion" AfterTargets="Publish" Condition="'$(PublishDir)' != ''">
<PropertyGroup>
<_PublishYear>$([System.DateTime]::Now.ToString("yyyy"))</_PublishYear>
<!-- Prefer GitVersion FullSemVer, then FileVersion, then AssemblyVersion -->
<_Ver Condition="'$(GitVersion_FullSemVer)' != ''">$(GitVersion_FullSemVer)</_Ver>
<_Ver Condition="'$(GitVersion_FullSemVer)' == ''">$(FileVersion)</_Ver>
<_Ver Condition="'$(_Ver)' == ''">$(AssemblyVersion)</_Ver>
<!-- Normalize to avoid spaces but keep plus signs for pre-release build metadata; replace spaces with underscore -->
<_VerSanitized>$([System.String]::Copy('$(_Ver)'))</_VerSanitized>
<_VerSanitized>$([System.String]::Copy('$(_VerSanitized)').Replace(' ', '_'))</_VerSanitized>
<_NewExeNameBase>ImageCatalog.$(_PublishYear).$(_VerSanitized)</_NewExeNameBase>
</PropertyGroup>
<Message Text="Attempting to find published assembly to rename to $(_NewExeNameBase).* in $(PublishDir)" Importance="High" />
<!-- Candidate locations in order of likelihood -->
<PropertyGroup>
<_Candidate1>$(PublishDir)$(TargetFileName)</_Candidate1>
<_Candidate2>$(PublishDir)$(TargetName)$(TargetExt)</_Candidate2>
<_Candidate3>$(PublishDir)$(TargetName).exe</_Candidate3>
<_Candidate4>$(PublishDir)$(AssemblyName)$(TargetExt)</_Candidate4>
<_Candidate5>$(PublishDir)$(AssemblyName).exe</_Candidate5>
</PropertyGroup>
<!-- Pick the first existing candidate and compute destination using its extension -->
<PropertyGroup Condition="Exists('$(_Candidate1)') and '$(_CandidateFound)' == ''">
<_CandidateFound>$(_Candidate1)</_CandidateFound>
</PropertyGroup>
<PropertyGroup Condition="Exists('$(_Candidate2)') and '$(_CandidateFound)' == ''">
<_CandidateFound>$(_Candidate2)</_CandidateFound>
</PropertyGroup>
<PropertyGroup Condition="Exists('$(_Candidate3)') and '$(_CandidateFound)' == ''">
<_CandidateFound>$(_Candidate3)</_CandidateFound>
</PropertyGroup>
<PropertyGroup Condition="Exists('$(_Candidate4)') and '$(_CandidateFound)' == ''">
<_CandidateFound>$(_Candidate4)</_CandidateFound>
</PropertyGroup>
<PropertyGroup Condition="Exists('$(_Candidate5)') and '$(_CandidateFound)' == ''">
<_CandidateFound>$(_Candidate5)</_CandidateFound>
</PropertyGroup>
<!-- If a candidate was found, compute destination using its extension and perform copy/delete -->
<PropertyGroup Condition="'$(_CandidateFound)' != ''">
<_FoundExt>$([System.IO.Path]::GetExtension('$(_CandidateFound)'))</_FoundExt>
<_DestExe>$(PublishDir)$(_NewExeNameBase)$(_FoundExt)</_DestExe>
</PropertyGroup>
<Message Text="Found candidate: $(_CandidateFound). Renaming to $(_DestExe)" Importance="High" Condition="'$(_CandidateFound)' != ''" />
<Copy SourceFiles="$(_CandidateFound)" DestinationFiles="$(_DestExe)" SkipUnchangedFiles="false" Condition="'$(_CandidateFound)' != ''" />
<Delete Files="$(_CandidateFound)" Condition="'$(_CandidateFound)' != ''" />
</Target>
</Project>