Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode optar por ter assemblies de implementação diferentes para runtimes diferentes em seu pacote NuGet. Nesse caso, você precisa garantir que esses conjuntos sejam compatíveis entre si e com os conjuntos de tempo de compilação.
Por exemplo, considere o cenário a seguir. Você está trabalhando em uma biblioteca que envolve algumas chamadas de interoperabilidade para APIs do Unix e do Windows, respectivamente. Você escreveu o seguinte código:
#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
A estrutura de pacote resultante tem a seguinte aparência.
lib/net6.0/A.dll
runtimes/unix/lib/net6.0/A.dll
lib\net6.0\A.dll é sempre usado em tempo de compilação, independentemente do sistema operacional subjacente.
lib\net6.0\A.dll também é usado em runtime para sistemas não Unix. No entanto, runtimes\unix\lib\net6.0\A.dll é usado em runtime para sistemas Unix.
Ao tentar empacotar este projeto, você receberá o seguinte erro:
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]
Você também percebe o erro e adiciona A.B.Open(string) ao runtime do Unix.
#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
Você tenta empacotar o projeto novamente e ele é bem-sucedido.
Modo estrito
Você pode habilitar o modo estrito para esse validador definindo a EnableStrictModeForCompatibleTfms propriedade em seu arquivo de projeto. A habilitação do modo estrito altera algumas regras e algumas outras regras serão executadas ao obter as diferenças. Isso é útil quando você deseja que ambos os lados sejam estritamente iguais em sua área de superfície e identidade. Para obter mais informações, consulte o modo estrito.