Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Scenario 1:
Ett projekt har flera målramverksalias som matchar samma effektiva ramverk, och paketet kan inte avgöra vilket alias som ska bidra med kompileringsutdata, beroenden eller ramverksreferenser till paketet.
Problematik
Ett projekt som följande har två alias (apple och banana) som båda matchar :net10.0
<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>
När du kör dotnet packgenererar NuGet NU5051 eftersom det inte kan innehålla duplicerade byggutdata eller beroendegrupper för samma ramverk i ett enda paket.
Lösning
Ange IncludeBuildOutput till false och SuppressDependenciesWhenPacking till true för alla utom ett alias per effektivt ramverk. Detta talar om för NuGet vilket alias som bidrar med byggutdata och beroenden.
<!-- Let 'apple' contribute the build output and dependencies -->
<PropertyGroup Condition="'$(TargetFramework)' == 'banana'">
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
Om aliasen har olika FrameworkReference objekt använder du PrivateAssets="all" på ramverksreferenserna i de sekundära aliasen för att utelämna dem från paketet.
Scenario 2
Ett projekt har alias för körningsspecifika versioner och vill placera varje alias build-utdata i en anpassad paketsökväg (till exempel runtimes/<rid>/lib/<tfm>/).
Problematik
Ett projekt som följande har net10.0 som primärt alias och linuxios som sekundära alias. Alla tre matchar samma effektiva ramverk:
<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>
Körningen dotnet pack genererar NU5051 eftersom tre alias skapar byggutdata och beroenden för samma ramverk.
Lösning
Utelämna standardutdata och beroenden för de sekundära aliasen och använd TargetsForTfmSpecificContentInPackage för att placera de sekundära aliasens sammansättningar i anpassade paketsökvägar:
<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>
Med den här konfigurationen net10.0 bidrar standardgenereringens lib/net10.0/ utdata och beroenden, medan linux och ios placerar deras sammansättningar under runtimes/linux/lib/net10.0/runtimes/ios/lib/net10.0/ respektive.
Mer information om flera mål med duplicerade ramverk finns i Rikta in dig på flera ramverk. Mer information om utökningsbarhet för paket finns i paketets mål.