Anteckning
Å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.
Du kan välja att ha olika implementeringssammansättningar för olika körningar i ditt NuGet-paket. I så fall måste du se till att dessa sammansättningar är kompatibla med varandra och med kompileringstidssammansättningarna.
Tänk dig till exempel följande scenario. Du arbetar med ett bibliotek med några interop-anrop till Unix- respektive Windows-API:er. Du har skrivit följande kod:
#if Unix
    public static void Open(string path, bool securityDescriptor)
    {
        // Call Unix specific stuff.
    }
#else
    public static void Open(string path)
    {
        // Call Windows specific stuff.
    }
#endif
Den resulterande paketstrukturen ser ut så här.
lib/net6.0/A.dll
runtimes/unix/lib/net6.0/A.dll
              lib\net6.0\A.dll används alltid vid kompileringstillfället, oavsett det underliggande operativsystemet. 
              lib\net6.0\A.dll används också under körning för icke-Unix-system. Dock används runtimes\unix\lib\net6.0\A.dll vid körning på Unix-system.
När du försöker packa det här projektet får du följande fel:
D:\demo>dotnet pack
Microsoft (R) Build Engine version 17.0.0-preview-21460-01+8f208e609 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
  Determining projects to restore...
  All projects are up-to-date for restore.
  You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
  PackageValidationThrough -> D:\demo\bin\Debug\net6.0\PackageValidationThrough.dll
  Successfully created package 'D:\demo\bin\Debug\PackageValidationThrough.1.0.0.nupkg'.
C:\Program Files\dotnet\sdk\6.0.100-rc.1.21463.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Compatibility.Common.targets(32,5): error CP0002: Member 'A.B.Open(string)' exists on lib/net6.0/PackageValidationThrough.dll but not on runtimes/unix/lib/net6.0/PackageValidationThrough.dll [D:\demo\PackageValidationThrough.csproj]
C:\Program Files\dotnet\sdk\6.0.100-rc.1.21463.6\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Compatibility.Common.targets(32,5): error CP0002: Member 'A.B.Open(string, bool)' exists on runtimes/unix/lib/net6.0/PackageValidationThrough.dll but not on lib/net6.0/PackageValidationThrough.dll [D:\demo\PackageValidationThrough.csproj]
               
              
            
Du inser ditt misstag och lägger även till A.B.Open(string) i Unix-miljön.
#if Unix
    public static void Open(string path, bool securityDescriptor)
    {
        // Call Unix specific stuff.
    }
    public static void Open(string path)
    {
        throw new PlatformNotSupportedException();
    }
#else
    public static void Open(string path)
    {
        // Call Windows specific stuff.
    }
    public static void Open(string path, bool securityDescriptor)
    {
        throw new PlatformNotSupportedException();
    }
#endif
Du försöker packa projektet igen och det lyckas.
               
              
            
Strikt läge
Du kan aktivera strikt läge för den här valideraren genom att ange EnableStrictModeForCompatibleTfms egenskapen i projektfilen. Om du aktiverar strikt läge ändras vissa regler, och andra regler kommer att genomföras när skillnaderna identifieras. Detta är användbart när du vill att båda sidorna ska jämföras med strikt samma i fråga om yta och identitet. Mer information finns i Strikt läge.