假设我在每个平台上定义了一个分部类,它定义了一个"初始化"方法,并从我的共享上下文中调用该方法.
我在Android和Windows平台上定义了那个分部类(相同的类名和命名空间).
但由于它的Mac和iOS实现都有相同的代码,我不想重复定义它(在Mac和iOS平台文件夹上).
我遵循了这个指南:https://github.com/dotnet/docs-maui/blob/main/docs/platform-integration/configure-multi-targeting.md
在它的帮助下,我应用了"基于文件夹的多目标",并创建了一个"MaciOS"平台文件夹,在那里定义了我的分部类.
问题是,我的共享上下文表明,iOS和Mac平台上没有实现.这是有道理的,因为iOS和Mac文件夹是空的,但MaciOS文件夹是has级的.
甚至,如果我在"MaciOS"文件夹中打开我的分部类实现,我也没有智能感知,而且Visual Studio也没有说明当前的平台.取而代之的是,它写着"其他文件".
如何在不使用条件编译、不重复代码的情况下共享Mac&;iOS代码?
编辑: 我的"基于文件夹的多目标定位"是这样的:
<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
<Compile Remove="**\Android\**\*.cs" />
<None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\MaciOS\**\*.cs" />
<None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
<Compile Remove="**\iOS\**\*.cs" />
<None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\MacCatalyst\**\*.cs" />
<None Include="**\MacCatalyst\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
<Compile Remove="**\Windows\**\*.cs" />
<None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>