-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathKillerNotes.csproj.Backup.tmp
More file actions
145 lines (136 loc) · 8.63 KB
/
Copy pathKillerNotes.csproj.Backup.tmp
File metadata and controls
145 lines (136 loc) · 8.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net48</TargetFramework>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<ApplicationIcon>Resources\kn-icon.ico</ApplicationIcon>
<Version>1.2.2</Version>
<FileVersion>1.2.2.0</FileVersion>
<AssemblyVersion>1.2.2.0</AssemblyVersion>
<!-- Shown in the About card beside the version so a user can tell how old their build
is. Must match the date on this version's CHANGELOG section - release.ps1 preflight
fails the release if it does not. Bump it with the version. -->
<ReleaseDate>2026-08-10</ReleaseDate>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>
<!-- Bake ReleaseDate into the assembly so About can show it. A file timestamp would not
survive being copied, and the PE linker stamp is a build date, not a release date. -->
<ItemGroup>
<AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
<_Parameter1>ReleaseDate</_Parameter1>
<_Parameter2>$(ReleaseDate)</_Parameter2>
</AssemblyAttribute>
</ItemGroup>
<ItemGroup>
<Reference Include="System.Net.Http" />
<!-- Offline dictation (Services/DictationRecorder.cs). Part of .NET Framework itself, so this
adds no package, no native DLL and nothing to the vulnerability audit. -->
<Reference Include="System.Speech" />
<Reference Include="Microsoft.CSharp" />
<!-- Built-in net48 framework assembly (no NuGet, no scan surface): DataContractJsonSerializer
for the SketchPad object model (SketchModel.cs). -->
<Reference Include="System.Runtime.Serialization" />
</ItemGroup>
<ItemGroup>
<!-- Single-exe build (family standard, same versions as KillerPDF): Costura embeds every
managed dependency into the exe at build time. -->
<PackageReference Include="Costura.Fody" Version="5.7.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>compile; runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Fody" Version="6.8.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<!-- Transitive pins: Costura.Fody -> NETStandard.Library 1.6.1 resolves the vulnerable
System.Net.Http 4.3.0 / System.Text.RegularExpressions 4.3.0 (GHSA-7jgj-8wvc-jh57,
GHSA-cmhx-cq75-c4mj). Costura is build-time only and the app compiles against the net48
framework System.Net.Http, so nothing from that graph ships - these pins just move the
resolved versions to the patched releases. ExcludeAssets=all keeps them out of compile
and output entirely. -->
<PackageReference Include="System.Net.Http" Version="4.3.4" ExcludeAssets="all" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" ExcludeAssets="all" />
<!-- Notes database: SQLite with FTS5 search, encrypted at rest with SQLCipher (AES-256)
when a password is set. The static provider (not bundle_e_sqlcipher) is deliberate for
the single-exe build: the bundle's Batteries_V2 dynamic loader probes Assembly.Location,
which is empty for Costura in-memory assemblies and crashes at startup. The static
provider binds via plain DllImport, satisfied by SqlCipherBootstrap's preload. The .Core
ADO.NET wrapper stays managed. Run the vulnerable-package scan (dotnet list package with
the vulnerable and include-transitive flags) at every release. -->
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="10.0.11" />
<PackageReference Include="SQLitePCLRaw.provider.e_sqlcipher" Version="2.1.11" />
<!-- The x64 SQLCipher native itself is VENDORED (third_party\sqlcipher\e_sqlcipher.dll,
built from upstream source - see the README there), embedded as a resource and
self-extracted at runtime (SqlCipherBootstrap), same pattern as KillerPDF's OCR
natives. It replaces the SQLitePCLRaw.lib.e_sqlcipher package, whose whole line
was deprecated upstream (legacy, unmaintained) in 2025. -->
<!-- Markdown to HTML for the optional preview pane (managed, no natives, MIT) -->
<PackageReference Include="Markdig" Version="1.3.2" />
<!-- net48 polyfills so the kit's collection expressions / range operators compile -->
<PackageReference Include="PolySharp" Version="1.16.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\kn-icon.ico" />
<Resource Include="Resources\kn-icon.png" />
<!-- Per-filetype icons for the .knote/.kndb associations (extracted to AppData at
startup so Explorer has an .ico path to read) -->
<Resource Include="Resources\kn-note.ico" />
<Resource Include="Resources\kn-db.ico" />
<Resource Include="Fonts\KillerNotes.ttf" />
</ItemGroup>
<!-- SQLCipher native (x64) embedded for the single-exe build; SqlCipherBootstrap extracts it
to a per-version cache under %LOCALAPPDATA%\KillerNotes and preloads it before the first
database open. Vendored in third_party\sqlcipher (built from source, see its README);
no Condition - a missing crypto native must fail the build, not silently ship without it. -->
<ItemGroup>
<EmbeddedResource Include="third_party\sqlcipher\e_sqlcipher.dll">
<LogicalName>KillerNotes.SqlCipherNative.e_sqlcipher.dll</LogicalName>
</EmbeddedResource>
</ItemGroup>
<!-- Audio codec natives (AudioNativeBootstrap), same embed-and-self-extract route as SQLCipher
above, because Costura only handles MANAGED assemblies. Drop the x64 DLLs into
third_party\audio\ and they get bundled; leave the folder empty and the app still builds and
runs, storing recordings as WAV instead. That Condition is what makes the codecs optional
rather than a build break.
libFLAC - BSD-3-Clause. Lossless, so it is the STORAGE format for recordings.
libmp3lame - LGPL-2.1. Export only; MP3 as storage would compound generation loss on
every edit. LGPL-2.1 permits GPLv2-or-later, so it sits inside GPLv3 - but
distributing it obliges us to offer its source, so keep the matching source
tarball beside the DLL in third_party\audio\. -->
<ItemGroup>
<EmbeddedResource Include="third_party\audio\libFLAC.dll" Condition="Exists('third_party\audio\libFLAC.dll')">
<LogicalName>KillerNotes.AudioNative.libFLAC.dll</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="third_party\audio\libmp3lame.dll" Condition="Exists('third_party\audio\libmp3lame.dll')">
<LogicalName>KillerNotes.AudioNative.libmp3lame.dll</LogicalName>
</EmbeddedResource>
<!-- whisper.cpp (MIT) - offline speech recognition, vastly better than SAPI. Four DLLs because
it is built shared; they must all be present or none (AudioNativeBootstrap). The DLLs are
~1.3 MB total; the MODEL is downloaded on demand, which is where the size actually is. -->
<EmbeddedResource Include="third_party\audio\ggml-base.dll" Condition="Exists('third_party\audio\ggml-base.dll')">
<LogicalName>KillerNotes.AudioNative.ggml-base.dll</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="third_party\audio\ggml-cpu.dll" Condition="Exists('third_party\audio\ggml-cpu.dll')">
<LogicalName>KillerNotes.AudioNative.ggml-cpu.dll</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="third_party\audio\ggml.dll" Condition="Exists('third_party\audio\ggml.dll')">
<LogicalName>KillerNotes.AudioNative.ggml.dll</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="third_party\audio\libwhisper.dll" Condition="Exists('third_party\audio\libwhisper.dll')">
<LogicalName>KillerNotes.AudioNative.libwhisper.dll</LogicalName>
</EmbeddedResource>
</ItemGroup>
<!-- Every build input, including each complete theme dictionary, lives in this repository.
SDK-style globbing picks it up without explicit Compile or Page entries. -->
</Project>