Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Scenario 1
Un progetto ha più alias del framework di destinazione che si risolvono nello stesso framework efficace e il pacchetto non riesce a determinare quale alias deve contribuire all'output di compilazione, alle dipendenze o ai riferimenti del framework al pacchetto.
Issue
Un progetto simile al seguente ha due alias (apple e banana) che entrambi si risolvono in 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>
Quando si esegue dotnet pack, NuGet genera NU5051 perché non può includere output di compilazione duplicati o gruppi di dipendenze per lo stesso framework in un singolo pacchetto.
Soluzione
Impostare IncludeBuildOutput su false e SuppressDependenciesWhenPacking su true su tutti gli alias per ogni framework efficace. Questo indica a NuGet quale alias contribuisce all'output di compilazione e alle dipendenze.
<!-- Let 'apple' contribute the build output and dependencies -->
<PropertyGroup Condition="'$(TargetFramework)' == 'banana'">
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
</PropertyGroup>
Se gli alias hanno elementi diversi FrameworkReference , usare PrivateAssets="all" nei riferimenti al framework negli alias secondari per eliminarli dal pacchetto.
Scenario 2
Un progetto ha alias per compilazioni specifiche del runtime e vuole inserire l'output di compilazione di ogni alias in un percorso del pacchetto personalizzato (ad esempio, runtimes/<rid>/lib/<tfm>/).
Issue
Un progetto come il seguente ha net10.0 come alias primario e linuxios come alias secondari. Tutte e tre le soluzioni allo stesso framework efficace:
<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>
L'esecuzione dotnet pack genera NU5051 perché tre alias producono output di compilazione e dipendenze per lo stesso framework.
Soluzione
Eliminare l'output e le dipendenze di compilazione predefiniti per gli alias secondari e usare TargetsForTfmSpecificContentInPackage per inserire gli assembly degli alias secondari in percorsi di pacchetto personalizzati:
<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>
Con questa configurazione, net10.0 contribuisce l'output e le dipendenze di compilazione predefiniti lib/net10.0/ , mentre linux e ios posizionare gli assembly rispettivamente in runtimes/linux/lib/net10.0/ e runtimes/ios/lib/net10.0/ .
Per altre informazioni sul multitargeting con framework duplicati, vedere Targeting multiple frameworks .For more information about multi-targeting with duplicate frameworks, see Targeting multiple frameworks. Per altre informazioni sull'estendibilità dei pacchetti, vedere La destinazione del pacchetto.