Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Senaryo 1
Bir projenin aynı etkili çerçeveye çözümlenen birden çok hedef çerçeve diğer adı vardır ve paket, pakete derleme çıkışı, bağımlılıklar veya çerçeve başvurularına katkıda bulunabilecek diğer adı belirleyemez.
Sorun
Aşağıdaki gibi bir projenin her ikisi de olarak çözümlenebilen net10.0iki diğer adı (apple ve banana) vardır:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>apple;banana</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
</PropertyGroup>
</Project>
çalıştırdığınızda dotnet packNuGet, tek bir pakette aynı çerçeve için yinelenen derleme çıktısı veya bağımlılık grupları içeremediğinden NU5051'i yükseltir.
Çözüm
false Etkin çerçeve başına bir diğer ad dışında tümü için ve SuppressDependenciesWhenPacking olarak true ayarlayınIncludeBuildOutput. Bu, NuGet'e derleme çıkışına ve bağımlılıklarına katkıda bulunan diğer adı bildirir.
<!-- Let 'apple' contribute the build output and dependencies -->
<PropertyGroup Condition="'$(TargetFramework)' == 'banana'">
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
Diğer adların farklı FrameworkReference öğeleri varsa, bunları paketten engellemek için ikincil diğer adlardaki çerçeve başvurularında kullanın PrivateAssets="all" .
Senaryo 2
Projenin çalışma zamanına özgü derlemeler için diğer adları vardır ve her diğer adın derleme çıkışını özel bir paket yoluna yerleştirmek ister (örneğin, runtimes/<rid>/lib/<tfm>/).
Sorun
Aşağıdaki net10.0 gibi bir projenin birincil diğer adı ve linuxios ikincil diğer adları vardır. Üçü de aynı etkili çerçeveye çözümlenir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net10.0;linux;ios</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'linux' OR '$(TargetFramework)' == 'ios' OR '$(TargetFramework)' == 'net10.0'">
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
</PropertyGroup>
</Project>
Üç diğer ad aynı çerçeve için derleme çıkışı ve bağımlılıklar oluşturduğundan, çalıştırma dotnet pack NU5051'i yükseltir.
Çözüm
İkincil diğer adlar için varsayılan derleme çıkışını ve bağımlılıklarını gizler ve ikincil diğer adların derlemelerini özel paket yollarına yerleştirmek için kullanın TargetsForTfmSpecificContentInPackage :
<PropertyGroup>
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);GetMyPackageFiles</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'linux' OR '$(TargetFramework)' == 'ios'">
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup Condition="'$(TargetFramework)' == 'linux' OR '$(TargetFramework)' == 'ios'">
<TfmSpecificPackageFile Include="$(OutputPath)$(AssemblyName).dll">
<PackagePath>runtimes/$(TargetFramework)/lib/net10.0</PackagePath>
</TfmSpecificPackageFile>
</ItemGroup>
</Target>
Bu yapılandırmayla, net10.0 varsayılan lib/net10.0/ derleme çıkışına ve bağımlılıklarına katkıda bulunur ve linuxios derlemelerini sırasıyla ve runtimes/ios/lib/net10.0/ altına runtimes/linux/lib/net10.0/ yerleştirir.
Yinelenen çerçevelerle çoklu hedefleme hakkında daha fazla bilgi için bkz. Birden çok çerçeveyi hedefleme. Paket genişletilebilirliği hakkında daha fazla bilgi için bkz. paket hedefi.