Pacote e restauração do NuGet como destinos do MSBuild
Artigo
NuGet 4.0+
Com o formato PackageReference, o NuGet 4.0 e superior pode armazenar todos os metadados de manifesto diretamente dentro de um arquivo de projeto em vez de usar um arquivo .nuspec separado.
Com o MSBuild 15.1 ou superior, o NuGet também é um cidadão de primeira classe do MSBuild com os destinos pack e restore, conforme descrito abaixo. Esses destinos permitem que você trabalhe com o NuGet como faria com qualquer outra tarefa ou destino do MSBuild. Para obter instruções sobre como criar um pacoteNuGet usando o MSBuild, consulte Criar um pacote do NuGet usando o MSBuild. (Para NuGet 3.x e inferiores, use os comandos pack e restore na CLI do NuGet.)
Ordem de build de destino
Como pack e restore são os destinos do MSBuild, você pode acessá-los para melhorar o fluxo de trabalho. Por exemplo, digamos que você deseja copiar o pacote para um compartilhamento de rede após empacotá-lo. Você pode fazer isso adicionando o seguinte ao seu arquivo de projeto:
Da mesma forma, você pode gravar uma tarefa do MSBuild escrever seu próprio destino e consumir propriedades do NuGet na tarefa do MSBuild.
Nota
$(OutputPath) é relativo e espera que você esteja executando o comando a partir da raiz do projeto.
pack target
Para projetos .NET que usam o formato PackageReference usando msbuild -t:pack atrai entradas do arquivo de projeto para usar na criação de um pacote NuGet.
A tabela a seguir descreve as propriedades do MSBuild que podem ser adicionadas a um arquivo do projeto dentro do primeiro nó <PropertyGroup>. Você pode fazer essas edições facilmente no Visual Studio 2017 e posterior clicando com o botão direito do mouse no projeto e selecionando Editar {project_name} no menu de contexto. Para sua conveniência, a tabela é organizada pela propriedade equivalente em um arquivo .nuspec.
Nota
As propriedades Owners e Summary de .nuspec não são compatíveis com o MSBuild.
Valor do atributo/de nuspec
Propriedade MSBuild
Padrão
Observações
Id
PackageId
$(AssemblyName)
$(AssemblyName) de MSBuild
Version
PackageVersion
Versão
Isso é compatível com o semver, por exemplo 1.0.0, 1.0.0-beta ou 1.0.0-beta-00345. O padrão será Version se não estiver definido.
Uma lista separada por ponto-e-vírgula de autores de pacotes, que corresponde aos nomes de perfil em nuget.org. Elas são exibidas na Galeria NuGet no nuget.org e são usadas para fazer referência cruzada a pacotes pelos mesmos autores.
Owners
N/D
Não presente em nuspec
Title
Title
$(PackageId)
Um título amigável para o pacote, normalmente usado nas exibições da interface do usuário, como no site nuget.org e no Gerenciador de Pacotes do Visual Studio.
Description
Description
“Package Description”
Uma descrição longa para o manifesto do assembly. Se PackageDescription não for especificada, essa propriedade também será usada como a descrição do pacote.
Copyright
Copyright
empty
Detalhes sobre direitos autorais do pacote.
RequireLicenseAcceptance
PackageRequireLicenseAcceptance
false
Um valor booliano que especifica se o cliente deve solicitar que o consumidor aceite a licença do pacote antes de instalá-lo.
Caminho até um arquivo de licença dentro do pacote, se você estiver usando uma licença personalizada ou uma licença que não tenha recebido um identificador SPDX. Você precisa empacotar explicitamente o arquivo de licença referenciado. Corresponde ao <license type="expression">. Consulte Empacotando uma expressão de licença ou um arquivo de licença.
LicenseUrl
PackageLicenseUrl
empty
PackageLicenseUrl foi preterido. Em vez disso, use PackageLicenseExpression ou PackageLicenseFile.
ProjectUrl
PackageProjectUrl
empty
Icon
PackageIcon
empty
Um caminho para uma imagem no pacote a ser usado como um ícone de pacote. Você precisa empacotar explicitamente o arquivo de imagem de ícone referenciado. Para obter mais informações, consulte Empacotando um arquivo de imagem de ícone e iconmetadados.
IconUrl
PackageIconUrl
empty
PackageIconUrl foi preterido em favor de PackageIcon. No entanto, para obter a melhor experiência no nível inferior, você deve especificar PackageIconUrl, além de PackageIcon.
Readme
PackageReadmeFile
empty
Você precisa empacotar explicitamente o arquivo Leiame referenciado.
Tags
PackageTags
empty
Uma lista delimitada por ponto e vírgula de marcas que designam o pacote.
Informações opcionais de ramificação do repositório. RepositoryUrl também deve ser especificado para que essa propriedade seja incluída. Exemplo: master (NuGet 4.7.0+).
Repository/Commit
RepositoryCommit
empty
Confirmação de repositório opcional ou conjunto de alterações para indicar em qual origem o pacote foi criado. RepositoryUrl também deve ser especificado para que essa propriedade seja incluída. Exemplo: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
Indica o uso pretendido do pacote. Os tipos de pacote usam o mesmo formato que as IDs de pacote e são delimitados por ;. Os tipos de pacote podem ser versionados anexando um , e uma cadeia de caracteres Version. Consulte Definir um tipo de pacote do NuGet (NuGet 3.5.0+).
Summary
Sem suporte
pack target inputs
Propriedade
Descrição
IsPackable
Um valor booliano que especifica se o projeto pode ser empacotado. O valor padrão é true.
SuppressDependenciesWhenPacking
Defina como true para suprimir dependências de pacote do pacote NuGetgerado.
PackageVersion
Especifica a versão que o pacote resultante terá. Aceita todos os formatos de cadeia de caracteres de versão do NuGet. O padrão é o valor $(Version), ou seja, da propriedade Version no projeto.
PackageId
Especifica o nome para o pacote resultante. Se não for especificado, a operação pack usará como padrão o AssemblyName ou o nome do diretório como o nome do pacote.
PackageDescription
Uma descrição longa do pacote para exibição de interface do usuário.
Authors
Uma lista separada por ponto-e-vírgula de autores de pacotes, que corresponde aos nomes de perfil em nuget.org. Elas são exibidas na Galeria NuGet no nuget.org e são usadas para fazer referência cruzada a pacotes pelos mesmos autores.
Description
Uma descrição longa para o manifesto do assembly. Se PackageDescription não for especificada, essa propriedade também será usada como a descrição do pacote.
Copyright
Detalhes sobre direitos autorais do pacote.
PackageRequireLicenseAcceptance
Um valor booliano que especifica se o cliente deve solicitar que o consumidor aceite a licença do pacote antes de instalá-lo. O padrão é false.
DevelopmentDependency
Um valor booliano que especifica se o pacote está marcado como uma dependência somente de desenvolvimento, que impede que o pacote seja incluído como uma dependência em outros pacotes. Com PackageReference (NuGet 4.8+), esse sinalizador também significa que os recursos em tempo de compilação serão excluídos da compilação. Para obter mais informações, confira Suporte do DevelopmentDependency para PackageReference.
Caminho até um arquivo de licença dentro do pacote, se você estiver usando uma licença personalizada ou uma licença que não tenha recebido um identificador SPDX.
PackageLicenseUrl
PackageLicenseUrl foi preterido. Em vez disso, use PackageLicenseExpression ou PackageLicenseFile.
Uma lista delimitada por ponto e vírgula de marcas que designam o pacote.
PackageOutputPath
Determina o caminho de saída no qual o pacote empacotado será solto. O padrão é $(OutputPath).
IncludeSymbols
Esse valor booliano indica se o pacote deve criar um pacote de símbolos adicionais quando o projeto é empacotado. O formato do pacote de símbolos é controlado pela propriedade SymbolPackageFormat. Para obter mais informações, consulte IncludeSymbols.
IncludeSource
Esse valor booliano indica se o processo do pacote deve criar um pacote de origem. O pacote de origem contém o código-fonte da biblioteca, bem como arquivos PDB. Os arquivos de origem são colocados no diretório src/ProjectName, no arquivo de pacote resultante. Para obter mais informações, consulte IncludeSource.
PackageType
IsTool
Especifica se todos os arquivos de saída são copiados para a pasta tools em vez da pasta lib. Para mais informações, confira IsTool.
Informações opcionais de ramificação do repositório. RepositoryUrl também deve ser especificado para que essa propriedade seja incluída. Exemplo: master (NuGet 4.7.0+).
RepositoryCommit
Confirmação de repositório opcional ou conjunto de alterações para indicar em qual origem o pacote foi criado. RepositoryUrl também deve ser especificado para que essa propriedade seja incluída. Exemplo: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
SymbolPackageFormat
Especifica o formato do pacote de símbolos. Se "symbols.nupkg", um pacote legado de símbolos é criado com uma extensão .symbols.nupkg contendo PDBs, DLLs e outros arquivos de saída. Se "snupkg", um pacote de símbolos do snupkg é criado contendo os PDBs portáveis. O padrão é "symbols.nupkg".
NoPackageAnalysis
Especifica que pack não deve executar a análise de pacote após a compilação do pacote.
MinClientVersion
Especifica a versão mínima do cliente NuGet que pode instalar esse pacote, imposta pelo nuget.exe e pelo Gerenciador de Pacotes do Visual Studio.
IncludeBuildOutput
Esse valor booliano especifica se os assemblies de saída do build devem ser empacotados ou não no arquivo .nupkg.
IncludeContentInPack
Esse valor booliano especifica se todos os itens que têm um tipo Content são incluídos automaticamente no pacote resultante. O padrão é false.
BuildOutputTargetFolder
Especifica a pasta para colocar os assemblies de saída. Os assemblies de saída (e outros arquivos de saída) são copiados para suas respectivas pastas de estrutura. Para obter mais informações, consulte Assemblies de saída.
ContentTargetFolders
Especifica o local padrão para o qual todos os arquivos de conteúdo deverão ir se PackagePath não for especificado para eles. O valor padrão é “content;contentFiles”. Para obter mais informações, consulte Incluindo conteúdo em um pacote.
NuspecFile
Caminho relativo ou absoluto para o arquivo .nuspec que está sendo usado para o empacotamento. Se especificado, ele será usado exclusivamente para as informações de empacotamento e as informações nos projetos não serão usadas. Para obter mais informações, confira Empacotar usando um .nuspec.
Lista separada por ponto e vírgula de pares chave-valor. Para obter mais informações, confira Empacotar usando um .nuspec.
pack scenarios
Suprimindo dependências
Para suprimir dependências de pacote do pacote gerado NuGet, defina SuppressDependenciesWhenPacking como true, o qual permitirá ignorar todas as dependências do arquivo nupkg gerado.
PackageIconUrl
PackageIconUrl é preterido em favor da propriedade PackageIcon. A partir da versão 5.3 do NuGet e do Visual Studio 2019 versão 16.3, pack gera o aviso NU5048 se os metadados do pacote especificarem apenas PackageIconUrl.
PackageIcon
Sugestão
Para manter a compatibilidade com versões anteriores de clientes e fontes que ainda não oferecem suporte a PackageIcon, especifique PackageIcon e PackageIconUrl. O Visual Studio oferece suporte a PackageIcon para pacotes provenientes de uma fonte baseada em pasta.
Empacotando um arquivo de imagem de ícone
Ao empacotar um arquivo de imagem de ícone, use a propriedade PackageIcon para especificar o caminho do arquivo de ícone, relativo à raiz do pacote. Além disso, certifique-se de que o arquivo está incluído no pacote. O tamanho do arquivo de imagem é limitado a 1 MB. Os formatos de arquivo com suporte incluem JPEG e PNG. Recomendamos uma resolução de imagem de 128x128.
Há suporte com o NuGet 5.10.0 versão prévia 2 / SDK do .NET 5.0.300 e superior
Ao empacotar um arquivo Leiame, você precisa usar a propriedade PackageReadmeFile para especificar o caminho do pacote, relativo à raiz do pacote. Além disso, você precisa certificar-se de que o arquivo está incluído no pacote. Os formatos de arquivo suportados incluem apenas Markdown (.md).
O nuget pack copia arquivos de saída com extensões .exe, .dll, .xml, .winmd, .json e .pri. Os arquivos de saída que são copiados dependem do que o MSBuild fornece do destino BuiltOutputProjectGroup.
Há duas propriedades de MSBuild que você pode usar em seu arquivo de projeto ou a linha de comando para controlar onde ficam os assemblies de saída:
IncludeBuildOutput: um valor booliano que determina se os assemblies de saída de build devem ser incluídos no pacote.
BuildOutputTargetFolder: especifica a pasta na qual os assemblies de saída devem ser colocados. Os assemblies de saída (e outros arquivos de saída) são copiados para suas respectivas pastas de estrutura.
Você também pode adicionar os seguintes metadados à referência de projeto:
XML
<IncludeAssets><ExcludeAssets><PrivateAssets>
Incluindo o conteúdo em um pacote
Para incluir o conteúdo, adicione metadados extras ao item <Content> existente. Por padrão, tudo que pertencer ao tipo “Conteúdo” é incluído no pacote, a menos que seja substituído por entradas como a seguinte:
Por padrão, tudo é adicionado à raiz da pasta content e contentFiles\any\<target_framework> dentro de um pacote e preserva a estrutura e pasta relativa, a menos que você especifique um caminho de pacote:
Se você quiser copiar todo o conteúdo somente para determinadas pastas raiz (em vez de para content e contentFiles), será possível usar a propriedade MSBuild do ContentTargetFolders, que assume como padrão "content;contentFiles", mas pode ser definida como qualquer outro nome de pasta. Observe que só especificar “contentFiles” em ContentTargetFolders coloca os arquivos em contentFiles\any\<target_framework> ou contentFiles\<language>\<target_framework> com base em buildAction.
PackagePath pode ser um conjunto de caminhos de destino separados por ponto e vírgula. Especificar um caminho de pacote vazio adicionaria o arquivo à raiz do pacote. Por exemplo, o seguinte adiciona libuv.txt a content\myfiles, content\samples e a raiz do pacote:
Há também uma propriedade do MSBuild, $(IncludeContentInPack), que assume o padrão true. Se isso estiver definido como false em qualquer projeto, o conteúdo desse projeto não será incluído no pacote nuget.
Outros metadados específicos do pacote que pode ser definido em qualquer um dos itens acima <PackageCopyToOutput> e <PackageFlatten>, que define os valores CopyToOutput e Flatten na entrada contentFiles no nuspec de saída.
Nota
Além de itens de Conteúdo, os metadados <Pack> e <PackagePath> também podem ser definidos em arquivos com uma ação de Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource ou None.
Para o pacote acrescentar o nome de arquivo ao caminho do pacote ao usar padrões glob, seu caminho de pacote deve terminar com o caractere separador de pasta, caso contrário, o caminho do pacote será tratado como o caminho completo, incluindo o nome do arquivo.
IncludeSymbols
Ao usar o MSBuild -t:pack -p:IncludeSymbols=true, os arquivos .pdb correspondentes são copiados junto com outros arquivos de saída (.dll, .exe, .winmd, .xml, .json, .pri). Observe que a configuração IncludeSymbols=true cria um pacote regular e um pacote de símbolos.
IncludeSource
Isso é o mesmo que IncludeSymbols, exceto que também copia os arquivos de origem com arquivos .pdb. Todos os arquivos do tipo Compile são copiadas para src\<ProjectName>\, preservando a estrutura de pastas do caminho relativo no pacote resultante. O mesmo também ocorre para arquivos de origem de qualquer ProjectReference que tem TreatAsPackageReference definido como false.
Se um arquivo do tipo Compilação estiver fora da pasta de projeto, ele será adicionado apenas a src\<ProjectName>\.
Empacotando uma expressão de licença ou um arquivo de licença
Ao usar uma expressão de licença, use a propriedade PackageLicenseExpression. Para obter um exemplo, consulte Exemplo de expressão de licença.
Para saber mais sobre expressões de licença e licenças aceitas pelo NuGet.org, consulte metadados de licença.
Ao empacotar um arquivo de licença, use a propriedade PackageLicenseFile para especificar o caminho do pacote, relativo à raiz do pacote. Além disso, certifique-se de que o arquivo está incluído no pacote. Por exemplo:
Somente um dentre PackageLicenseExpression, PackageLicenseFile e PackageLicenseUrl pode ser especificado por vez.
Empacotando um arquivo sem uma extensão
Em alguns cenários, como ao empacotar um arquivo de licença, convém incluir um arquivo sem uma extensão.
Por razões históricas, o NuGet e o MSBuild tratam caminhos sem extensão como diretórios.
Ao usar MSBuild -t:pack -p:IsTool=true, todos os arquivos de saída, conforme especificado no cenário Assemblies de saída, são copiados para a pasta tools em vez da pasta lib. Observe que isso é diferente de um DotNetCliTool que é especificado pela configuração do PackageType no arquivo .csproj.
Empacotando usando um arquivo .nuspec
Embora seja recomendável incluir todas as propriedades que geralmente estão no arquivo .nuspec no arquivo de projeto, você pode optar por usar um arquivo .nuspec para empacotar seu projeto. Para um projeto que não seja de estilo SDK que usa PackageReference, você deve importar NuGet.Build.Tasks.Pack.targets para que a tarefa do pacote possa ser executada. Você ainda precisa restaurar o projeto antes de empacotar um arquivo nuspec. (Um projeto no estilo SDK inclui os destinos do pacote por padrão.)
A estrutura de destino do arquivo de projeto é irrelevante e não é usada ao empacotar um arquivo do nuspec. As três propriedades MSBuild a seguir são relevantes para empacotamento usando um .nuspec:
NuspecFile: caminho relativo ou absoluto para o arquivo .nuspec que está sendo usado para o empacotamento.
NuspecProperties: uma lista separada por ponto e vírgula de pares chave/valor. Devido à maneira como a análise de linha de comando do MSBuild funciona, várias propriedades precisam ser especificadas da seguinte maneira: -p:NuspecProperties="key1=value1;key2=value2".
NuspecBasePath: o caminho base para o arquivo .nuspec.
Se estiver usando dotnet.exe para empacotar seu projeto, use um comando como o seguinte:
.NET CLI
dotnetpack<path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Se estiver usando dotnet.exe para empacotar seu projeto, use um comando como o seguinte:
cli
msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Observe que empacotar uma nuspec usando dotnet.exe ou msbuild também leva à compilação do projeto por padrão. Isso pode ser evitado passando a propriedade --no-build para dotnet.exe, que é o equivalente à configuração <NoBuild>true</NoBuild> no arquivo de projeto, juntamente com a configuração <IncludeBuildOutput>false</IncludeBuildOutput> no arquivo de projeto.
Um exemplo de um arquivo .csproj para empacotar um arquivo nuspec é:
XML
<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>netstandard2.0</TargetFramework><NoBuild>true</NoBuild><IncludeBuildOutput>false</IncludeBuildOutput><NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile><NuspecProperties>add nuspec properties here</NuspecProperties><NuspecBasePath>optional to provide</NuspecBasePath></PropertyGroup></Project>
Pontos de extensão avançados para criar um pacote personalizado
O destino pack fornece dois pontos de extensão que são executados na compilação interna específica da estrutura de destino. Os pontos de extensão oferecem suporte à inclusão de conteúdo específico da estrutura de destino e dos assemblies em um pacote:
Destino TargetsForTfmSpecificBuildOutput: use para arquivos dentro da pasta lib ou de uma pasta especificada usando BuildOutputTargetFolder.
Destino TargetsForTfmSpecificContentInPackage: use para arquivos fora do BuildOutputTargetFolder.
TargetsForTfmSpecificBuildOutput
Escreva um destino personalizado e especifique-o como o valor da propriedade $(TargetsForTfmSpecificBuildOutput). Para todos os arquivos que precisam ir para BuildOutputTargetFolder (biblioteca por padrão), o destino deve gravar esses arquivos no BuildOutputInPackage do ItemGroup e definir os dois valores de metadados a seguir:
FinalOutputPath: o caminho absoluto do arquivo. Se não for fornecido, a Identidade será usada para avaliar o caminho de origem.
TargetPath: (opcional) defina quando o arquivo precisa ir para uma subpasta dentro do lib\<TargetFramework>, como assemblies satélite que vão para suas respectivas pastas de cultura. Usa o nome do arquivo como padrão.
Escreva um destino personalizado e especifique-o como o valor da propriedade $(TargetsForTfmSpecificBuildOutput). Para que todos os arquivos sejam incluídos no pacote, o destino deve gravar esses arquivos no TfmSpecificPackageFile do ItemGroup e definir os seguintes metadados opcionais:
PackagePath: caminho onde o arquivo deve ser gerado no pacote. O NuGet emite um aviso se mais de um arquivo for adicionado ao mesmo caminho de pacote.
BuildAction: a ação de compilação a ser atribuída ao arquivo, necessária somente se o caminho do pacote estiver na pasta contentFiles. Assume o valor padrão “Nenhum”.
MSBuild -t:restore (que nuget restore e dotnet restore usam com projetos do .NET Core), restaura pacotes referenciados no arquivo de projeto da seguinte maneira:
Ler todas as referências projeto a projeto
Ler as propriedades do projeto para localizar a pasta intermediária e as estruturas de destino
Passe dados do MSBuild para NuGet.Build.Tasks.dll
Executar restauração
Baixar os pacotes
Gravar arquivo de ativos, destinos e objetos
O destino restore funciona para projetos usando o formato PackageReference.
MSBuild 16.5+ também tem suporte de aceitação para o formato packages.config.
Configurações de restauração adicionais podem vir de propriedades do MSBuild no arquivo de projeto. Os valores também podem ser definidos na linha de comando usando a opção -p: (consulte os Exemplos abaixo).
Propriedade
Descrição
RestoreSources
Uma lista delimitada por ponto e vírgula de origens de pacote.
RestorePackagesPath
Caminho da pasta dos pacotes do usuário.
RestoreDisableParallel
Limite os downloads para um de cada vez.
RestoreConfigFile
Caminho para um arquivo Nuget.Config a ser aplicado.
Se verdadeiro, ignora origens de pacote com falha ou ausentes.
RestoreFallbackFolders
Pastas de fallback, usadas da mesma forma que a pasta de pacotes do usuário é usada.
RestoreAdditionalProjectSources
Fontes adicionais a serem usadas durante a restauração.
RestoreAdditionalProjectFallbackFolders
Pastas de fallback adicionais a serem usadas durante a restauração.
RestoreAdditionalProjectFallbackFoldersExcludes
Exclui pastas de fallback especificadas em RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile
Caminho para NuGet.Build.Tasks.dll.
RestoreGraphProjectInput
Lista separada por ponto e vírgula de projetos a serem restaurados, que devem conter caminhos absolutos.
RestoreUseSkipNonexistentTargets
Quando os projetos são coletados através de MSBuild, ele determina se eles são coletados usando a otimização SkipNonexistentTargets. Quando não for definido, o padrão será true. A consequência é um comportamento rápido quando os destinos de um projeto não podem ser importados.
MSBuildProjectExtensionsPath
Pasta de saída que usa BaseIntermediateOutputPath e a pasta obj como padrão.
RestoreForce
Em projetos baseados em PackageReference, força todas as dependências a serem resolvidas, mesmo que a última restauração tenha sido bem-sucedida. Especificar esse sinalizador é semelhante à exclusão do arquivo project.assets.json. Isso não ignora o http-cache.
RestorePackagesWithLockFile
Opta pelo uso de um arquivo de bloqueio.
RestoreLockedMode
Execute a restauração no modo de bloqueio. Isso significa que a restauração não reavaliará as dependências.
NuGetLockFilePath
Um local personalizado para o arquivo de bloqueio. O local padrão é ao lado do projeto e é nomeado packages.lock.json.
RestoreForceEvaluate
Força a restauração para recalcular as dependências e atualizar o arquivo de bloqueio sem qualquer aviso.
RestorePackagesConfig
Uma opção de aceitação, que restaura projetos com packages.config. Suporte com MSBuild -t:restore apenas.
RestoreRepositoryPath
somente packages.config. Especifica o diretório de pacotes no qual os pacotes devem ser restaurados. SolutionDirectory será usado se não dor especificado.
RestoreUseStaticGraphEvaluation
Uma opção de aceitação para usar a avaliação estática de gráficos do MSBuild em vez da avaliação padrão. A avaliação de gráficos estáticos é um recurso experimental que é significativamente mais rápido para grandes repositórios e soluções.
RestoreUseLegacyDependencyResolver
Uma recusa em usar o resolvedor de dependência herdado. A implementação do resolvedor de dependências do NuGet foi reescrita na versão 6.12. Essa opção força o algoritmo anterior a ser usado.
A propriedade ExcludeRestorePackageImports é uma propriedade interna usada pelo NuGet.
Não deve ser modificado ou definido em nenhum arquivo do MSBuild.
Referências a destinos do MSBuild contidos em pacotes
Restaurando e compilando com um comando do MSBuild
Devido ao fato de que NuGet pode restaurar pacotes que derrubam destinos e adereços do MSBuild, as avaliações de restauração e compilação são executadas com propriedades globais diferentes.
Isso significa que os seguintes terão um comportamento imprevisível e, muitas vezes, incorreto.
cli
msbuild -t:restore,build
Em vez disso, a abordagem recomendada é:
cli
msbuild -t:build -restore
A mesma lógica se aplica a outros alvos semelhantes a build.
Restaurando projetos PackageReference e packages.config com o MSBuild
Com o MSBuild 16.5+, também há suporte de packages.config para msbuild -t:restore.
cli
msbuild -t:restore -p:RestorePackagesConfig=true
Nota
A restauração packages.config só está disponível com MSBuild 16.5+, e não com dotnet.exe
Restauração com avaliação estática de gráficos do MSBuild
Nota
Com o MSBuild 16.6+, o NuGet adicionou um recurso experimental para usar a avaliação estática de gráficos a partir da linha de comando que melhora significativamente o tempo de restauração para grandes repositórios.
A partir do Visual Studio 2019.x e do NuGet 5.x, esse recurso é considerado experimental e de aceitação. Siga NuGet/Home#9803 para obter detalhes sobre quando esse recurso será habilitado por padrão.
A restauração do grafo estático altera a parte do MSBuild na restauração, junto com a leitura e avaliação do projeto, mas não altera o algoritmo de restauração! O algoritmo de restauração é o mesmo em todas as ferramentas do NuGet (NuGet.exe, MSBuild.exe, dotnet.exe e Visual Studio).
Em pouquíssimos cenários, a restauração de gráfico estático pode se comportar de forma diferente da restauração atual e certos PackageReferences ou ProjectReferences declarados podem estar ausentes.
Para tranquilizar sua mente, como uma verificação única, ao migrar para a restauração de gráfico estático, considere executar:
O NuGetnão deve relatar alterações. Se você vir uma discrepância, registre um problema em NuGet/Home.
Substituindo uma biblioteca de um grafo de restauração
Se uma restauração está trazendo o assembly errado, é possível excluir a escolha padrão do pacote e substituí-lo por outro de sua escolha. Primeiro com um PackageReference de nível superior, exclua todos os ativos:
Crie um projeto .NET e aprenda a adicionar pacotes e gerenciar dependências de pacotes em seu projeto. Use a CLI do .NET Core e o registro NuGet para adicionar bibliotecas e ferramentas aos seus aplicativos C# por meio do Visual Studio Code.