Files
DodoSSH/src/DodoSSH.Client.Shell/DodoSSH.Client.Shell.csproj
T

83 lines
4.3 KiB
XML

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<!-- Same reasoning as the two heads: this code formats timestamps and host names for a person. -->
<InvariantGlobalization>false</InvariantGlobalization>
</PropertyGroup>
<ItemGroup>
<!--
Avalonia, but deliberately not Avalonia.Desktop and not a windowing backend. What is actually used
here is Dispatcher, the asset loader and a resource dictionary — none of which imply a window, which
is why this project can be referenced by a phone.
This is the one place the repository's "everything except App is free of Avalonia" rule bends, and it
bends on purpose: the rule existed so the SSH layer, the flow control and the OIDC flow could be
tested without a toolkit, and none of those are here. What is here is the shell's state machine,
which two heads have to agree on exactly.
-->
<PackageReference Include="Avalonia" />
<PackageReference Include="CommunityToolkit.Mvvm" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../DodoSSH.Client.Session/DodoSSH.Client.Session.csproj" />
<ProjectReference Include="../DodoSSH.Client.Ssh/DodoSSH.Client.Ssh.csproj" />
<ProjectReference Include="../DodoSSH.Client.Terminal/DodoSSH.Client.Terminal.csproj" />
<ProjectReference Include="../DodoSSH.Client.Transfer/DodoSSH.Client.Transfer.csproj" />
<!--
Both arrived with the view models rather than being chosen here. ImportViewModel reads an
~/.ssh/config, and TransfersViewModel puts a bucket behind IRemoteFileStore beside an SFTP host.
Worth knowing for the Android head, which gets both transitively and will use neither at first:
scoped storage means there is no ~/.ssh/config to find, and file transfer is out of its first
scope by decision. Neither is a problem — they are managed assemblies that simply go unused — but
the day the phone grows a file screen, the bucket is the half that ports and the local pane is not.
See docs/android-port.md.
-->
<ProjectReference Include="../DodoSSH.Client.Import/DodoSSH.Client.Import.csproj" />
<ProjectReference Include="../DodoSSH.Client.ObjectStore/DodoSSH.Client.ObjectStore.csproj" />
</ItemGroup>
<ItemGroup>
<!--
The view models are internal, as they were when they lived in the desktop head, and both heads plus
the two shell suites are let in explicitly. Making them public instead would turn every rename of a
command into a compatibility question about an assembly nobody consumes.
The first entry is an assembly name and not a project name, which is why it does not read
DodoSSH.Client.App: that project sets AssemblyName to DodoSSH, so the executable is named for the
product rather than for its layer. The two suites below keep their project names because they do
not set one. Getting this wrong does not fail here — it fails as a wall of CS0122 in the head,
naming every view model and explaining none of it.
-->
<InternalsVisibleTo Include="DodoSSH" />
<InternalsVisibleTo Include="DodoSSH.Client.Android" />
<InternalsVisibleTo Include="DodoSSH.Client.App.Tests" />
<InternalsVisibleTo Include="DodoSSH.Client.App.Layout.Tests" />
</ItemGroup>
<ItemGroup>
<!--
The renderer's files, including the vendored xterm bundles. They moved here from the desktop head
when the phone head needed the same terminal: two copies of a vendored bundle is how one of them ends
up a version behind. Embedded rather than copied to disk so there is no separate deployment step.
-->
<AvaloniaResource Include="WebAssets/**" />
<AvaloniaResource Include="Theme/**" />
<!--
Montserrat, JetBrains Mono and Material Icons, embedded rather than requested by name for the same
reason WebAssets is embedded: a font resolved from the machine is whatever that machine happens to
have, and a phone and a desktop asked the same question would not get the same answer. Shared here
so the desktop head's avares://DodoSSH.Client.Shell/Assets/Fonts URIs are the same ones the palette
and Program.cs reference; see Theme/Palette.axaml's MonoFont and IconFont keys.
-->
<AvaloniaResource Include="Assets/Fonts/**" />
</ItemGroup>
</Project>