Quando o .NET Core ainda usava o project.json
formato, você poderia construir uma biblioteca de classes visando vários frameworks (por exemplo, net451, netcoreapp1.0).
Agora que o formato oficial do projeto está csproj
usando MSBuild, como você especifica várias estruturas para o destino? Eu estou tentando olhar para este a partir das configurações do projeto no VS2017, mas eu sou capaz de atingir apenas um único quadro dos quadros .NET núcleo (que nem sequer listar as outras versões do .NET Framework completo que eu não tenha instalado) :
Respostas:
Você precisa editar manualmente o arquivo de projeto e adicionar s ao TargetFrameworks padrão e basicamente alterá-lo para TargetFrameworks . Então você menciona o Moniker com um ; separador.
Além disso, você pode colocar as referências do pacote Nuget em um ItemGroup condicional manualmente ou usando o VS Nuget Package Manager.
Esta é a aparência do seu .csproj:
Outra solução alternativa que faço atualmente por causa da documentação ausente é que eu crio um projeto no VS2015 e formo o project.json usando a documentação disponível e o intellisense, então abro a solução no VS2017 e uso a atualização embutida. Em seguida, examinarei o arquivo csproj para descobrir como fazer essa configuração acontecer.
Múltiplos alvos mais esotéricos sem um Moniker :
Microsoft:
Se você quiser atingir um perfil portátil não tem um pré-definidos apelido tão Profiles portáteis também não pode inferir
TargetFrameworkIdentifier
,TargetFrameworkVersion
eTargetFrameworkProfile
. Além disso, uma constante do compilador não é definida automaticamente. Finalmente, você deve adicionar todas as referências de assembly, nenhuma delas é fornecida por padrão.O exemplo abaixo foi tirado de um projeto que usava a
dynamic
palavra-chave, portanto, além disso, precisava daMicrosoft.CSharp
montagem, portanto, você pode ver como é referência para diferentes destinos.fonte
Você pode editar manualmente o
.csproj
arquivo para isso e definirTargetFrameworks
(nãoTargetFramework
) a propriedade.Por exemplo, consulte
EFCore.csproj
: https://github.com/aspnet/EntityFrameworkCore/blob/951e4826a38ad5499b9b3ec6645e47c825fa842a/src/EFCore/EFCore.csprojfonte
Esse não é o modelo de projeto que você deseja se sua biblioteca precisar trabalhar em vários destinos de plataforma. Com este modelo de projeto, sua biblioteca só pode ser usada em um projeto voltado para .NETCore. A abordagem da biblioteca PCL foi aposentada, agora você precisa escolher um .NETStandard.
Você faz isso iniciando o projeto com o modelo de projeto "Class Library (.NET Standard)". Agora você tem a opção de escolher a versão .NETStandard. A grade de compatibilidade atual está aqui .
Esperançosamente, eles manterão o artigo vinculado atualizado. Isso está em evolução, o .NETStandard 2.0 foi elaborado, mas ainda não foi lançado. Visado para o segundo trimestre de 2017, provavelmente no final da primavera, atualmente mostra 97% concluído. Eu ouvi os designers dizendo que o uso de 1.5 ou 1.6 não é recomendado, não é compatível o suficiente com 2.0
fonte
project.json
você pode especificar dependências específicas para uma estrutura de destino.Eu fiz um guia para iniciantes para estrutura de rede de múltiplos alvos e netcore que começa com a correção simples de 1 linha e então o conduz por cada uma das complicações.
A abordagem mais simples é fazer com que um netcore ou netstandard target funcione primeiro. Em seguida, edite o arquivo csproj e execute essas etapas para os outros destinos.
<Reference />s
para System. * Dlls para quaisquer alvos de netframework apenas lendo o que as mensagens de erro de compilação dizem que está faltando.<PackageReference />s
nos casos em que não sejam iguais para cada destino. O truque mais fácil é reverter temporariamente para a segmentação única para que a GUI manipule as referências do Nuget corretamente para você.fonte