Files
AI-Studio/app/MindWork AI Studio/MindWork AI Studio.csproj
T

200 lines
12 KiB
XML

<Project Sdk="Microsoft.NET.Sdk.Web">
<!-- Using Microsoft.Build.Tasks.Core.dll to be able to read files -->
<UsingTask TaskName="ReadLinesFromFile" AssemblyFile="$(MSBuildBinPath)\Microsoft.Build.Tasks.Core.dll" />
<PropertyGroup>
<Authors>Thorsten Sommer</Authors>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>CS8600;CS8602;CS8603;CS9057</WarningsAsErrors> <!-- CS9057: fail instead of silently skipping an analyzer which needs a newer compiler than the SDK's -->
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>AIStudio</RootNamespace>
<AssemblyName>mindworkAIStudio</AssemblyName>
<PublishSingleFile>true</PublishSingleFile> <!-- Publish as single file -->
<SelfContained>true</SelfContained> <!-- Publish as self-contained; requires no .NET runtime installed on the target machine -->
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> <!-- Include native libraries for self-extract -->
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> <!-- Generate embedded files manifest -->
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> <!-- Restore packages with lock file; needed for caching NuGet packages-->
<!--
SelfContained makes the SDK pick the RID of the machine which runs the restore, and the lock file
records that RID. Without a fixed list, a restore on any other platform rewrites the lock file.
Hence, we list all six RIDs we ship, so that the lock file stays the same everywhere. When we add a
platform, add its RID here as well. The price: each restore downloads the runtime packs of all six
platforms. Please note that `dotnet restore -r` replaces this list; use a plain `dotnet restore` or
`dotnet publish -r` instead.
-->
<RuntimeIdentifiers>osx-arm64;osx-x64;linux-x64;linux-arm64;win-x64;win-arm64</RuntimeIdentifiers>
<!--
The Web SDK defaults to server GC. AI Studio is a single-user desktop app, though: workstation
GC collects earlier and returns the memory to the OS sooner. This matters for devices with
little RAM, e.g., a Raspberry Pi. Please note that we override an SDK default here, so this is
not a redundant repetition of the default value.
-->
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
<!--
IL2026: Usage of methods marked as RequiresUnreferencedCode, e.g., every call of JsonSerializer. Partial trim mode
keeps our own types, so this is no issue for them. It is for types of .NET which System.Text.Json reaches by
reflection only, see the TrimmerRootAssembly in Trimming.props.
CS8974: Converting method group to non-delegate type; Did you intend to invoke the method? We have this issue with MudBlazor validation methods.
-->
<NoWarn>IL2026, CS8974</NoWarn>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<Import Project="..\Trimming.props" />
<ItemGroup>
<!-- Remove some files from the solution view -->
<None Remove="Properties\launchSettings.json" />
<None Remove="build.nu" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="wwwroot\**" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="Plugins\**" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="Assistants\I18N\allTexts.lua" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="Assistants\PromptOptimizer\prompting_guideline.md" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="Assistants\Builder\AssistantBuilderLuaResponse.schema.json" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="Assistants\VisualBriefing\Runtime\echarts.common.min.js" CopyToOutputDirectory="PreserveNewest" />
<EmbeddedResource Include="..\..\runtime\icons\128x128.png" LogicalName="AIStudio.Assistants.VisualBriefing.Runtime.mindwork-ai-studio-icon.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="8.3.0" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.5.1" />
<PackageReference Include="HtmlAgilityPack" Version="1.12.4" />
<PackageReference Include="MailKit" Version="4.18.2" />
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="9.0.22" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.22" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="9.0.22" />
<PackageReference Include="MudBlazor" Version="8.15.0" />
<PackageReference Include="MudBlazor.Markdown" Version="8.11.0" />
<PackageReference Include="ReverseMarkdown" Version="5.0.0" />
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="3.0.5" />
<PackageReference Include="LuaCSharp" Version="0.5.8" />
<!--
Not used by AI Studio directly: MailKit pulls it in through MimeKit, which asks for 10.0.0. That
version is affected by CVE-2026-70162 and CVE-2026-84008 (GHSA-2fmv-rv2c-59x7, GHSA-846f-f764-76mx),
fixed in 10.0.13. The package wins over the older copy within the .NET runtime, so upgrading .NET
alone does not help. Remove this reference once MimeKit itself asks for 10.0.13 or newer.
-->
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="10.0.13" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SharedTools\SharedTools.csproj" />
<ProjectReference Include="..\SourceCodeRules\SourceCodeRules\SourceCodeRules.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
<ProjectReference Include="..\SourceGeneratedMappings\SourceGeneratedMappings.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
</ItemGroup>
<ItemGroup>
<Folder Include="Plugins\assistants\assets\" />
</ItemGroup>
<!--
The test project has to reach Program.LOGGER_FACTORY. Program is internal, and it stays that
way: it is the entry point, not API. Several types initialize a static logger field from that
factory, so a test process must assign it before it touches any of them. The trim smoke test
needs the same, and it uses the internal JSON options of the settings and the Visual Briefing.
-->
<ItemGroup>
<InternalsVisibleTo Include="Tests" />
<InternalsVisibleTo Include="TrimSmokeTest" />
</ItemGroup>
<!-- Read the meta data file -->
<Target Name="ReadMetaData" BeforeTargets="BeforeBuild">
<Error Text="The ../../metadata.txt file was not found!" Condition="!Exists('../../metadata.txt')" />
<ReadLinesFromFile File="../../metadata.txt">
<Output TaskParameter="Lines" PropertyName="Metadata" />
</ReadLinesFromFile>
<PropertyGroup>
<MetaVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 0 ])</MetaVersion>
<MetaBuildTime>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 1 ])</MetaBuildTime>
<MetaBuild>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 2 ])</MetaBuild>
<MetaDotnetSdkVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 3 ])</MetaDotnetSdkVersion>
<MetaDotnetVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 4 ])</MetaDotnetVersion>
<MetaRustVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 5 ])</MetaRustVersion>
<MetaMudBlazorVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 6 ])</MetaMudBlazorVersion>
<MetaTauriVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 7 ])</MetaTauriVersion>
<MetaAppCommitHash>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 8 ])</MetaAppCommitHash>
<!--
The architecture is the one the app is built for. The build script and the pipeline pass it to
dotnet publish; in any other build, SelfContained makes the SDK pick the RID of this machine.
-->
<MetaArchitecture>$(RuntimeIdentifier)</MetaArchitecture>
<MetaPdfiumVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 9 ])</MetaPdfiumVersion>
<MetaVectorStoreVersion>$([System.String]::Copy( $(Metadata) ).Split( ';' )[ 10 ])</MetaVectorStoreVersion>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<AssemblyVersion>$(MetaVersion)</AssemblyVersion>
<FileVersion>$(MetaVersion)</FileVersion>
<InformationalVersion>$(MetaVersion)</InformationalVersion>
</PropertyGroup>
<ItemGroup>
<AssemblyAttribute Include="AIStudio.Tools.Metadata.MetaData">
<_Parameter1>$(MetaVersion)</_Parameter1>
<_Parameter2>$(MetaBuildTime)</_Parameter2>
<_Parameter3>$(MetaBuild)</_Parameter3>
<_Parameter3_TypeName>System.UInt32</_Parameter3_TypeName>
<_Parameter4>$(MetaDotnetSdkVersion)</_Parameter4>
<_Parameter5>$(MetaDotnetVersion)</_Parameter5>
<_Parameter6>$(MetaRustVersion)</_Parameter6>
<_Parameter7>$(MetaMudBlazorVersion)</_Parameter7>
<_Parameter8>$(MetaTauriVersion)</_Parameter8>
<_Parameter9>$(MetaAppCommitHash)</_Parameter9>
</AssemblyAttribute>
<AssemblyAttribute Include="AIStudio.Tools.Metadata.MetaDataArchitecture">
<_Parameter1>$(MetaArchitecture)</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="AIStudio.Tools.Metadata.MetaDataLibraries">
<_Parameter1>$(MetaPdfiumVersion)</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="AIStudio.Tools.Metadata.MetaDataVectorStore">
<_Parameter1>$(MetaVectorStoreVersion)</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
</Target>
<!--
Scoped CSS (`.razor.css`) is bundled into `$(AssemblyName).styles.css`, which App.razor links.
That bundle is generated at build time, so it never lives in the source tree's wwwroot. The
release build, though, serves static files solely from the ManifestEmbeddedFileProvider (see
Program.cs), fed by the `wwwroot\**` EmbeddedResource above. Without this target the bundle is
therefore missing at runtime and every scoped rule is dropped without a word, while the debug
build keeps working through the static web assets. Hence: build the bundle, then embed it
before the manifest is written.
-->
<Target Name="EmbedScopedCssBundle" DependsOnTargets="GenerateScopedCssFiles" BeforeTargets="_CalculateEmbeddedFilesManifestInputs">
<PropertyGroup>
<ScopedCssBundleToEmbed>$(IntermediateOutputPath)scopedcss\bundle\$(AssemblyName).styles.css</ScopedCssBundleToEmbed>
</PropertyGroup>
<!--
Fail loudly instead of shipping a release without the bundle: a missing file here means the
SDK changed where it writes the bundle, and every scoped rule would silently vanish again.
-->
<Error Condition="!Exists('$(ScopedCssBundleToEmbed)')"
Text="The scoped CSS bundle was not found at '$(ScopedCssBundleToEmbed)'. Without it, the release build serves no scoped CSS at all. Check where the SDK writes the bundle and adjust the EmbedScopedCssBundle target." />
<ItemGroup>
<EmbeddedResource Include="$(ScopedCssBundleToEmbed)" Link="wwwroot\$(AssemblyName).styles.css" />
</ItemGroup>
</Target>
</Project>