Introduce Avalonia as a new cross-platform UI option, including new XAML and code-behind files for the application and main window. Update Program.cs to support a --avalonia launch argument and add corresponding launch profile. Integrate Avalonia NuGet packages and ensure DataModel supports UI-thread invocation for all frontends. All business logic and state are shared via DI, enabling consistent behavior across WinForms, WPF, and Avalonia.
136 lines
No EOL
6.8 KiB
XML
136 lines
No EOL
6.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>
|
|
<!-- Default assembly name for regular builds -->
|
|
<AssemblyName>ImageCatalog</AssemblyName>
|
|
<LangVersion>default</LangVersion>
|
|
<ApplicationIcon>Logo.ico</ApplicationIcon>
|
|
</PropertyGroup>
|
|
<PropertyGroup>
|
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
|
</PropertyGroup>
|
|
<PropertyGroup>
|
|
<!-- Keep MinVer package enabled but do NOT let it overwrite AssemblyVersion/FileVersion used at build-time.
|
|
This prevents MinVer from injecting a computed version into generated BAML/pack URIs which can cause
|
|
WPF to try loading a mismatched assembly identity at runtime. Do a full clean rebuild after this change. -->
|
|
<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="MahApps.Metro" Version="2.4.11" />
|
|
<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="MahApps.Metro.IconPacks" Version="6.2.1" />
|
|
<PackageReference Include="MinVer" Version="7.0.0" PrivateAssets="all" />
|
|
<PackageReference Include="Avalonia" Version="11.3.0" />
|
|
<PackageReference Include="Avalonia.Desktop" Version="11.3.0" />
|
|
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.3.0" />
|
|
<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.3.0" />
|
|
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.4.421302">
|
|
<PrivateAssets>all</PrivateAssets>
|
|
</PackageReference>
|
|
</ItemGroup>
|
|
|
|
<!-- MinVer provides a computed 'Version' property. Do not automatically override AssemblyVersion/FileVersion
|
|
with MinVer's computed Version to avoid mismatches embedded into generated XAML/BAML. The explicit
|
|
AssemblyVersion/FileVersion at the top of this file will be used for runtime identity. -->
|
|
<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 />
|
|
|
|
<!-- No Visual Studio fallback required for MinVer; MinVer integrates with MSBuild during build. -->
|
|
|
|
<!-- 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 MinVer/MSBuild 'Version', then FileVersion, then AssemblyVersion -->
|
|
<_Ver Condition="'$(Version)' != ''">$(Version)</_Ver>
|
|
<_Ver Condition="'$(Version)' == ''">$(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> |