diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..a8838bc78
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,14 @@
+# These owners will be the default owners for everything in
+# the repo. Unless a later match takes precedence,
+# review when someone opens a pull request.
+# For more on how to customize the CODEOWNERS file - https://help.github.com/en/articles/about-code-owners
+* @NuGet/nuget-client @NuGet/nuget-pm
+
+# @NuGet/core-team owns any file in the `/docs/nuget-org/` directory
+# in the root of your repository and any of its subdirectories.
+/docs/nuget-org/ @NuGet/nuget-client @NuGet/nuget-pm @NuGet/gallery-team
+/docs/api/ @NuGet/nuget-client @NuGet/nuget-pm @NuGet/gallery-team
+
+# @NuGet/core-team owns any file in the `/docs/policies/` directory
+# in the root of your repository and any of its subdirectories.
+/docs/policies/ @NuGet/nuget-client @NuGet/nuget-pm @NuGet/gallery-team
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 000000000..344d2e2ad
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,56 @@
+# .NET Documentation Guidelines
+
+## Disclosure
+
+For any Markdown files generated by AI, always disclose that they were created with the assistance of AI. Add the following frontmatter key/value pair:
+
+```markdown
+ai-usage: ai-generated
+```
+
+## Terminology
+
+Unless otherwise specified, all .NET content refers to modern .NET (not .NET Framework).
+
+## Writing Style
+
+Follow [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) with these specifics:
+
+### Voice and Tone
+
+- Active voice, second person addressing reader directly.
+- Conversational tone with contractions.
+- Present tense for instructions/descriptions.
+- Imperative mood for instructions ("Call the method" not "You should call the method").
+- Use "might" instead of "may" for possibility.
+- Use "can" instead of "may" for permissible actions.
+- Avoid "we"/"our" referring to documentation authors or product teams.
+
+### Structure and Format
+
+- Sentence case headings (no gerunds in titles).
+- Be concise, break up long sentences.
+- Oxford comma in lists.
+- Use bullets for unordered lists.
+- Number all ordered list items as "1." (not sequential numbering like "1.", "2.", "3.", etc.)
+- Ordered and unordered lists should use complete sentences with proper punctuation, ending with a period if it's more than three words.
+- Avoid "etc." or "and so on" - provide complete lists or use "for example".
+- Use "for example" instead of "e.g.".
+- Use "that is" instead of "i.e.".
+- No consecutive headings without content between them.
+
+### Formatting Conventions
+
+- **Bold** for UI elements.
+- `Code style` for file names, folders, custom types, non-localizable text.
+- Raw URLs in angle brackets.
+- Use relative links for files in this repo.
+- Remove `https://learn.microsoft.com/en-us` from learn.microsoft.com links.
+
+## File Naming
+
+New Markdown files: lowercase with hyphens, omit filler words (the, a, etc.).
+
+## Special Cases
+
+- When you (Copilot) are assigned an issue in GitHub, after you've completed your work and the workflows (status checks) have run, check to make sure there are no build warnings under the OpenPublishing.Build status check. If there are, open the build report (under View Details) and resolve any build warnings you introduced.
diff --git a/.github/fabricbot.json b/.github/fabricbot.json
new file mode 100644
index 000000000..8dc051bb6
--- /dev/null
+++ b/.github/fabricbot.json
@@ -0,0 +1,410 @@
+{
+ "version": "1.0",
+ "tasks": [
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "created"
+ }
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Transferred issue"
+ }
+ },
+ {
+ "operator": "not",
+ "operands": [
+ {
+ "name": "activitySenderHasPermissions",
+ "parameters": {
+ "permissions": "write"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "isActivitySender",
+ "parameters": {
+ "user": {
+ "type": "author"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "taskName": "[Manage \"WaitingFor\" labels] Replace tag \"WaitingForCustomer\" with \"WaitingForNuGetTeam\" when the author comments on an issue. Also remove `Status:No recent activity` if it's been set.",
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "WaitingForNuGetTeam"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Status:No recent activity"
+ }
+ }
+ ]
+ },
+ "disabled": false
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssuesOnlyResponder",
+ "version": "1.0",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "closed"
+ }
+ },
+ {
+ "operator": "or",
+ "operands": [
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "WaitingForNuGetTeam"
+ }
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issues",
+ "project_card"
+ ],
+ "taskName": "[Manage \"WaitingFor\" labels] Remove any \"WaitingFor\" label when the issue is closed",
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "WaitingForNuGetTeam"
+ }
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ }
+ ]
+ },
+ "disabled": false
+ },
+ {
+ "taskType": "trigger",
+ "capabilityId": "IssueResponder",
+ "subCapability": "IssueCommentResponder",
+ "version": "1.0",
+ "config": {
+ "conditions": {
+ "operator": "and",
+ "operands": [
+ {
+ "name": "isAction",
+ "parameters": {
+ "action": "created"
+ }
+ },
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "WaitingForNuGetTeam"
+ }
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "name": "activitySenderHasPermissions",
+ "parameters": {
+ "permissions": "write"
+ }
+ }
+ ]
+ },
+ "eventType": "issue",
+ "eventNames": [
+ "issue_comment"
+ ],
+ "taskName": "[Manage \"WaitingFor\" labels] Replace tag \"WaitingForNuGetTeam\" with \"WaitingForCustomer\" when NuGet team comments on an issue.",
+ "actions": [
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "WaitingForNuGetTeam"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ }
+ ]
+ },
+ "disabled": false
+ },
+ {
+ "taskType": "scheduled",
+ "capabilityId": "ScheduledSearch",
+ "subCapability": "ScheduledSearch",
+ "version": "1.0",
+ "config": {
+ "frequency": [
+ {
+ "weekDay": 0,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 1,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 2,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 3,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 4,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 5,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 6,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ }
+ ],
+ "searchTerms": [
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "WaitingForCustomer"
+ }
+ },
+ {
+ "name": "noActivitySince",
+ "parameters": {
+ "days": 14
+ }
+ },
+ {
+ "name": "isIssue",
+ "parameters": {}
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ },
+ {
+ "name": "noLabel",
+ "parameters": {
+ "label": "Status:No recent activity"
+ }
+ }
+ ],
+ "taskName": "[Manage stale WaitingForCustomer issues] Search for WaitingForCustomer issues with no activity over 14 days and warn.",
+ "actions": [
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Status:No recent activity"
+ }
+ },
+ {
+ "name": "addReply",
+ "parameters": {
+ "comment": "This issue has been automatically marked as stale because we have not received a response in 14 days. It will be closed if no further activity occurs within another 14 days of this comment."
+ }
+ }
+ ]
+ }
+ },
+ {
+ "taskType": "scheduled",
+ "capabilityId": "ScheduledSearch",
+ "subCapability": "ScheduledSearch",
+ "version": "1.0",
+ "config": {
+ "frequency": [
+ {
+ "weekDay": 0,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 1,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 2,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 3,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 4,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 5,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ },
+ {
+ "weekDay": 6,
+ "hours": [
+ 6
+ ],
+ "timezoneOffset": -7
+ }
+ ],
+ "searchTerms": [
+ {
+ "name": "hasLabel",
+ "parameters": {
+ "label": "Status:No recent activity"
+ }
+ },
+ {
+ "name": "noActivitySince",
+ "parameters": {
+ "days": 14
+ }
+ },
+ {
+ "name": "isIssue",
+ "parameters": {}
+ },
+ {
+ "name": "isOpen",
+ "parameters": {}
+ }
+ ],
+ "taskName": "[Close stale WaitingForCustomer issues] Search for stale WaitingForCustomer issues with no activity over 14 days and warn.",
+ "actions": [
+ {
+ "name": "closeIssue",
+ "parameters": {}
+ },
+ {
+ "name": "removeLabel",
+ "parameters": {
+ "label": "Status:No recent activity"
+ }
+ },
+ {
+ "name": "addLabel",
+ "parameters": {
+ "label": "Resolution:NeedMoreInfo"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "userGroups": []
+ }
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 42594a1c0..13ade8981 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,7 @@ _themes/
_themes.MSDN.Modern/
_themes.VS.Modern/
+# Visual Studio
+.vs/
+
.openpublishing.buildcore.ps1
\ No newline at end of file
diff --git a/.openpublishing.build.ps1 b/.openpublishing.build.ps1
deleted file mode 100644
index aadef7620..000000000
--- a/.openpublishing.build.ps1
+++ /dev/null
@@ -1,17 +0,0 @@
-param(
- [string]$buildCorePowershellUrl = "https://opbuildstorageprod.blob.core.windows.net/opps1container/.openpublishing.buildcore.ps1",
- [string]$parameters
-)
-# Main
-$errorActionPreference = 'Stop'
-
-# Step-1: Download buildcore script to local
-echo "download build core script to local with source url: $buildCorePowershellUrl"
-$repositoryRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
-$buildCorePowershellDestination = "$repositoryRoot\.openpublishing.buildcore.ps1"
-Invoke-WebRequest $buildCorePowershellUrl -OutFile "$buildCorePowershellDestination"
-
-# Step-2: Run build core
-echo "run build core script with parameters: $parameters"
-& "$buildCorePowershellDestination" "$parameters"
-exit $LASTEXITCODE
diff --git a/.openpublishing.publish.config.json b/.openpublishing.publish.config.json
index 49ddd1d3f..39be778c5 100644
--- a/.openpublishing.publish.config.json
+++ b/.openpublishing.publish.config.json
@@ -1,14 +1,11 @@
{
"build_entry_point": "docs",
- "need_generate_pdf": false,
- "need_generate_intellisense": false,
"docsets_to_publish": [
{
"docset_name": "Nuget_concept",
"build_source_folder": "docs",
"build_output_subfolder": "nuget",
"locale": "en-us",
- "version": 0,
"open_to_public_contributors": true,
"type_mapping": {
"Conceptual": "Content",
@@ -16,18 +13,56 @@
"RestApi": "Content"
},
"build_entry_point": "docs",
- "template_folder": "_themes"
+ "template_folder": "_themes",
+ "version": 0
}
],
"notification_subscribers": [],
+ "sync_notification_subscribers": null,
"branches_to_filter": [],
+ "git_repository_url_open_to_public_contributors": "https://github.com/NuGet/docs.microsoft.com-nuget",
+ "git_repository_branch_open_to_public_contributors": "main",
"skip_source_output_uploading": false,
+ "need_preview_pull_request": true,
+ "contribution_branch_mappings": {},
"dependent_repositories": [
{
"path_to_root": "_themes",
"url": "https://github.com/Microsoft/templates.docs.msft",
- "branch": "master",
+ "branch": "main",
+ "branch_mapping": {}
+ },
+ {
+ "path_to_root": "_themes.pdf",
+ "url": "https://github.com/Microsoft/templates.docs.msft.pdf",
+ "branch": "main",
+ "branch_mapping": {}
+ },
+ {
+ "path_to_root": "nuget-samples",
+ "url": "https://github.com/NuGet/Samples",
+ "branch": "main",
"branch_mapping": {}
}
- ]
+ ],
+ "branch_target_mapping": {
+ "live": [
+ "Publish",
+ "Pdf"
+ ],
+ "main": [
+ "Publish",
+ "PDF"
+ ]
+ },
+ "need_generate_pdf_url_template": true,
+ "Targets": {
+ "Pdf": {
+ "template_folder": "_themes.pdf"
+ }
+ },
+ "need_generate_pdf": false,
+ "docs_build_engine": {
+ "name": "docfx_v3"
+ }
}
\ No newline at end of file
diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json
new file mode 100644
index 000000000..be80d09e9
--- /dev/null
+++ b/.openpublishing.redirection.json
@@ -0,0 +1,394 @@
+{
+ "redirections": [
+ {
+ "source_path": "docs/api/introduction.md",
+ "redirect_url": "/nuget/api/overview",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/api/NuGet-API-V3.md",
+ "redirect_url": "/nuget/reference/nuget-client-sdk",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/api/NuGet-Credential-Providers-for-Visual-Studio.md",
+ "redirect_url": "/nuget/reference/extensibility/nuget-credential-providers-for-visual-studio",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/api/nuget-exe-credential-providers.md",
+ "redirect_url": "/nuget/reference/extensibility/nuget-exe-credential-providers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/consume-packages/managing-the-nuget-cache.md",
+ "redirect_url": "/nuget/consume-packages/managing-the-global-packages-and-cache-folders",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/create-packages/Dependency-Versions.md",
+ "redirect_url": "/nuget/concepts/package-versioning",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/create-packages/project-json-impact.md",
+ "redirect_url": "/nuget/archive/project-json-impact",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/create-packages/project-json-and-uwp.md",
+ "redirect_url": "/nuget/archive/project-json-and-uwp",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/guides/create-cross-platform-packages.md",
+ "redirect_url": "/nuget/guides/create-packages-for-xamarin",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/guides/install-nuget.md",
+ "redirect_url": "/nuget/install-nuget-client-tools",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/guides/create-net-standard-packages-vs2017.md",
+ "redirect_url": "/nuget/quickstart/create-and-publish-a-package-using-visual-studio",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/project-json.md",
+ "redirect_url": "/nuget/archive/project-json",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/analyzers-conventions.md",
+ "redirect_url": "/nuget/guides/analyzers-conventions",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/msbuild-targets.md",
+ "redirect_url": "/nuget/reference/msbuild-targets",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/nuget-config-file.md",
+ "redirect_url": "/nuget/reference/nuget-config-file",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/nuspec.md",
+ "redirect_url": "/nuget/reference/nuspec",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/packages-config.md",
+ "redirect_url": "/nuget/reference/packages-config",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Schema/target-frameworks.md",
+ "redirect_url": "/nuget/reference/target-frameworks",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Quickstart/restore.md",
+ "redirect_url": "/nuget/consume-packages/package-restore-troubleshooting",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Quickstart/Create-and-publish-a-package.md",
+ "redirect_url": "/nuget/quickstart/create-and-publish-a-package-using-visual-studio",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/Quickstart/Use-a-Package.md",
+ "redirect_url": "/nuget/quickstart/install-and-use-a-package-in-visual-studio",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/policies/command-line-reference.md",
+ "redirect_url": "/nuget/reference/nuget-exe-cli-reference",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/policies/nuget-faq.md",
+ "redirect_url": "/nuget/resources/nuget-faq",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/faqs/nuget-faq.md",
+ "redirect_url": "/nuget/resources/nuget-faq",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/migrate-packages-config-to-package-reference.md",
+ "redirect_url": "/nuget/consume-packages/migrate-packages-config-to-package-reference",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/analyzers-conventions.md",
+ "redirect_url": "/nuget/guides/analyzers-conventions",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/create-packages/native-packages.md",
+ "redirect_url": "/nuget/guides/native-packages",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/consume-packages/dependency-resolution.md",
+ "redirect_url": "/nuget/concepts/dependency-resolution",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/package-versioning.md",
+ "redirect_url": "/nuget/concepts/package-versioning",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/ID-Prefix-Reservation.md",
+ "redirect_url": "/nuget/nuget-org/id-prefix-reservation",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/licenses.nuget.org.md",
+ "redirect_url": "/nuget/nuget-org/licenses.nuget.org",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/organizations-on-nuget-org.md",
+ "redirect_url": "/nuget/nuget-org/organizations-on-nuget-org",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/policies/data-requests.md",
+ "redirect_url": "/nuget/nuget-org/policies/data-requests",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/policies/deleting-packages.md",
+ "redirect_url": "/nuget/nuget-org/policies/deleting-packages",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/policies/dispute-resolution.md",
+ "redirect_url": "/nuget/nuget-org/policies/dispute-resolution",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/consume-packages/ways-to-install-a-package.md",
+ "redirect_url": "/nuget/consume-packages/overview-and-workflow",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/create-packages/publish-a-package.md",
+ "redirect_url": "/nuget/nuget-org/publish-a-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/package-manager-ui.md",
+ "redirect_url": "/nuget/consume-packages/install-use-packages-visual-studio",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/package-manager-console.md",
+ "redirect_url": "/nuget/consume-packages/install-use-packages-powershell",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/dotnet-commands.md",
+ "redirect_url": "/nuget/reference/dotnet-commands",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/nuget-exe-cli-reference.md",
+ "redirect_url": "/nuget/reference/nuget-exe-cli-reference",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-add.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-add",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-config.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-config",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-delete.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-delete",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-environment-variables.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-environment-variables",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-help.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-help",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-init.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-init",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-install.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-install",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-list.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-list",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-locals.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-locals",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-long-path.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-long-path",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-mirror.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-mirror",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-pack.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-pack",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-push.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-push",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-restore.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-restore",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-setapikey.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-setapikey",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-sign.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-sign",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-sources.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-sources",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-spec.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-spec",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-trusted-signers.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-trusted-signers",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-update.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-update",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/cli-ref-verify.md",
+ "redirect_url": "/nuget/reference/cli-reference/cli-ref-verify",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/powershell-reference.md",
+ "redirect_url": "/nuget/reference/powershell-reference",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-add-bindingredirect.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-add-bindingredirect",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-find-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-find-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-get-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-get-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-get-project.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-get-project",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-install-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-install-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-open-packagepage.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-open-packagepage",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-register-tab-expansion.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-register-tabexpansion",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-sync-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-sync-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-uninstall-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-uninstall-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/tools/ps-ref-update-package.md",
+ "redirect_url": "/nuget/reference/ps-reference/ps-ref-update-package",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/errors-and-warnings/NU1901.md",
+ "redirect_url": "/nuget/reference/errors-and-warnings/NU1901-NU1904",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/errors-and-warnings/NU1902.md",
+ "redirect_url": "/nuget/reference/errors-and-warnings/NU1901-NU1904",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/errors-and-warnings/NU1903.md",
+ "redirect_url": "/nuget/reference/errors-and-warnings/NU1901-NU1904",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/reference/errors-and-warnings/NU1904.md",
+ "redirect_url": "/nuget/reference/errors-and-warnings/NU1901-NU1904",
+ "redirect_document_id": false
+ },
+ {
+ "source_path": "docs/guides/create-packages-for-xamarin.md",
+ "redirect_url": "/nuget",
+ "redirect_document_id": false
+ }
+ ]
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..2f1b58d08
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,39 @@
+# Contributing
+
+No contribution is too big or too small.
+
+1. Visit the page to edit in the [NuGet documentation](https://learn.microsoft.com/nuget/), then click the **Edit** button on the top right. This brings you to the appropriate markdown page in the repo.
+1. Edit the markdown:
+ 1. If you're including images (use PNGs, generally), place them in the media folder that's in the topic's folder. Links are then `media/.png`.
+ 1. Relative links to other pages in this docset should be in the form `..//.md` including the training `.md`. If you're linking to another topic in the same folder, then `..//` can be omitted. When using anchors, always remember to include the `.md` before the `#`.
+ 1. When using external links, especially to Microsoft Learn, omit any language tag like "en-us" so that a reader in another language lands on a target page in that same language if it's available.
+1. When you're done, enter a commit message below, and click **Propose file change**.
+1. Send a pull request for your change. We review PRs on a regular basis.
+1. Thank you!
+
+If you're creating a new topic, keep the following in mind as well:
+
+1. Always place the new topic in an appropriate subfolder, and follow the conventions for filenames as you see them used here.
+
+1. You must include a metadata block as you see on other topics. Typical defaults (such as for `ms.workload` and `ms.reviewer`) are set within `docs/docjx.json`, so you need only change the following:
+
+ - title: The title that appears in search results. For SEO, this ideally isn't the same as the top-level # (H1) of the article.
+ - description: The abstract of the article that appears in search results.
+ - author: the author's GitHub ID, to which issues files for this article are assigned.
+ - ms.author: if the author is a Microsoft employee, this is the Microsoft alias. Used for reporting and forwarding feedback from other channels.
+ - manager: Microsoft alias of the author's manager, if applicable.
+ - ms.date: the date of the last revision or review of the article in mm/dd/yyyy format (use leading zeros). This is a communication to the reader about freshness, so it's not updated for minor changes, only for more significant revisions OR when the article has reverified even if there are no changes.
+ - ms.topic: used to categorize the article in reports. See table below. Most articles are "conceptual".
+
+1. In addition to adding your page, edit `docs/TOC.md` to add a link to that page.
+
+1. If you're adding a top-level node to the TOC, also make an entry for it in `docs/index.md`.
+
+| ms.topic category | Description |
+| --- | --- |
+| conceptual | Use for any content that doesn't fall into another. This is set as the default in docfx.json. |
+| overview | Use for any overview or user-guide articles, typically only those that live under an "Overview" node in the TOC. |
+| quickstart | Anything under the "Quickstart" node in the TOC that's authored according to Quickstart guidelines. |
+| tutorial | Anything under the "Tutorial" node in the TOC that's authored according to Tutorial guidelines. |
+| reference | Any reference-type article that isn't auto-generated. |
+| article | Use for community-contributed content (that is, anything from outside the engineering team or the content team at Microsoft. |
diff --git a/LICENSE b/LICENSE
index 324695d03..3de968b27 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2016 NuGet
+Copyright (c) .NET Foundation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/LICENSE-CODE b/LICENSE-CODE
new file mode 100644
index 000000000..b17b032a4
--- /dev/null
+++ b/LICENSE-CODE
@@ -0,0 +1,17 @@
+The MIT License (MIT)
+Copyright (c) Microsoft Corporation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 0c3061414..36a0aa314 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,182 @@
-# docs.microsoft.com-nuget
-New repo for our docs.microsoft.com move
+# NuGet Docs
+
+The NuGet documentation contained in this repository is hosted in [NuGet documentation](https://learn.microsoft.com/nuget/). This repository was migrated from the former NuGetDocs repository, https://github.com/NuGet/NuGetDocs, which is no longer in active use.
+
+Contributions to this docset are welcome. Please submit PRs to the *main* branch. The main branch is used for staging changes which is periodically merged into the *live* branch which is what's published to the live Microsoft Learn site.
+
+NuGet follows the [.NET Foundation Contributors Code of Conduct](https://github.com/dotnet/home/blob/master/guidance/be-nice.md). Please take a few minutes to review it.
+
+## Repository structure
+
+- All markdown files are in the `docs` folder and various subfolders.
+- The `docs/index.md` file defines the landing (hub) page as it appears in the [NuGet documentation](https://learn.microsoft.com/nuget).
+- The `docs/TOC.md` file defines the left-hand navigation panel that appears when you navigate to any page other than the hub page.
+- Images are contained within media folders within each subfolder.
+- The `docs/docfx.json` file contains various defaults, especially for metadata.
+- The `docs/.openpublishing.redirection.json` file contains redirects for old filenames; if you rename a file, create an entry here that maps the old to the new.
+- The `docs/_breadcrumb/toc.yml` file defines the breadcrumbs that appear on the site and their target pages. Be mindful of this if you make changes to filenames or placement of articles.
+
+## Contribution workflow
+
+No contribution is too big or too small.
+
+1. Visit the page to edit in [NuGet documentation](https://learn.microsoft.com/nuget/), then click the **Edit** button on the top right. This brings you to the appropriate markdown page in the repo.
+1. Edit the markdown:
+ 1. If you're including images (use PNGs, generally), place them in the media folder that's in the topic's folder. Links are then `media/.png`.
+ 1. Relative links to other pages in this docset should be in the form `..//.md` including the trailing `.md`. If you're linking to another topic in the same folder, then `..//` can be omitted. When using anchors, always remember to include the `.md` before the `#`.
+ 1. When using external links, especially to Microsoft Learn, omit any language tag like "en-us" so that a reader in another language lands on a target page in that same language if it's available.
+1. When you're done, enter a commit message below, and click **Propose file change**.
+1. Send a pull request for your change. Review requests are automatic and we review PRs on a regular basis.
+1. Thank you!
+
+If you're creating a new topic, keep the following in mind as well:
+
+1. Always place the new topic in an appropriate subfolder, and follow the conventions for filenames as you see them used here.
+
+1. You must include a metadata block as you see on other topics. Typical defaults (such as for `ms.workload` and `ms.reviewer`) are set within `docs/docjx.json`, so you need only change the following:
+
+ - title: The title that appears in search results. For SEO, this ideally isn't the same as the top-level # (H1) of the article.
+ - description: The abstract of the article that appears in search results.
+ - author: the author's GitHub ID, to which issues files for this article are assigned.
+ - ms.author: if the author is a Microsoft employee, this is the Microsoft alias. Used for reporting and forwarding feedback from other channels.
+ - manager: Microsoft alias of the author's manager, if applicable.
+ - ms.date: the date of the last revision or review of the article in mm/dd/yyyy format (use leading zeros). This is a communication to the reader about freshness, so it's not updated for minor changes, only for more significant revisions OR when the article has reverified even if there are no changes.
+ - ms.topic: used to categorize the article in reports. See table below. Most articles are "conceptual".
+
+1. In addition to adding your page, edit `docs/TOC.md` to add a link to that page.
+
+1. If you're adding a top-level node to the TOC, also make an entry for it in `docs/index.md`.
+
+| ms.topic category | Description |
+| --- | --- |
+| conceptual | Use for any content that doesn't fall into another. This is set as the default in docfx.json. |
+| overview | Use for any overview or user-guide articles, typically only those that live under an "Overview" node in the TOC. |
+| quickstart | Anything under the "Quickstart" node in the TOC that's authored according to Quickstart guidelines. |
+| tutorial | Anything under the "Tutorial" node in the TOC that's authored according to Tutorial guidelines. |
+| reference | Any reference-type article that isn't auto-generated. |
+| article | Use for community-contributed content (that is, anything from outside the engineering team or the content team at Microsoft. |
+
+## Merging to the live branch
+
+NuGet team members have permissions to merge to `live` branch manually, at their own discretion.
+Otherwise, a regular (about once a month) Reverse Integration (RI) will be performed from `main` -> `live` branch.
+Based on the urgency of the docs, this may happen frequently.
+It is very important that the RI pull requests are *merged* and *not squashed*.
+
+## Conventions
+
+In general, if you don't see something described here, look in editing markdown files for examples, with the exception of files in the Release Notes which are legacy content and haven't been as thoroughly edited.
+
+## Language level and terms
+
+Because content can be localized into many languages other than English, topics should be written at what's called the "fifth-grade" reading level, or what a typical 11-12-year-old child would understand. In other words, avoid using college-level words if possible.
+
+To keep the tone more casual, use contractions like "you'll" and "don't".
+
+Also, avoid any cultural references or idioms that do not translate easily.
+
+When describing UI actions, use terms like "select" instead of "click" or "check" because "select" translates better. Use "clear" instead of "uncheck", and prefer "run" over "execute".
+
+Don't worry too much, though. We'll thoroughly review your contributions and edit for these things.
+
+## Naming
+
+Follow these naming conventions and capitalizations when referring to NuGet and related components.
+
+- NuGet: refers to the technology.
+- NuGet Package Manager UI, NuGet Package Manager Console, etc.: refers to other components build on NuGet.
+- nuget.exe: refers to the command-line executable; you can use "nuget" by itself when followed by other arguments. When referring to the command by itself, as in "when you run nuget", include the .exe as in "when you run nuget.exe" so your meaning is clear.
+- packages.config (or the deprecated project.json): refer to NuGet files in a project.
+- NuGet.Config and NuGetDefaults.Config: these files appear with this capitalization so be sure to follow them.
+- .nuspec: refers to a NuGet specification for creating a package; generally, we speak of a .nuspec file with the period, because it's always used as a file extension.
+
+For items not listed here, search in the repository for the term and see how it's used.
+
+### Heading capitalizations
+
+All headings need only capitalize the first word and proper names. Refer to most topics for examples.
+
+### UI terms, boldface, and italics
+
+Use **boldface** for any string that a reader will see in UI, such as "Select the **File** menu," except when referring to common window titles like Solution Explorer.
+
+Use ">" to indicate UI hierarchies, as in the **File > New Project...** menu, or **Tools > Options > NuGet > NuGet Package Manager > Package Sources**. Notice how in this example you can use ">" to traverse a hierarchy from a menu, into a dialog box, into tabs, sub-tabs, and fields. In other words, readers can work with the chain of items to follow and don't need every click spelled out for them. In general, think of how to get the reader to where they need to go in the most efficient way.
+
+With boldface used for UI elements, use *italics* for emphasis in the text.
+
+### Tables
+
+Use standard markdown tables, starting with "| heading | heading | heading |", followed by "| --- | --- | --- |", followed by your rows. The row with "---" is necessary for Microsoft Learn to read the markdown as a table.
+
+Items in the first column are bolded by default, so you don't need to do that explicitly.
+
+### Screenshots and images
+
+Make all images purposeful and easy to consume; avoid graphics for the sake of graphics. When using a screenshot, include a red rounded-rectangle outline of where the reader's eyes should go. That is, do the work to help the reader look at what you want them to look at, rather than burdening them with having to figure that out for themselves.
+
+If an image has white bleed areas on the edges, draw a 1-pixel gray outline around the entire graphic.
+
+Always include a meaningful description of the image in the markdown alt-text between the []'s. These descriptions are also a great place to put SEO terms that you don't otherwise want to appear in the text.
+
+### Inline code
+
+Delineate inline code with grave accents (backticks), as in \`nuget pack\`. This inline formatting is used for the following:
+
+- Code
+- Identifiers
+- File names, folder names, and extensions
+- Command line strings and arguments
+
+Except for the following cases:
+
+- When part of a surrounding code block.
+- When appearing in the left-hand column of a table, because these are automatically bolded.
+- When appearing in quoted strings
+- When appearing in links (although when the term appears by itself, it's OK)
+
+Markdown and HTML are ignored within inline code.
+
+### Code blocks
+
+Code blocks on Microsoft Learn are delineated by with three grave accents (backticks), ```, at the beginning and the end. You do not need to indent code blocks unless they are contained within a list.
+
+The opening ``` should be followed by a language code for proper syntax coloring, such as "xml", "json", "csharp", etc. Use "cli" for command-line examples and "output" for command-line results.
+
+The only case when you should use ``` without a language tag is when creating a block of fixed-point text that isn't related to any kind of code. In these cases you can also just indent the code block, which can be preferable because it visually separates the code in an editor.
+
+### Callouts
+
+Microsoft Learn uses blockquotes for callouts, that is, lines starting with ">".
+
+Callout sections with ">" only will appear with a solid gray line to the left. See [Creating NuGet packages](https://learn.microsoft.com/nuget/create-packages/creating-a-package) for examples.
+
+You can also use one of the following callout tags on the first line that will create a shaded callout in the indicated color:
+
+| Tag | Callout use | Topic with examples |
+| --- | --- | --- |
+| `> [!Note]` | Callouts without any special emphasis. | [Creating NuGet packages](https://learn.microsoft.com/nuget/create-packages/creating-a-package) |
+| `> [!Tip]` | Callouts that share special tips and tricks or other helpful knowledge. | [Package consumption overview](https://learn.microsoft.com/nuget/consume-packages/overview-and-workflow) |
+| `> [!Important]` | Callouts that describe cautions. | [NuGet.Server](https://learn.microsoft.com/nuget/hosting-packages/nuget-server) |
+| `> [!Warning]` | Callouts that warn readers about situations that could cause data loss or unexpected consequences. | [Dependency resolution](https://learn.microsoft.com/nuget/consume-packages/dependency-resolution) |
+
+### Links
+
+- In general, always use the title of the target page as the link text rather than words like "see here" or "this documentation".
+- Relative links to other pages in this docset should be in the form `..//.md` including the trailing `.md`.
+- Links to other markdown files on Microsoft Learn are case-insensitive (unlike links to files in GitHub, which are).
+- If you're linking to another topic in the same folder, then `..//` can be omitted.
+- When using anchors, always remember to include the `.md` before the `#`.
+- When using external links, especially to Microsoft Learn, omit any language tag like "en-us" so that a reader in another language lands on a target page in that same language if it's available.
+- Bare URLs are not automatically converted into links.
+
+### Inline HTML
+
+If you need to do something that Markdown can't handle, use inline HTML. An example is creating a bullet list inside a table.
+
+Use `<` and `>` for < and > characters outside a code block or inline code (delimited by backticks `).
+
+Block-level HTML elements have a few restrictions:
+
+- They must be separated from surrounding text by blank lines.
+- The begin and end tags of the outermost block element must not be indented.
+- Markdown can't be used within HTML blocks.
diff --git a/ThirdPartyNotices b/ThirdPartyNotices
new file mode 100644
index 000000000..a0bd09d68
--- /dev/null
+++ b/ThirdPartyNotices
@@ -0,0 +1,15 @@
+##Legal Notices
+Microsoft and any contributors grant you a license to the Microsoft documentation and other content
+in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode),
+see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the
+[LICENSE-CODE](LICENSE-CODE) file.
+
+Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation
+may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
+The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
+Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
+
+Privacy information can be found at https://privacy.microsoft.com/en-us/
+
+Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents,
+or trademarks, whether by implication, estoppel or otherwise.
\ No newline at end of file
diff --git a/docs.sln b/docs.sln
new file mode 100644
index 000000000..a90cea1da
--- /dev/null
+++ b/docs.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 18
+VisualStudioVersion = 18.3.11122.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "docs", "docs\docs.csproj", "{718966AB-D840-C99F-BC8C-757012BE68AA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C2962E4E-20FC-4C00-858E-D0C62611CBFB}"
+ ProjectSection(SolutionItems) = preProject
+ .gitignore = .gitignore
+ .openpublishing.publish.config.json = .openpublishing.publish.config.json
+ .openpublishing.redirection.json = .openpublishing.redirection.json
+ CONTRIBUTING.md = CONTRIBUTING.md
+ global.json = global.json
+ LICENSE = LICENSE
+ LICENSE-CODE = LICENSE-CODE
+ README.md = README.md
+ ThirdPartyNotices = ThirdPartyNotices
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {718966AB-D840-C99F-BC8C-757012BE68AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {718966AB-D840-C99F-BC8C-757012BE68AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {718966AB-D840-C99F-BC8C-757012BE68AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {718966AB-D840-C99F-BC8C-757012BE68AA}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C4A337AF-69A4-496C-97FF-300C3489A718}
+ EndGlobalSection
+EndGlobal
diff --git a/docs/API/Credential-Providers.md b/docs/API/Credential-Providers.md
deleted file mode 100644
index 960835932..000000000
--- a/docs/API/Credential-Providers.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# Credential Providers and NuGet
-
-*NuGet 3.3+*
-
-When `nuget.exe` needs credentials to authenticate with a feed, it looks for them in the following manner:
-
-1. NuGet first looks for credentials in `nuget.config` files.
-2. NuGet then uses plug-in credential providers, subject to the order given below. (And example is the [Visual Studio Team Services Credential Provider](https://www.visualstudio.com/en-us/docs/package/get-started/nuget/auth#vsts-credential-provider).)
-3. NuGet then prompts the user for credentials on the command line.
-
-
- Note
- Credential providers do not apply to dotnet restore, or the Package Manager UI or Console in Visual Studio. NuGet in Visual Studio uses a single single built-in credential provider that supports Visual Studio Team Services.
-
-
-Plug-in credential providers thus provide a way to hook into custom authentication process for different feeds. They can be used in three ways:
-
-- **Globally**: to make a credential provider available to all instances of `nuget.exe` run under the current user's profile, add it to `%LocalAppData%\NuGet\CredentialProviders`. You may need to create the `CredentialProviders` folder. Credential providers can be installed at the root of the `CredentialProviders` folder or within a subfolder. If a credential provider has multiple files/assemblies, you can use subfolders to keep the providers organized.
-- **From an environment variable**: Credential providers can be stored anywhere and made accessible to `nuget.exe` by setting the `%NUGET_CREDENTIALPROVIDERS_PATH%` environment variable to the provider location. This variable can be a semicolon-separated list if you have multiple locations.
-- **Alongside nuget.exe**: Credential providers can be placed in the same folder as `nuget.exe`.
-
-The loading plug-in credential providers, `nuget.exe` searches the above locations, in order, for any file named `credentialprovider*.exe`, then loads those files in the order they're found. If multiple credential providers exist in the same folder, they're loaded in alphabetical order.
-
-
-## Creating a credential provider
-
-A credential provider is a command-line executable, named in the form `CredentialProvider*.exe`, that gathers inputs, acquires credentials as appropriate, and then returns the appropriate exit status code and standard output.
-
-A provider must also do the following:
-
-- Determine whether it can provide credentials for the targeted URI before initiating credential acquisition. If not, it should return status code 1 with no credentials.
-- Not modify `nuget.config` (such as setting credentials there).
-- Handle HTTP proxy configuration on its own, as NuGet does not provide proxy information to the plugin.
-- Encode `stdout` responses using UTF-8 encoding.
-
-### Input parameters
-
-
-
Parameter/Switch
-
Description
-
-
Uri {value}
-
The package source URI requiring credentials.
-
-
-
NonInteractive
-
If present, provider does not issue interactive prompts.
-
-
-
IsRetry
-
If present, indicates that this attempt is a retry of a previously failed attempt. Providers typically use this flag to ensure that they bypass any existing cache and prompt for new credentials if possible.
-
-
-
-### Exit codes
-
-
-
Code
-
Result
-
Description
-
-
0
-
Success
-
Credentials were successfully acquired and have been written to stdout.
-
-
-
1
-
ProviderNotApplicable
-
The current provider does not provide credentials for the given URI.
-
-
-
2
-
Failure
-
The provider is the correct provider for the given URI, but cannot provide credentials. In this case, nuget.exe will not retry authentication and will fail. A typical example is when a user cancels an interactive login.
-
-
-
-### Standard output
-
-
-
Property
-
Notes
-
-
Username
-
Username for authenticated requests.
-
-
-
-
Password
-
Password for authenticated requests.
-
-
-
Message
-
Optional details about the response, used only to show additional details in failure cases.
-
-
-
-Example stdout:
-
- { "Username" : "freddy@example.com",
- "Password" : "bwm3bcx6txhprzmxhl2x63mdsul6grctazoomtdb6kfbof7m3a3z",
- "Message" : "" }
-
diff --git a/docs/API/NuGet-API-V3.md b/docs/API/NuGet-API-V3.md
deleted file mode 100644
index 7489eff24..000000000
--- a/docs/API/NuGet-API-V3.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# NuGet API v3
-
-The NuGet v3 Client and NuGetGallery APIs are constantly evolving and we are working on having a stable surface area that we can document soon.
-
-In the meantime, you can find examples and documentation for some of the API in the following blog series by Dave Glick:
-
-- [Exploring the NuGet v3 Libraries, Part 1: Introduction and concepts](http://daveaglick.com/posts/exploring-the-nuget-v3-libraries-part-1)
-- [Exploring the NuGet v3 Libraries, Part 2: Searching for packages](http://daveaglick.com/posts/exploring-the-nuget-v3-libraries-part-2)
-- [Exploring the NuGet v3 Libraries, Part 3: Installing packages](http://daveaglick.com/posts/exploring-the-nuget-v3-libraries-part-3)
diff --git a/docs/API/_metadata b/docs/API/_metadata
deleted file mode 100644
index 839833919..000000000
--- a/docs/API/_metadata
+++ /dev/null
@@ -1,2 +0,0 @@
-Credential Providers
-NuGet API v3
\ No newline at end of file
diff --git a/docs/Consume-Packages/Configuring-NuGet-Behavior.md b/docs/Consume-Packages/Configuring-NuGet-Behavior.md
deleted file mode 100644
index 7bc7b233b..000000000
--- a/docs/Consume-Packages/Configuring-NuGet-Behavior.md
+++ /dev/null
@@ -1,241 +0,0 @@
-# Configuring NuGet Behavior
-
-NuGet's `NuGet.Config` files (in XML) store configuration settings and allow for changing default configuration values. NuGet uses several global configuration files and any number of configuration files within and near to a project to determine its exact behavior. In addition, in NuGet 2.7 and later you can use the `NuGetDefaults.config` file to also specifically control package sources.
-
-In this topic:
-
-* [File locations and uses](#config-file-locations-and-uses)
-* [Changing settings](#changing-config-settings)
-* [How settings are applied](#how-settings-are-applied)
-* [NuGet defaults file](#nuget-defaults-file)
-
-## Config file locations and uses
-
-The behavior of every NuGet command, whether issued from the command line, the Package Manager UI, or the Package Manager Console, is driven by the accumulated settings from any number of `NuGet.Config` files:
-
-- Project-specific `NuGet.Config` files located in any folder from the solution folder up to the drive root. These allow control over settings as they apply to a project or a group of projects.
-- A solution-specific `NuGet.Config` file located within a `.nuget` folder in the solution. Settings in this file apply only to solution-wide packages and is supported only in NuGet 3.3 and earlier. It is ignored for NuGet 3.4 and later.
-- The global config file located in `%APPDATA%\NuGet\NuGet.Config`, which is always used unless you specify a different config file using the `-configFile` switch on any NuGet command. For example, `nuget restore -configfile c:\my.config` will use settings from `c:\my.config` for the command and ignores any settings in the global config file.
-- Additional machine-wide config files (NuGet 2.6 and later) located in `%ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}\]]]NuGet.Config`, where `{IDE}` can be `VisualStudio`, `{Version}` can be the Visual Studio version such as `14.0`, and `{SKU}` is either `Community`, `Pro`, or `Enterprise`. These variants allow you to create configurations that are specific to different versions and editions of Visual Studio if needs be.
-- (NuGet 2.7 and later) The "defaults" file located at `%PROGRAMDATA%\NuGet\NuGetDefaults.config`, which is described later under [NuGet defaults file](#nuget-defaults-file) as a way to specifically enable and disable package sources. No other settings are supported in this file.
-
-
-
- Note:
- The `%ProgramData%\NuGet` folder typically requires Administrator permissions to modify. Administrators are expected to set the correct permissions on this folder based on the user and/or machine information.
-
-
-
-## Changing config settings
-
-A configuration file is a simple XML text file containing settings as described in the [NuGet Configuration Settings](/ndocs/schema/nuget.config-file.md) topic.
-
-The preferred method for changing the configuration is using the NuGet [config command](/ndocs/tools/nuget.exe-cli-reference#config) to set a key and value.
-
-
- Note:
- Keys are always case sensitive.
-
-
-To **set a value** in any existing configuration file, use the `-configFile` switch as shown in the examples below.
-
- nuget config -set repositoryPath=c:\packages -configfile c:\my.config
- nuget config -set repositoryPath=c:\packages -configfile .\myApp\NuGet.Config
- nuget config -set repositoryPath=c:\packages -configfile %ProgramData%\NuGet\Config\VisualStudio\14.0\NuGet.Config
- nuget config -set repositoryPath=c:\packages -configfile %ProgramData%\NuGet\NuGetDefaults.Config
-
-Without the `-configFile` switch, NuGet will make the change in the global config file.
-
-
- Note:
- In NuGet 3.4 and later you can use environment variables in any value, as in repositoryPath=%PACKAGEHOME%.
-
-
-To **remove a value**, use the same commands but with an empty value, such as:
-
- nuget config -set repositoryPath= -configfile c:\my.config
-
-To create a new configuration file, copy the template below into that file and then use the `nuget config --configFile ` command to set values:
-
-
-
-
-
-
- Note:
- Although you can modify the file in any text editor, NuGet (v3.4.3 and later) silently ignores the entire configuration file if it contains malformed XML (mismatched tags, invalid quotation marks, etc.).
-
-
-
-## How settings are applied
-
-As described above in [Config file locations and uses](#config-file-locations-and-uses), any number of `NuGet.Config` files can exist on a machine, both in global locations and within a project's folder structure. This allows you to control settings in different places as they apply to a project, a group of projects, or all projects.
-
-
- Note:
- This process is sometimes referred to as "chaining" of config file, and the ability to insert a specific setting anywhere along the chain may be referred to as a "NuGet extensibility point."
-
-
-When `nuget.exe` is run from the command line or run implicitly within Visual Studio, it loads settings from config files in the following order:
-
-1. Files in `%ProgramData%\NuGet\Config` starting at this top folder and iterating down through the `{IDE}\{Version}\{SKU}\` subfolders if they exist.
-2. The global config file, except in NuGet 3.4 and later if `-configFile` is used on the command line.
-3. The file specified with `-configFile`.
-4. Files found in the path to the current folder (where nuget.exe is invoked or the folder containing the Visual Studio solution), starting from the root and ending in the current folder.
-
-As settings are found in these files, they are processed as follows:
-
-1. For single-item elements, the last value found for any given key will be used. This means that those settings that are "closest" to where NuGet was invoked will be applied.
-
-2. For collection elements (such as ``), values from all configuration files are added to the collection.
-
-3. When `` is present for a given node, previously defined configuration values for that node are ignored.
-
-See [the example](#settings-walkthrough) below for a walkthrough of this process.
-
-Note also that the [NuGetDefaults.config file](#nuget-defaults-file) can affect a few specific settings related to package sources, but does not have an effect on any other NuGet behavior.
-
-
-### Priority ordering
-
-It can also help to think about the "priority order" in which settings are applied, which is essentially the reverse of the processing order. For example, if a project is located in `c:\A\B\C`, then NuGet applies settings in the following priority order, meaning settings found higher up in the order win:
-
- (For solution-level packages only in NuGet 2.x; ignored in NuGet 3.x)
- c:\A\B\C\.nuget\NuGet.Config
-
- (For all version of NuGet)
- c:\A\B\C\NuGet.Config
- c:\A\B\NuGet.Config
- c:\A\NuGet.Config
- c:\NuGet.Config
-
- configFile, if specified
-
- (Ignored in NuGet 3.4 and later if -configFile is used)
- %AppData%\NuGet\NuGet.Config
-
- (NuGet 2.6 and later)
- %ProgramData%\NuGet\Config\{IDE}\{Version}\{SKU}\NuGet.Config
- %ProgramData%\NuGet\Config\{IDE}\{Version}\NuGet.Config
- %ProgramData%\NuGet\Config\{IDE}\NuGet.Config
- %ProgramData%\NuGet\Config\NuGet.Config
-
-### Settings walkthrough
-
-Let's say you have the following folder structure:
-
- c:\
- └───Users
- d:\
- ├───Project1
- │ └───Source
- ├───Project2
- │ └───Source
- └───tmp
-
-You then have four `NuGet.Config` files in the following locations with the given content:
-
-(A) Global configuration file, `%APPDATA%\NuGet\Nuget.config`:
-
-
-
-
-
-
-
-
-(B) `d:\NuGet.config`:
-
-
-
-
-
-
-
-
-
-
-
-(C) `d:\Project1\NuGet.config`:
-
-
-
-
-
-
-
-
-
-
-
-
-
-(D) `d:\Project2\NuGet.config`:
-
-
-
-
-
-
-
-
-
-
- Here's how NuGet will load and apply the settings, depending on where it's invoked:
-
-* **Invoked from c:\users**: Only the default repository listed in the global configuration file (A) is used, because that's the only file found on the `c:` drive.
-
-* **Invoked from d:\ or d:\tmp**: (A) is loaded first, then NuGet goes to the root of `d:` and finds (B). NuGet also looks for a configuration file in `d:\tmp` but does not find one. As a result, the default repository on NuGet.org is used, package restore is enabled, and packages get expanded in `d:\tmp`.
-
-* **Invoked from d:\Project1 or d:\Project1\Source**: (A) is loaded first, then NuGet loads (B) from the `d:` root, followed by (C). Settings in (C) override those in (B) and (A), so the `repositoryPath` where packages get installed will be `d:\Project1\External\Packages` instead of `d:\tmp`. Also, because (C) clears ``, nuget.org will no longer be available a source leaving only `https://MyPrivateRepo/ES/nuget`.
-
-* **Invoked from d:\Project2 or d:\Project2\Source**: (A) is loaded first followed by (B) and (D). Because `packageSources` is not cleared, both `nuget.org` and `https://MyPrivateRepo/DQ/nuget` are available as sources. Packages get expanded in `d:\tmp` as specified in (B).
-
-
-## NuGet defaults file
-
-NuGet 3.3 and earlier uses a hardcoded default package source, nuget.org, that the user could not delete. However, when using NuGet with internal package sources, it's often desirable to make sure that developers and build servers use packages from those sources instead of nuget.org. With NuGet 2.7 and later, you can use the `%PROGRAMDATA%\NuGet\NuGetDefaults.config` file to control certain machine-wide defaults described below. This provides administrators a convenient way to deploy (using Group Policy, for example) consistent `NuGetDefaults.config` files to developer and build machines, thus ensuring correct use of package sources.
-
-Note that NuGet 3.4 and later does not use a hardcoded default source. When nuget.exe is run for the first time, `NuGet.config` is generated and nuget.org is added as the default package source in the config file. In the absence of the NuGet.config file, the default package source is undefined.
-
-The defaults file works with the following settings:
-
-- `packageSources`: this collection has the same meaning as `packageSources` in regular config files and specifies the default sources in their preferred order. If this setting exists in `NuGetDefaults.config`, then NuGet will not use nuget.org as a default package source. An administrator can thus make sure that everyone using this file will be working with the same sources and avoids using nuget.org if desired.
-- `disabledPackageSources`: this collection also has the same meaning as in `NuGet.Config` files, where each affected source is listed by its name and a true/false value indicating whether it's disabled. This allows the source name and URL to remain in `packageSources` without it being turned on by default. Individual developers can then re-enable the source by setting the source's value to false in other `NuGet.Config` files without having to find the correct URL again. This is also useful to supply developers with a full list of internal source URLs for an organization while enabling only an individual team's source by default.
-- `defaultPushSource`: when publishing a package, nuget.org is used as the destination or "push source" unless another is specified, which risks developers accidentally pushing internal packages to a public site. By changing the default push source, administrators can ensure that packages stay internal unless published to nuget.org explicitly.
-
-
- Note:
- The NuGetDefaults.Config file will never cause a package source to be removed from a developer's NuGet configuration. That means if the developer has already used NuGet and therefore has the nuget.org package source registered, it won't be removed after the creation of a NuGetDefaults.config file.
-
- Furthermore, neither NuGetDefaults.config or any other mechanism in NuGet can prevent access to package sources like nuget.org. If an organization wishes to block such access, it much use other means such as firewalls to do so.
-
-
-## Example NuGetDefaults.config and application
-
-The following is an example NuGetDefaults.config file containing each of its allowable sections:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/Consume-Packages/Dependency-Resolution.md b/docs/Consume-Packages/Dependency-Resolution.md
deleted file mode 100644
index 2e53c3ed4..000000000
--- a/docs/Consume-Packages/Dependency-Resolution.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Dependency Resolution
-
-Any time a package is installed or reinstalled, which includes being installed as part of a [restore](/ndocs/consume-packages/package-restore) process, NuGet also installs any additional packages on which that first package depends.
-
-Those immediate dependencies might then also have dependencies on their own, which can continue to an arbitrary depth. This produces what's called a *dependency graph* that describes the relationships between packages are all levels.
-
-When multiple packages have the same dependency, then the same package ID can appear in the graph multiple times, potentially with different version constraints. However, only one version of a given package can be used in a project, so NuGet must choose which version will be used.
-
-The exact process differs between NuGet 2.x (using `packages.config`) and NuGet 3.x (using `project.json`) as described in the sections below.
-
-
-## Dependency Resolution in NuGet 2.x
-
-With NuGet 2.x, a project's dependencies are written to the `packages.config` file as a flat list. Any dependencies of those packages are also written in the same list, and NuGet might also modify `.csproj` file and possibly also `app.config`, `web.config`, and other individual files.
-
-NuGet 2.x will attempt to resolve dependency conflicts during the installation of each individual package, which includes package restore. That is, if Package A is being installed and depends on Package B, and Package B is already listed in `packages.config` as a dependency of something else, NuGet will compare the versions of Package B being requested and attempt to find a version that will satisfy all version constraints. Specifically, NuGet will select the lower major.minor version that satisfies dependencies.
-
-By default, NuGet 2.7 and earlier resolves the highest *patch* version (using the major.minor.patch.build convention). [NuGet 2.8](https://docs.nuget.org/release-notes/nuget-2.8#patch-resolution-for-dependencies) changes this behavior to look for the lowest patch version by default, and allows you to control this setting through the `DependencyVersion` attribute in `nuget.config` and the `-DependencyVersion` switch on the command line.
-
-On the downside, the NuGet 2.x process for resolving dependencies gets complicated for larger dependency graphs. This is especially true during package restore, because each new package installation requires a traversal of the whole graph and raises the chance for version conflicts. When a conflict occurs, package restoration is stopped, leaving the project in a partially-restored state, especially with potential modifications to the project file itself.
-
-This and other challenges is why dependency resolution was overhauled in NuGet 3.x, as described in the next section.
-
-## Dependency Resolution in NuGet 3.x
-
-As dependencies are installed into a project, NuGet 3.x adds them to a flat package graph in `project.json` in which conflicts are resolved ahead of time. This is referred to as *transitive restore*. Reinstalling or restoring packages is then simply a process of downloading the packages listed in the graph, resulting in faster and more predictable builds.
-
-
-
- Note
- project.json is mandatory for UWP apps and ASP.NET 5 apps, is optional for PCLs, and currently is not fully supported on other project systems.
-
-
-
-### Advantages of transitive restore
-
-1. Developers explicitly declare which package versions they depend on, without worrying about their down-level dependencies.
-2. Project files are not modified, avoiding merge conflicts and file churn on commits. This also allows the project system to evolve independent of NuGet.
-3. Developers can easily change dependency versions without worrying about side effects on the rest of the project.
-4. Hint paths are not being burned into the project files, fixing the ability to move projects around on disk, and re-targeting problems.
-5. Direct support for Native or special dependencies can be determined directly by the project system. This is related to a new package format in NuGet 3.x.
-6. Developers can specify a floating version range such as *2.8.\**, avoiding expensive and error prone calls to NuGet update on the client machines and build servers.
-
-### Lock file and MSBuild
-
-When the NuGet restore process runs prior to a build, it resolves dependencies first in memory, then writes the resulting graph to a file called `project.lock.json` alongside `project.json`. MSBuild then reads this file and translates it into a set of folders where potential references can be found, and then adds them to the project tree in memory.
-
-The lock file is temporary and does not need to be added to source control; it's listed by default in both `.gitignore` and `.tfignore`.
-
-
-### Dependency resolution rules
-
-NuGet 3.x applies four main rules to resolve dependencies: lowest applicable version, floating versions, nearest-wins, cousin dependencies.
-
-#### Lowest applicable version
-
-NuGet 3.x restores the lowest possible version of a package as defined by its dependencies. This rule also applied to dependencies on the application or the class library unless declared as [floating](#floating-versions).
-
-For example, in the following figure *1.0-Beta* is considered lower than *1.0* so NuGet chooses the 1.0 version:
-
-
-
-In the next figure, version *2.1* is not available on the feed but because the version constraint is *>= 2.1* NuGet will pick the next lowest version it can find, in this case *2.2*:
-
-
-
-When an application specifies an exact version number, such as *1.2*, that is not available on the feed, NuGet will fail with an error when attempting to install or restore the package:
-
-
-
-#### Floating Versions
-
-A floating dependency version is specified with the * wildcard, as with *6.0.\** in the `project.json` file. This says "use the latest 6.0.x version"; a floating version of *4.\** means "use the latest 4.x version." Using a floating version allows a dependency package to continue evolving without requiring a change to the consuming application (or package).
-
-When a floating version constraint is specified then NuGet will resolve the highest version of a package that matches the version pattern, for example *6.0.** will get the highest version of a package that starts with *6.0*:
-
-
-
-
-#### Nearest Wins
-
-When the package graph for an application contains different versions of the same package, the package that's closest to the application in the graph will be used and others will be ignored. This allows an application to override any particular package version in the dependency graph.
-
-In the example below, the application depends directly on Package B with a version constraint of *>=2.0*. The application also depends on Package A which in turn also depends on Package B, but with a *>=1.0* constraint. Because the dependency on Package B *2.0* is nearer to the application in the graph, that version is used:
-
-
-
-
- Note
- Applying the Nearest Wins rule can downgrading the package version, thus potentially breaking other dependencies in the graph. This currently produces an error, although we are considering making it a warning instead. See issue #897 on GitHub.
-
-
-This rule also results in greater efficiency with large dependency graph (such as those with the BCL packages) because by once a given dependency is ignored, NuGet also ignores all remaining dependencies on that branch of the graph. In the diagram below, for example, because Package C 2.0 will be used, NuGet can ignore any branches in the graph that refer to an older version of Package C:
-
-
-
-#### Cousin Dependencies
-
-When different package versions are referred to at the same distance in the graph from the application, NuGet uses the lowest version that satisfies all version requirements (as with the [lowest applicable version](#lowest-applicable-version) and [floating versions](#floating-versions) rules). In the image below, for example, version *2.0* of Package B will satisfy the other *>=1.0* constraint, and will thus be used:
-
-
-
-In some cases, it is not possible to meet all version requirements. As shown below, if Package A required exactly Package B *1.0* and Package C requires Package B *>=2.0*, then NuGet cannot resolve the dependencies and will give an error.
-
-
-
-In these situations, the top-level consumer (the application or package) should add its own direct dependency on Package B so that the [Nearest Wins](#nearest-wins) rule applies.
diff --git a/docs/Consume-Packages/Enabling-Symbol-Packages.md b/docs/Consume-Packages/Enabling-Symbol-Packages.md
deleted file mode 100644
index 115994c3c..000000000
--- a/docs/Consume-Packages/Enabling-Symbol-Packages.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Enabling Symbol Packages
-
-Package authors have the option to create [Symbol packages](/ndocs/create-packages/symbol-packages) for their libraries and upload them to the [SymbolSource repository](http://www.symbolsource.org/Public).
-
-When you configure Visual Studio to use symbol packages in the debugger, it will automatically download an available symbol package when you install an associated package from nuget.org.
-
-To enable this behavior, do the following:
-
-1. Select **Tools > Options** on the menu and expand **Debugger > Symbols**.
-2. In the right hand pane, select the folder icon on the upper right, and enter `https://nuget.smbsrc.net` (if you start typing `nuget` you'll be given an auto-complete option for this). Click OK when you're done.
-
- 
-
-When a symbol package is available, you'll be able to step directly into package code within the Visual Studio debugger.
-
-
- Note
- This same feature allows you to step into the .NET Framework code. See http://referencesource.microsoft.com/.
-
-
diff --git a/docs/Consume-Packages/Finding-and-Choosing-Packages.md b/docs/Consume-Packages/Finding-and-Choosing-Packages.md
deleted file mode 100644
index 4785ccd05..000000000
--- a/docs/Consume-Packages/Finding-and-Choosing-Packages.md
+++ /dev/null
@@ -1,93 +0,0 @@
-# Finding and Choosing Packages
-
-When starting any .NET project, or whenever you identify a functional need for your app or service, you can save yourself lots of time and trouble by using existing NuGet packages that fulfill that need. These packages can come from the public collection on [nuget.org](http://www.nuget.org/packages/), or a private source that's provided by your organization or another third party.
-
-On this page:
-
-- [Finding packages](#finding-packages)
-- [Evaluating packages](#evaluating-packages)
-- [Search syntax](#search-syntax)
-
-## Finding packages
-
-When you visit nuget.org or open the Package Manager UI in Visual Studio, you'll see a list of packages sorted by total downloads. This immediately shows you the most widely-used packages across the millions of .NET projects. There's a good chance, then, that at least some of the packages listed on the first few pages will be useful in your projects.
-
-
-
-For specific needs, searching by tags (within Visual Studio's Package Manager or on a portal like nuget.org) is the most common means of discovering a suitable package. For example, searching on "json" will list all NuGet packages that are tagged with that keyword and thus have some relationship to the JSON data format.
-
-
-
-You can also search using the package ID, if you know it. See [Search Syntax](#search-syntax) below.
-
-At this time, search results are sorted only by relevance, so you generally want to look through at least the first few pages of results for packages that suit your needs, or refine your search terms to be more specific.
-
-
-### Native C++ packages
-
-NuGet 2.5+ supports native C++ packages can that can be used in C++ projects in Visual Studio. This enables the **Manage NuGet Packages** context-menu command for projects, introduces a `native` target framework, and provides MSBuild integration.
-
-To find native packages on [nuget.org](https://www.nuget.org/packages), search using `tag:native`. Such packages typically provide `.targets` and `.props` files, which NuGet imports automatically when the package is added to a project.
-
-For information on creating native packages, see [Native packages](/ndocs/create-packages/native-packages).
-
-
-## Evaluating packages
-
-The best way to evaluate the usefulness of a package is, of course, to download it and try it out. After all, every highly popular package got started with only a few developers using it, and you might be one of the early adopters!
-
-At the same time, using a NuGet package means taking a dependency on it, so you'll want to make sure it's robust and reliable. Because installing and directly testing a package is very time-consuming, you can also learn a lot about a package's quality by using the information on a package's listing page:
-
-- *Downloads statistics*: a the package page you'll see total downloads, downloads of the most recent version, and average downloads per day. Larger numbers obviously indicates that many other developers have taken a dependency on the package, which means that it has proven itself.
- 
-
-- *Version history*: on the package page, look at the date of the most recent update, and scroll down to see the version history. A well-maintained package will have recent updates, and will have a rich version history. Neglected packages will have few updates and often haven't been updated in some time.
-
- 
-
-- *Recent installs*: on the package page, click **Package Statistics** on the left side. This will show you the package installs for the last six weeks. A package with more current use is obviously a better choice than one without.
-- *Restore vs. new install*: on the same package statistics page, uncheck the **Version** checkbox and check **Operation** to see a chart of package restores vs. new installs (below).
-
- 
-
-- *Dependency installs*: the same **Operation** chart above has an "Install-Dependency" bar that indicates how many other NuGet packages have taken a dependency on this one. This is an even stronger indication that other developers find the package reliable.
-- *Support*: on the package page, click **Project Site** if available to see what support opions are available. A project with a dedicated site is generally better supported.
-- *Developer history*: on the package page, click the listed **Owners** to see what other packages they've published. Those with multiple packages are more likely to continue supporting their work in the future.
-- *Open source contributions*: many packages are maintained in an open-source repository, making it possible for developers depending on it to directly contribute bug fixes and feature improvements. The contribution history of any given package is also a good indicator of how many developers are actively involved.
-- *Interview the owners*: all this is not to say that new developers are not equally committed to producing great packages for you to use, and it's certainly good to give them a chance to bring something new to the NuGet ecosystem. With this in mind, you can always talk directly to the package developers through the **Contact Owners** option on the listing page. Chances are, they'll be happy to work directly with you to serve your needs!
-
-
- Note
- Always be mindful of a package's licence terms, which you can see by clicking License on a package's listing page on nuget.org.
-
-
-
- Note
- Every package that is uploaded to nuget.org is scanned for viruses. All packages listed on nuget.org are also scanned periodically.
-
-
-
-## Search Syntax
-
-NuGet package search works the same on nuget.org, from the NuGet CLI, and within the NuGet Package Manager extension in Visual Studio. In general, search is applied to keywords as well as package descriptions.
-
-- **Keywords**: Search will look for relevant packages that contain with all of the provided keywords. Example:
-
- modern UI javascript
-
-- **Phrases**: Entering terms within quotation marks will look for exact matches to those terms (case-insensitive). Example:
-
- "modern UI" package
-
-- **Filtering**: You can apply a search term to a specific property by using the syntax `:` where (case-insensitive) can be `id`, `packageid`, `version`, `title`, `tags`, `author`, `description`, `summary`, and `owner`. Terms can be contained in quotes if needed, and you can search for multiple properties at the same time. Also, searches on the `id` property are substring matches, whereas `packageid` uses an exact match. Examples:
-
- id:NuGet.Core //Match any part of the id property
- Id:"Nuget.Core"
- ID:jQuery
- title:jquery //Searches title as shown on the package listing
- PackageId:jquery //Match the package id exactly
- id:jquery id:ui //Search for multiple terms in the id
- id:jquery tags:validation //Search multiple properties
- id:"jquery.ui" //Phrase search
- invalid:jquery ui //Unsupported properties are ignored, so this
- //is the same as searching on jquery ui
diff --git a/docs/Consume-Packages/Managing-the-NuGet-Cache.md b/docs/Consume-Packages/Managing-the-NuGet-Cache.md
deleted file mode 100644
index 160b5836c..000000000
--- a/docs/Consume-Packages/Managing-the-NuGet-Cache.md
+++ /dev/null
@@ -1,31 +0,0 @@
-#Managing the NuGet cache
-
-NuGet manages several local caches to avoid downloading packages that are already on the machine, and to provide offline support. NuGet versions 2.8 and later automatically fall back to the cache when installing or reinstalling packages without a network connection.
-
-To see the list of cache locations, use the [locals command](/ndocs/tools/nuget.exe-cli-reference#locals):
-
- nuget locals all -list
-
-Typical output is as follows:
-
- http-cache: C:\Users\kraigb\AppData\Local\NuGet\v3-cache #3.x cache
- packages-cache: C:\Users\kraigb\AppData\Local\NuGet\Cache #2.x cache
- global-packages: C:\Users\kraigb\.nuget\packages\ #Global cache
- temp: C:\Users\kraigb\AppData\Local\Temp\NuGetScratch #Temp folder
-
-If you encounter package installation problems or otherwise want to ensure that you're installing packages from the remote gallery, use the `locals -clear` option in one or more of the following ways:
-
- nuget locals http-cache -clear #Clear the 3.x cache
- nuget locals packages-cache -clear #Clear the 2.x cache
- nuget locals global-packages -clear #Clear the global cache
- nuget locals temp -clear #Clear the temporary cache
- nuget locals all -clear #Clears all caches
-
-Note that managing the cache is presently supported only from the NuGet command line, and not within Visual Studio or through the Package Manager Console. Also, managing the 2.x cache is not supported in NuGet 3.6 and later.
-
-The following errors can occur when using `nuget locals`:
-
-* **Clearing local resources failed: Unable to delete one or more files**
-* **The directory is not empty**
-
-These indicate that you either do not have permission to delete files in the cache, or that one or more files in the cache are in use by another process, which must be closed before the those files can be removed.
\ No newline at end of file
diff --git a/docs/Consume-Packages/Overview-and-Workflow.md b/docs/Consume-Packages/Overview-and-Workflow.md
deleted file mode 100644
index e61b8b48a..000000000
--- a/docs/Consume-Packages/Overview-and-Workflow.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Package Consumption Overview and Workflow
-
-Between nuget.org and private package galleries that your organization might establish, you can find tens of thousands of highly useful packages to use in your apps and services (including packages that support native C++ projects; see [Native C++ Packages](/ndocs/consume-packages/finding-and-choosing-packages#native-c++-packages)). But regardless of the source, consuming a package follows the same general workflow:
-
-
-
-For details, see [Finding and Choosing Packages](/ndocs/consume-packages/finding-and-choosing-packages) and the [Use a Package quickstart](/ndocs/quickstart/use-a-package).
-
-NuGet remembers the identity and version number of each installed package, recording it in either `packages.config` (NuGet 2.x) or `project.json` (NuGet 3.x) in your project root. You can look in the appropriate file at any time to see the full list of dependencies for your project.
-
-When installing packages, NuGet typically checks if the package is already available from its cache. You can manually clear this cache from the command line, as described on [Managing the NuGet cache](/ndocs/consume-packages/managing-the-nuget-cache).
-
-When adding project code to a source repository, you typically don't include NuGet packages. Those who later clone the repository, which includes build agents on systems like Visual Studio Team Services, must restore the necessary packages prior to running a build:
-
-
-
-[Package Restore](/ndocs/consume-packages/package-restore) uses the information in `packages.config` or `project.json` to reinstall all dependencies. Note that there are differences in the process between NuGet 2.x and 3.x, which are described in [Dependency Resolution](/ndocs/consume-packages/dependency-resolution).
-
-Occasionally it's necessary to reinstall packages that are already included in a project, which may also reinstall dependencies. This is easy to do using the `reinstall` command via the NuGet command line or the NuGet Package Manager Console. For details, see [Reinstalling and Updating Packages](/ndocs/consume-packages/reinstalling-and-updating-packages).
-
-Finally, NuGet's behavior is driven by `nuget.config` configuration files. Multiple files can be used to centralize certain settings at different levels, as explained in [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior).
-
-Enjoy your productive coding with NuGet packages!
-
\ No newline at end of file
diff --git a/docs/Consume-Packages/Package-Restore.md b/docs/Consume-Packages/Package-Restore.md
deleted file mode 100644
index 62d452f34..000000000
--- a/docs/Consume-Packages/Package-Restore.md
+++ /dev/null
@@ -1,212 +0,0 @@
-# NuGet Package Restore
-
-To promote a cleaner development environment and to reduce repository size, NuGet **Package Restore** installs all referenced packages before a project is built. This widely-used feature ensures that all dependencies are available in a project without requiring those packages to be stored in source control (see [Packages and Source Control](/ndocs/consume-packages/packages-and-source-control) on how to configure your repository to exclude package binaries).
-
-In this topic:
-
-* [Enabling and disabling package restore](#enabling-and-disabling-package-restore)
-* [Constraining package versions with restore](#constraining-package-versions-with-restore)
-* [Command-line restore](#command-line-restore), for all versions of NuGet
-* [Automatic restore in Visual Studio](#automatic-restore-in-visual-studio), for NuGet 2.7 and later.
-* [MSBuild-integrated restore in Visual Studio](#msbuild-integrated-restore), for NuGet 2.6 and earlier.
-* [Package restore with Team Foundation Build](#package-restore-with-team-foundation-build)
-
-To check your NuGet version, simply run `nuget.exe` on the command line and look at the first line of output.
-
-It's best to avoid mixing the automatic and MSBuild-integrated restore methods for a single project. We instead recommend [migrating to automatic restore](#migrating-to-automatic-restore).
-
-For additional details on package restore on build servers, see [Package restore with TFBuild](/ndocs/consume-packages/team-foundation-build).
-
-
- Note
- Projects configured for package restore also work with xbuild on Mono.
-
-
-##Enabling and disabling package restore
-
-Automatic restore and command-line restore is enabled by default with NuGet 2.7 and later. MSBuild-integrated restore and command-line restore is **not** enabled by default for NuGet 2.6 and earlier and must be enabled manually.
-
-Package restore is primarily enabled through **Tools > Options > [NuGet] Package Manager > General** in Visual Studio:
-
-
-
-* **Allow NuGet to download missing packages** enables all forms of package restore by changing the `packageRestore/enabled` setting in the `%AppData%\NuGet\NuGet.config` file as shown below. (For NuGet 2.6 or earlier, this setting can also be used in a project-specific `.nuget\nuget.config` file.)
-
- ...
-
-
-
-
-
-
-
-
-
- Note
- The packageRestore/enabled setting can be overridden globally by setting an environment variable called EnableNuGetPackageRestore with a value of TRUE or FALSE before launching Visual Studio or starting a build.
-
-
-
-* **Automatically check for missing packages during build in Visual Studio** enables automatic restore for NuGet 2.7 and later by changing the `packageRestore/automatic` setting in the `%AppData%\NuGet\NuGet.config` file as shown below.
-
- ...
-
-
-
-
-
-
-
-For reference, see the [NuGet config file overview](/ndocs/consume-packages/nuget-config-file-overview).
-
-MSBuild-integrated restore with NuGet 2.6 and earlier is typically enabled by right-clicking a solution in Visual Studio and selecting **Enable NuGet Package Restore**. This sets up the necessary files and folders for this option to work, as explained under [MSBuild-integrated restore in Visual Studio](#msbuild-integrated-restore).
-
-In some cases, a developer or company might want to enable or disable package restore on a machine by default for all users. This can be done by adding the same settings above to the global NuGet configuration file located in `%ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]`. Individual users can then selectively enable restore as needed on a project level. See [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior#how-settings-are-applied) for exact details on how NuGet prioritizes multiple config files.
-
-## Constraining package versions with restore
-
-When NuGet restores packages through any method, it will honor any constraints specified in either `packages.config` or `project.json`:
-
-- `packages.config`: Specify a version range in the `allowedVersion` property of the dependency. See [Reinstalling and Updating Packages](/ndocs/consume-packages/reinstalling-and-updating-packages#constraining-upgrade-versions). For example:
-
-
-
-- `project.json`: Specify a version range directly with the dependency's version number. For example:
-
- "newtonsoft.json": "[6, 7)"
-
-In both cases, use the notation described in [Dependency versions](/ndocs/create-packages/dependency-versions).
-
-
-## Command-line restore
-
-For NuGet 2.6 and earlier, you use the [Install](/ndocs/tools/nuget.exe-cli-reference#install) command and point to the `packages.config` file that lists all the dependencies.
-
-For NuGet 2.7 and above, use the [Restore](/ndocs/tools/nuget.exe-cli-reference#restore) command to restore all packages in a solution (using either `packages.config` in NuGet 2.x and later or `project.json` in NuGet 3.x and later). For a given project folder such as `c:\proj\app`, the common variations below each restore the packages:
-
- c:\proj\app\> nuget restore
- c:\proj\app\> nuget.exe restore app.sln
- c:\proj\> nuget restore app
-
-## Automatic restore in Visual Studio
-
-With NuGet 2.7 and later, Visual Studio automatically restores missing packages by default at the beginning of a build. This behavior can be changed by unchecking **Tools > Options > [NuGet] Package Manager > General > Automatically check for missing packages during build in Visual Studio**.
-
-Automatic restore is also ignored if a `.nuget\NuGet.targets` file exists in a project, indicating that the project is configured for MSBuild-integrated restore. This can cause some errors as described below in [Automatic restore errors](#automatic-restore-errors). To update a project, see [Migrating to automatic restore](#migrating-to-automatic-restore).
-
-When enabled, automatic restore works as follows:
-
-1. A `.nuget` folder is created in the solution containing a `nuget.config` file that contains only a single setting for `disableSourceControlIntegration` (as described in [Packages and source control](/ndocs/consume-packages/packages-and-source-control) for Team Foundation Version Control).
-2. When a build begins, Visual Studio instructs NuGet to restore packages.
-3. NuGet recursively looks for all `packages.config` files in the solution (NuGet 2.x), or looks for `project.json` (NuGet 3.x).
-4. For each packages listed in the configuration files, NuGet checks if it exists in the solution's `packages` folder.
-5. If the package is not found, NuGet attempts to retrieve the package from its cache first (see [Managing the NuGet cache](/ndocs/consume-packages/managing-the-nuget-cache). If the package is not in the cache, NuGet downloads the package from the enabled sources as listed in **Tools > Options > [NuGet] Package Manager > Package Sources**, in the order that the sources appear.
-6. If the download is successful, NuGet caches it, and then installs the package into the `packages` folder; otherwise NuGet fails and the build fails.
-
-During this process, developers see a progress dialog with the option to cancel package restore.
-
-
-### Automatic restore errors
-
-If you're using NuGet 2.7 or later and have a solution that is still configured for MSBuild-integrated restore, you may have an older version of `nuget.exe` in the solution's `.nuget` folder. This will cause builds to fail with an error stating that you have not given consent to restore packages.
-
-To correct these errors, do one of the following:
-
-1. [Migrate the project to automatic restore](#migrating-to-automatic-restore).
-2. Update `nuget.exe` in the `.nuget` folder** as follows
-
- cd .nuget
- nuget update -self
-
-3. Reset consent in your `%AppData%\NuGet\NuGet.config` file by going to **Tools > Options > NuGet Package Manager > General** in Visual Studio, uncheck and re-check both **Package Restore** options, and click OK. This re-saves `NuGet.config` with the proper consent settings for NuGet 2.6 and earlier.
-
-
-## MSBuild-integrated restore
-
-
- Note
- Although MS-Build integrated restore still works with NuGet 2.7 and later, we recommended that you migrate to automatic restore instead because it's simpler and more robust.
-
-
-As noted before, MSBuild-integrated restore with NuGet 2.6 and earlier is typically enabled by right-clicking a solution in Visual Studio and selecting **Enable NuGet Package Restore**. This has the following effects:
-
-- NuGet creates a `.nuget` folder in the solution containing `nuget.exe`, `nuget.config`, and `nuget.targets` files.
-- NuGet updates all projects in the solution to include a `true` flag and to import `nuget.targets`. These cause MSBuild to invoke `nuget.exe` to restore packages before a build provided that the **Tools > Options > NuGet Package Manager > General > Allow NuGet to download missing packages** option is checked.
-
-Again, this option is **not** checked by default for NuGet 2.6 and earlier and must be manually set for package restore to work. For a custom build `.proj`, a pre build `` action must also be added manually to restore packages.
-
-With MSBuild-integrated restore, packages that are downloaded by Visual Studio will be automatically added to Team Foundation Version Control by default when the project is connected to a repository. To change this behavior, see [Omitting packages with Team Foundation Version Control](/ndocs/consume-packages/packages-and-source-control#omitting-packages-with-team-foundation-version-control).
-
-
-### Migrating to automatic restore
-
-Although the MSBuild-integrated restore approach works, it has several drawbacks:
-
-- It requires additional files within the solution folder.
-- It requires importing a `.targets` file into all projects in the solution, which this can introduce issues when projects are shared among multiple solutions.
-- Projects will fail to load if `nuget.targets` cannot be found.
-- Projects won't build successfully if any of the restored NuGet packages extend MSBuild through a targets/props file import.
-- Packages are automatically added to Team Foundation Version Control, when in use, unless specifically disabled.
-- It is not compatible with ASP.NET web site projects created in Visual Studio.
-
-To avoid all these issues, it's recommended to migrate any project using MSBuild-integrated restore to use the automatic restore capabilities of NuGet 2.7 and above.
-
-The process is as follows:
-
-1. Close Visual Studio to avoid file potential file locks and conflicts.
-2. If using TFS:
- a. Remove `nuget.exe` and `nuget.targets` from the solution's `.nuget` folder and remove those files from the solution workspace.
- b. Retain `nuget.config` with the `disableSourceControlIntegration` setting as explained in [Omitting packages with Team Foundation Version Control](/ndocs/consume-packages/packages-and-source-control#omitting-packages-with-team-foundation-version-control).
-3. If not using TFS:
- a. Remove the `.nuget` folder from the solution and the solution workspace.
-4. Edit each project file in the solution, remove the `<RestorePackages>` element, and remove any references to the `nuget.targets` file. Those settings generally appear as follows:
-
- true
- ...
-
- ...
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
- Tip
- Owen Johnson has created a PowerShell migration script that can work in many cases, but is used at your own risk. Be sure to commit your project to source control or make a backup before using it.
-
-
-To test the migration, do the following:
-
-1. Remove the `packages` folder from the solution.
-2. Open the solution in Visual Studio and start a build.
-1. Automatic restore should download and install each dependency package, without adding them to source control.
-
-
-## Package Restore with Team Foundation Build
-
-Package restore is commonly used when building projects on build servers, as with Team Foundation Server (TFS) and Visual Studio Team Services (as well as other build systems, which are not covered here).
-
-### Visual Studio Team Services
-
-When creating a build definition on Team Services, simply include the Restore NuGet Packages task in the definition before any build task. This task is included by default in a number of build templates.
-
-
-
-
-### Team Foundation Server
-
-With TFS 2013 and later, packages are automatically restored by default during build, provided that you're using a Team Build Template for Team Foundation Server 2013 or later.
-
-If you're using a previous version of build templates (such as in a project that's been migrated from earlier versions of TFS), you'll need to also migrate those build templates to TFS 2013. This essentially means recreating the custom parts of the Build Templates using the appropriate template for your source control (TFVC or Git).
-
-For earlier version of TFS, you can simply include a build step to invoke [command-line restore](#command--line-restore) as described earlier.
-
-For more details see then [Walkthrough of Package Restore with Team Foundation Build](/ndocs/consume-packages/team-foundation-build).
-
-
-### Command-line restore wrapped in MSBuild
-
-With existing build servers and MSBuild-based projects, you can also choose to to wrap the command line in a regular MSBuild project. This minimizes changes on the server and also provides built-in support for aggregated logging and error reporting. This differs from the usual MSBuild-integrated restore as it runs before any other build process happens, instead of as part of those other processes.
-
diff --git a/docs/Consume-Packages/Packages-and-Source-Control.md b/docs/Consume-Packages/Packages-and-Source-Control.md
deleted file mode 100644
index 40d79df83..000000000
--- a/docs/Consume-Packages/Packages-and-Source-Control.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Packages and source control
-
-Developers typically omit binaries, such as NuGet packages, from their source control repository and rely instead on [package restore](/ndocs/consume-packages/package-restore) to reinstall a project's dependencies before doing a build.
-
-The reasons for doing so include the following:
-
-1. Distributed version control systems, such as Git, include full copies of every version of every file within the repository. Binary files that are frequently updated will lead to significant bloat and lengthens the time it takes to clone the repository.
-2. When packages are included in the repository, developers are liable to add references directly to package contents on disk rather than referencing packages through NuGet, which can lead to hard-coded path names in the project.
-3. It becomes harder to "clean" your solution of any unused package folders, as you need to ensure you don't delete any package folders still in use.
-4. By omitting packages, you maintain clean boundaries of ownership between your code and the packages from others that you depend upon. Many NuGet packages are maintained in their own source control repositories already.
-
-Note that although package restore is the default behavior with NuGet, some manual work is necessary to omit packages (the `packages` folder in your project) from source control, as described in the following sections.
-
-## Omitting packages with Git
-
-Use the [.gitignore file](https://www.kernel.org/pub/software/scm/git/docs/gitignore.html) to have Git ignore the contents of the `packages` folder. For reference, see the [sample `.gitignore` for Visual Studio projects](https://github.com/github/gitignore/blob/master/VisualStudio.gitignore).
-
-The important parts of the `.gitignore` file are:
- # Ignore NuGet Packages
- *.nupkg
- # Ignore the packages folder
- **/packages/*
- # except build/, which is used as an MSBuild target.
- !**/packages/build/
- # Uncomment if necessary; generally it will be regenerated when needed
- #!**/packages/repositories.config
-
-
-## Omitting packages with Team Foundation Version Control
-
-
- Note
- Follow these instructions if possible before adding your project to source control. Otherwise, manually delete the `packages` folder from your repository and check in that change before continuing.
-
-
-To disable source control integration with TFVC for selected files:
-
-1. Create a folder called `.nuget` in your solution folder (where the `.sln` file is).
- * Tip: on Windows, to create this folder in Windows Explorer, use the name `.nuget.` *with* the training dot.
-2. In that folder, create a file named `NuGet.config` and open it for editing.
-3. Add the following text as a minimum, where the [disableSourceControlIntegration](/ndocs/schema/nuget.config-file#solution-section) setting instructs Visual Studio to skip everything in the `packages` folder:
-
-
-
-
-
-
-
-
-4. If you are using TFS 2010 or earlier, cloak the `packages` folder in your workspace mappings.
-5. On TFS 2012 or later, or with Visual Studio Team Services, add a [`.tfignore`](https://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore) file with the content below to explicitly ignore modifications to the `\packages` folder on the repository level. (You can create the file in Windows Explorer using the name a `.tfignore.` with the trailing dot, but you might need to disable the "Hide known file extensions" option first.):
-
- # Ignore the NuGet packages folder in the root of the repository.
- # If needed, prefix 'packages' with additional folder names if it's
- # not in the same folder as .tfignore.
- packages
-
- # include package target files which may be required for msbuild,
- # again prefixing the folder name as needed.
- !packages/*.targets
-
-5. Add `NuGet.config` and `.tfignore` to source control and check in your changes.
diff --git a/docs/Consume-Packages/Reinstalling-and-Updating-Packages.md b/docs/Consume-Packages/Reinstalling-and-Updating-Packages.md
deleted file mode 100644
index 290feb8ef..000000000
--- a/docs/Consume-Packages/Reinstalling-and-Updating-Packages.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# Reinstalling and Updating Packages
-
-There are a number of situations, described below under [When to Reinstall a Package](#when-to-reinstall-a-package), where references to a package might get broken within a Visual Studio project. In these cases, uninstalling and then reinstalling the same version of the package will restore those reference to working order.
-
-Being mindful of the [Considerations](#considerations) described later, you can easily reinstall any package using the following command in the Visual Studio Package Manager Console (**Tools** > **NuGet Package Manager** > **Package Manager Console**):
-
-
- Update-Package –reinstall <package_name>
-
-
-Using this command is much easier than removing a package and then trying to locate the same package in the NuGet gallery with the same version.
-
-The same command without `-reinstall` will update a package to a newer version, if applicable:
-
-
- Update-Package <package_name>
-
-
-Any updates are subject to version constraints indicated in `packages.config`, as described below in [Constraining upgrade versions](#constraining-upgrade-versions), but do not apply to projects using `project.json`.
-
-For complete usage, refer to the [PowerShell reference for Update-Package](/ndocs/tools/powershell-reference#update-package).
-
-## When to Reinstall a Package
-
-1. **Broken references after package restore**: If you've opened a project and restored NuGet packages, but still see broken references, try reinstalling each of those packages.
-2. **Project is broken due to deleted files**: NuGet does not prevent you from removing items added from packages, so it's easy to inadvertently modify contents installed from a package and break your project. To restore the project, reinstall the affected packages.
-3. **Package update broke the project**: If an update to a package breaks a project, the failure is generally caused by a dependency package which may have also been. To restore the state of the dependency, reinstall that specific package.
-4. **Project Retargeting or Upgrade**: This can be useful when a project has been retargeted or upgraded and if the package requires reinstallation due to the change in target framework. NuGet 2.7 and later shows a build error in such cases immediately after project retargeting, and subsequent build warnings let you know that the package may need to be reinstalled. For project upgrade, NuGet shows an error in the Project Upgrade Log.
-5. **Improved NuGet package development cycle**: Package authors often need to reinstall the same version of package they're developing to test the behavior. The `Install-Package` command does not provide an option to force a reinstall, so use `Update-Package -reinstall` instead.
-
-### Considerations
-
-The following may be affected when reinstalling a package:
-
-1. **Reinstalling packages according to project target framework retargeting**
- * In a simple case, just reinstalling a package using `Update-Package –reinstall ` work. A package that is installed against an old target framework gets uninstalled and the same package gets installed against the current target framework of the project.
- * In some cases, there may be a package that does not support the new target framework.
- - If a package supports portable class libraries (PCLs) and the project is retargeted to a combination of platforms no longer supported by the package, references to the package will be missing after reinstalling.
- - This can surface for packages you're using directly or for packages installed as dependencies. It's possible for the package you're using directly to support the new target framework while its dependency does not.
- - If reinstalling packages after retargeting your application results in build or runtime errors, you may need to revert your target framework or search for alternative packages that properly support your new target framework.
-
-2. **Reinstalling packages with dependencies**
- * `Update-Package –reinstall` reinstalls the same version of the original package, but installs the latest version of dependencies unless specific version constraints are provided. This allows you to update only the dependencies as required to fix an issue. However, if this rolls a dependency back to an earlier version, you can use `Update-Package ` to reinstall that one dependency without affecting the dependent package.
- * `Update-Package –reinstall -ignoreDependencies` reinstalls the same version of the original package but does not reinstall dependencies. Use this when updating package dependencies might result in a broken state
-
-3. **Reinstalling packages when dependent versions are involved**
- - As explained above, reinstalling a package does not change versions of any other installed packages that depend on it. It's possible, then, that reinstalling a dependency could break the dependent package.
-
-
-## Constraining upgrade versions
-
-In NuGet 3.x with projects using `project.json` to list dependencies, installing or updating a package will *always* install the latest version available from the package source.
-
-In projects using `packages.config`, the same behavior applies unless you specifically constrain the version range. For example, if you know that your application will work only with version 1.x of a package but not 2.0 and above, perhaps due to a major change in the package API, then you'd want to constrain upgrades to 1.x versions. This prevents accidental updates that would break the application.
-
-To set a constraint, open `packages.config` in a text editor, locate the dependency in question, and add the `allowedVersions` attribute with a version range. For example, to constrain updates to version 1.x, set `allowedVersions` to `[1,2]`:
-
-
-
-
-
-
-
-
-In all cases, use the notation described in [Dependency versions](/ndocs/create-packages/dependency-versions).
-
-
\ No newline at end of file
diff --git a/docs/Consume-Packages/Team-Foundation-Build.md b/docs/Consume-Packages/Team-Foundation-Build.md
deleted file mode 100644
index 70c5cd8df..000000000
--- a/docs/Consume-Packages/Team-Foundation-Build.md
+++ /dev/null
@@ -1,177 +0,0 @@
-# Walkthrough of Package Restore with Team Foundation Build
-
-> Applies To:
-> - Custom MSBuild projects running on any version of TFS
-> - Team Foundation Server 2012 or earlier
-> - Custom Team Foundation Build Process Templates migrated to TFS 2013 or later
-> - Build Process Templates With Nuget Restore functionality removed
-
-> If you're using Visual Studio Team Services or on-premises Team Foundation Server 2013 with its build process templates, Automatic Package Restore happens as part of the build process.
-
-This section will provide a detailed walkthrough on how to restore packages as part of the [Team Foundation Build](http://msdn.microsoft.com/en-us/library/ms181710(v=VS.90).aspx) both, for [git](http://en.wikipedia.org/wiki/Git_(software)) as well as [TF Version Control](http://msdn.microsoft.com/en-us/library/ms181237(v=vs.120).aspx).
-
-Although this walkthrough is specific for the scenario of using [Team Foundation Service](http://tfs.visualstudio.com/), the concepts also apply to other version control- and build systems.
-
-## The General Approach
-
-An advantage of using NuGet is that you can use it to avoid checking in binaries to your version control system.
-
-This is especially interesting if you are using a [distributed version control](http://en.wikipedia.org/wiki/Distributed_revision_control) system like git because developers need to clone the entire repository, including the full history, before they can start working locally. Checking in binaries can cause significant repository bloat as binary files are typically stored without delta compression.
-
-NuGet has supported [restoring packages](/ndocs/consume-packages/package-restore) as part of the build for a long time now. The previous implementation had a chicken-and-egg problem for packages that want to extend the build process because NuGet restored packages while building the project. However, MSBuild doesn't allow extending the build during the build; one could argue that this an issue in MSBuild but I would argue that this is an inherent problem. Depending on which aspect you need to extend it might be too late to register by the time your package is restored.
-
-The cure to this problem is making sure that packages are restored as the first step in the build process. NuGet 2.7+ makes this easy via a simplified command line:
-
- nuget.exe restore path\to\solution.sln
-
-When your build process restores packages before building the code, you don't need to check-in **.targets** files
-
-
-Note Packages must be authored to allow loading in Visual Studio. Otherwise, you may still want to check in .targets files so that other developers can simply open the solution without having to restore packages first.
-
-
-The following demo project shows how to set up the build in such a way that the `packages` folders and **.targets** files don't need to be checked-in. Finally, I'll show how you can setup an automated build on the [Team Foundation Service] for this sample project.
-
-## Repository Structure
-
-Our demo project is a simple command line tool that uses the command line argument to query Bing. It targets the .NET Framework 4 and uses many of the [BCL packages](http://www.nuget.org/profiles/dotnetframework/) ([Microsoft.Net.Http](http://www.nuget.org/packages/Microsoft.Net.Http), [Microsoft.Bcl](http://www.nuget.org/packages/Microsoft.Bcl), [Microsoft.Bcl.Async](http://www.nuget.org/packages/Microsoft.Bcl.Async), and [Microsoft.Bcl.Build](http://www.nuget.org/packages/Microsoft.Bcl.Build)).
-
-The structure of the repository looks as follows:
-
-
- │ .gitignore
- │ .tfignore
- │ build.proj
- │
- ├───src
- │ │ BingSearcher.sln
- │ │
- │ └───BingSearcher
- │ │ App.config
- │ │ BingSearcher.csproj
- │ │ packages.config
- │ │ Program.cs
- │ │
- │ └───Properties
- │ AssemblyInfo.cs
- │
- └───tools
- └───NuGet
- NuGet.exe
-
-You can see that we haven't checked-in the `packages` folder nor any **.targets** files.
-
-We have, however, checked-in the `nuget.exe` as it's needed during the build. Following widely used conventions we've checked it in under a shared `tools` folder.
-
-The source code is under the `src` folder. Although our demo only uses a single solution, you can easily imagine that this folder contains more than one solution.
-
-### Ignore Files
-
-
-Note There is currently a known bug in the NuGet Client that causes the client to still add the packages folder to version control. A workaround is to disable the source control integration. In order to do that, you'll need a nuget.config file in the .nuget folder that is parallel to your solution. If this folder doesn't exist yet, you'll need to create it. In nuget.config, add the following content:
-
-
-
-In order to communicate to the version control that we don’t intent to check-in the **packages** folders, we've also added ignore files for both git (`.gitignore`) as well as TF version control (`.tfignore`). These files describes patterns of files you don't want to check-in.
-
-The `.gitignore` file looks as follows:
-
- syntax: glob
- *.user
- *.suo
- bin
- obj
- packages
-
-The `.gitignore` file is [quite powerful](https://www.kernel.org/pub/software/scm/git/docs/gitignore.html). For example, if you want to generally not check-in the contents of the `packages` folder but want to go with previous guidance of checking in the **.targets** files you could have the following rule instead:
-
- packages
- !packages/**/*.targets
-
-This will exclude all `packages` folders but will re-include all contained **.targets** files. By the way, you can find a template for `.gitignore` files that is specifically tailored for the needs of Visual Studio developers [here](https://github.com/github/gitignore/blob/master/VisualStudio.gitignore).
-
-TF version control supports a very similar mechanism via the [.tfignore](http://msdn.microsoft.com/en-us/library/ms245454.aspx) file. The syntax is virtually the same:
-
- *.user
- *.suo
- bin
- obj
- packages
-
-## build.proj
-
-For our demo, we keep the build process fairly simple. We'll create an MSBuild project that builds all solutions while making sure that packages are restored before building the solutions.
-
-This project will have the three conventional targets `Clean`, `Build` and `Rebuild` as well as a new target `RestorePackages`.
-
-- The `Build` and `Rebuild` targets both depend on `RestorePackages`. This makes sure that you can both run `Build` and `Rebuild` and rely on packages being restored.
-- `Clean`, `Build` and `Rebuild` invoke the corresponding MSBuild target on all solution files.
-- The `RestorePackages` target invokes `nuget.exe` for each solution file. This is accomplished by using [MSBuild's batching functionality](http://msdn.microsoft.com/en-us/library/ms171473.aspx).
-
-The result looks as follows:
-
-
-
-
-
- $(MSBuildThisFileDirectory)bin\
- Release
- $(MSBuildThisFileDirectory)src\
- $(MSBuildThisFileDirectory)tools\
-
-
-
-
- OutDir=$(OutDir);Configuration=$(Configuration)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Configuring Team Build
-
-Team Build offers various process templates. For this demonstration, we're using the [Team Foundation Service]. On-premises installations of TFS will be very similar though.
-
-Git and TF Version Control have different Team Build templates, so the following steps will vary depending on which version control system you are using. In both cases, all you need is selecting the build.proj as the project you want to build.
-
-First, let's look at the process template for git. In the git based template the build is selected via the property `1. Solution to build`:
-
-
-
-Please note that this property is a location in your repository. Since our `build.proj` is in the root, we simply used `build.proj`. If you place the build file under a folder called `tools`, the value would be `tools\build.proj`.
-
-In the TF version control template the project is selected via the property `1. Projects`:
-
-
-
-In contrast to the git based template the TF version control supports pickers (the button on the right hand side with the three dots). So in order to avoid any typing errors we suggest you use them to select the project.
-
diff --git a/docs/Consume-Packages/_metadata b/docs/Consume-Packages/_metadata
deleted file mode 100644
index 6cd7468c3..000000000
--- a/docs/Consume-Packages/_metadata
+++ /dev/null
@@ -1,10 +0,0 @@
-Overview-and-Workflow
-Finding-and-Choosing-Packages
-Reinstalling-and-Updating-Packages
-Packages-and-Source-Control
-Package-Restore
-Managing-the-NuGet-Cache
-Configuring-NuGet-Behavior
-Enabling-Symbol-Packages
-Dependency-Resolution
-Team-Foundation-Build
\ No newline at end of file
diff --git a/docs/Consume-Packages/media/Finding-01-Popularity.png b/docs/Consume-Packages/media/Finding-01-Popularity.png
deleted file mode 100644
index a065b7308..000000000
Binary files a/docs/Consume-Packages/media/Finding-01-Popularity.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Finding-02-SearchResults.png b/docs/Consume-Packages/media/Finding-02-SearchResults.png
deleted file mode 100644
index 49cd15f59..000000000
Binary files a/docs/Consume-Packages/media/Finding-02-SearchResults.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Finding-03-Downloads.png b/docs/Consume-Packages/media/Finding-03-Downloads.png
deleted file mode 100644
index bcf60cb9e..000000000
Binary files a/docs/Consume-Packages/media/Finding-03-Downloads.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Finding-04-VersionHistory.png b/docs/Consume-Packages/media/Finding-04-VersionHistory.png
deleted file mode 100644
index e221ef340..000000000
Binary files a/docs/Consume-Packages/media/Finding-04-VersionHistory.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Finding-05-OperationChart.png b/docs/Consume-Packages/media/Finding-05-OperationChart.png
deleted file mode 100644
index 6258d2830..000000000
Binary files a/docs/Consume-Packages/media/Finding-05-OperationChart.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Overview-01-GeneralFlow.png b/docs/Consume-Packages/media/Overview-01-GeneralFlow.png
deleted file mode 100644
index e2c6a6ce8..000000000
Binary files a/docs/Consume-Packages/media/Overview-01-GeneralFlow.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Overview-02-RestoreFlow.png b/docs/Consume-Packages/media/Overview-02-RestoreFlow.png
deleted file mode 100644
index 379c2c6c5..000000000
Binary files a/docs/Consume-Packages/media/Overview-02-RestoreFlow.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Restore-01-AutoRestoreOptions.png b/docs/Consume-Packages/media/Restore-01-AutoRestoreOptions.png
deleted file mode 100644
index d542242a1..000000000
Binary files a/docs/Consume-Packages/media/Restore-01-AutoRestoreOptions.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Restore-02-VSTSBuild.png b/docs/Consume-Packages/media/Restore-02-VSTSBuild.png
deleted file mode 100644
index 2b66a9f3a..000000000
Binary files a/docs/Consume-Packages/media/Restore-02-VSTSBuild.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/Symbols_01-AddingSource.png b/docs/Consume-Packages/media/Symbols_01-AddingSource.png
deleted file mode 100644
index 7d5960461..000000000
Binary files a/docs/Consume-Packages/media/Symbols_01-AddingSource.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-1.png b/docs/Consume-Packages/media/projectJson-dependency-1.png
deleted file mode 100644
index 57ef85693..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-1.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-2.png b/docs/Consume-Packages/media/projectJson-dependency-2.png
deleted file mode 100644
index 5ca41d2e1..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-2.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-3.png b/docs/Consume-Packages/media/projectJson-dependency-3.png
deleted file mode 100644
index 7828a8957..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-3.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-4.png b/docs/Consume-Packages/media/projectJson-dependency-4.png
deleted file mode 100644
index 82f420d1d..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-4.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-5.png b/docs/Consume-Packages/media/projectJson-dependency-5.png
deleted file mode 100644
index cf1efb314..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-5.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-6.png b/docs/Consume-Packages/media/projectJson-dependency-6.png
deleted file mode 100644
index 49f961b9c..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-6.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-7.png b/docs/Consume-Packages/media/projectJson-dependency-7.png
deleted file mode 100644
index 60b80fbcb..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-7.png and /dev/null differ
diff --git a/docs/Consume-Packages/media/projectJson-dependency-8.png b/docs/Consume-Packages/media/projectJson-dependency-8.png
deleted file mode 100644
index 82f59fb83..000000000
Binary files a/docs/Consume-Packages/media/projectJson-dependency-8.png and /dev/null differ
diff --git a/docs/Create-Packages/Creating-a-Package.md b/docs/Create-Packages/Creating-a-Package.md
deleted file mode 100644
index c9cdc4926..000000000
--- a/docs/Create-Packages/Creating-a-Package.md
+++ /dev/null
@@ -1,408 +0,0 @@
-#Creating a Package
-
-
- Note
- This topic is intended to be a reference for the process of creating a package. For a focused walkthrough example, refer to the Create and Publish a Package Quickstart.
-
-
-No matter what your package does or what code it contains, NuGet is how you package that functionality into a component that can be shared with and used by any number of other developers.
-
-The process of creating a package always begins with creating a `.nuspec` package manifest file that describes your package contents. This manifest drives the creation of the package as well as its usage when installed into a project.
-
-This topic covers the most common steps involved in package creation:
-
-- [Deciding which assemblies to package](#deciding-which-assemblies-to-package)
-- [The role and structure of the `.nuspec` file](#the-role-and-structure-of-the--nuspec-file)
-- [Creating the `.nuspec` file](#creating-the--nuspec-file) from:
- - [An assembly DLL](#from-an-assembly-dll)
- - [A Visual Studio project](#from-a-visual-studio-project)
- - [A convention-based working directory](#from-a-convention-based-working-directory)
-- [Choosing a unique package identifier and setting the version number](#choosing-a-unique-package-identifier-and-setting-the-version-number)
-- [Setting a package type](#setting-a-package-type) (NuGet 3.5 and later)
-- [Adding a readme and other files](#adding-a-readme-and-other-files)
-- [Including MSBuild props and targets in a package](#including-msbuild-props-and-targets-in-a-package)
-- [Creating the package](#creating-the-package)
-
-After these core steps, you can incorporate a variety of other features as described in the other topics in this documentation. See [Next steps](#next-steps) below for a list of those options.
-
-## Deciding which assemblies to package
-
-In general, it's a best practice to have one NuGet package per assembly, provided that each assembly is independently useful. For example, if you have a Utilities.dll that depends on Parser.dll, and Parser.dll is useful on its own, then create one package for each.
-
-However, if your package contains assemblies that are used exclusively by your package, then it's fine to include them. For example, if Utilities.dll depends on Utilities.resources.dll, where the latter is not useful on its own, then you can put both in the same package.
-
-
- Note
- When a package is installed into a project, NuGet automatically adds assembly references to the package's DLLs, excluding those that are named .resources.dll because they are assumed to be localized satellite assemblies (see Creating localized packages). For this reason, avoid using ".resources.dll" for files that otherwise contain essential package code.
-
- Solution-level packages (NuGet 2.x only)
- NuGet 2.x supports the notion of a solution-level package that installs tools or additional commands for the Package Manager Console, but does not add references, content, or build customizations to any projects in the solution.
-
- A package is considered a solution-level package if it does not contain any files in its lib, content, or build directories. If the package has dependencies, they also must not have files in their lib, content, or build directories.
-
- When a solution-level package is installed, it is tracked in a packages.config file in the .nuget directory, rather than in a packages.config file in a specific project.
-
-
-## From a convention-based working directory
-
-In addition to assemblies and simple files like a readme, some packages may contain the following:
-
-- Content and source code that should be injected into the target project
-- PowerShell scripts (packages used in NuGet 2.x can include installation scripts as well, which is no longer supported in NuGet 3.x and later.)
-- Transformations to existing configuration and source code files in a project
-
-To include all these files in a package, you lay out a folder structure using the following conventions:
-
-
-
-
Folder
-
Description
-
Action upon package install
-
-
-
tools
-
PowerShell scripts and programs accessible from the Package Manager Console
-
Contents are copied to the project folder, and the tools folder is added to the PATH environment variable.
-
-
-
lib
-
Assemblies (.dll files)
-
Added as assembly references
-
-
-
content
-
Arbitrary files
-
Contents are copied to the project root
-
-
-
build
-
MSBuild .targets and .props files
-
Automatically inserted into the project file (NuGet 2.x) or project.json.lock (NuGet 3.x)
-
-
-
-Think of the **content** folder as the of the target application, so if you want the package to add an image in the application's */images* folder, place it in the *content/images* folder of the package.
-
-Next, from the root folder of this layout, run the following command to create the `.nuspec` file:
-
-
- nuget spec
-
-
-In this case, the `.nuspec` will not contain any explicit references to the folder structure, but all those files will be automatically included when creating the package later on.
-
-## Choosing a unique package identifier and setting the version number
-
-The package identifier in **<id>** and the version number in **<version>** are the two most important values in the manifest because they uniquely identify the exact code that's contained in the package.
-
-For the **<id>** value, the following best practices apply:
-
-- **Uniqueness**: The identifier must be unique within nuget.org or whatever gallery will be hosting the package. Before deciding on an identifier, spend a little time searching in the applicable gallery to see if that name is already used. A good pattern to follow is to use your company name as the first part of the identifier, such as `Contoso.`.
-- **Namespace-like names**: Identifiers should follow a pattern similar to namespaces in .NET, using dot notation instead of hyphens. For example, use `Contoso.Utility.UsefulStuff` rather than `Contoso-Utility-UsefulStuff` or `Contoso_Utility_UsefulStuff`. It's especially helpful to the consumers of your package to match the identifier to the namespaces of the code in the package, if applicable.
-- **Sample Packages**: If you produce a package of sample code that demonstrates how to use another package, attach `.Sample` as a suffix to the identifier, as in `Contoso.Utility.UsefulStuff.Sample`. (The sample package would of course have a dependency on the other package.) When creating a sample package, use the convention-based working directory method described earlier. In the `content` folder, arrange the sample code in a folder called `\Samples\` as in `\Samples\Contoso.Utility.UsefulStuff.Sample`.
-
-For the **<version>** value:
-
-- In general, set the version of the package to match the library, though this is not strictly required. This is a simple matter when you limit a package to a single assembly, as described earlier in [Deciding which assemblies to package](#deciding-which-assemblies-to-package). Overall, remember that NuGet itself deals with package versions when resolving dependencies, not assembly versions.
-- When using a non-standard version scheme, be sure to consider the NuGet versioning rules as explained in [Handling Dependencies](/ndocs/create-packages/dependency-versions).
-
-
- Note
- The following series of brief blog posts are also helpful to understand versioning:
-
-
-## Setting a package type
-
-Beginning with NuGet 3.5, packages can be marked with a specific *package type* to indicate the package's intended use. Packages that are not marked with a type, including all packages created with earlier versions of NuGet, are assumed to be the `Dependency` type.
-
-- `Dependency` type packages add build- or run-time assets to libraries and applications, and can be installed in any project type (assuming they are compatible).
-
-- `DotnetCliTool` type packages are extensions to the [.NET CLI](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/index) and are invoked from the command line. Such packages can be installed only in .NET Core projects and have no effect on restore operations. More details about these per-project extensions are available in the [.NET Core extensibility](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility#per-project-based-extensibility) documentation.
-
- When a DotnetCliTool package is installed, Visual Studio will place the package in the project.json `tools` node instead of the `dependencies` node.
-
-- Custom type packages use an arbitrary type identifier that conforms to the same format rules as package IDs. Any type other than Dependency and `DotnetCliTool`, however, are not recognized by the NuGet Package Manager in Visual Studio.
-
-Package types are set either in the `.nuspec` file or in `project.json`. In both cases, it's best for backwards compatibility to *not* explicitly set the `Dependency` type and to instead rely on NuGet assuming this type when no type is specified.
-
-- `.nuspec`: Indicate the package type within a `packageTypes\packageType` node under the `` element:
-
-
-
-
-
-
-
-
-
-
-
-- `project.json`: Indicate the package type within a `packOptions.packageType` property json:
-
- {
- // ...
- "packOptions": {
- "packageType": "DotnetCliTool"
- }
- }
-
-## Adding a readme and other files
-
-To directly specify files to include in the package, use the **<files>** node in the `.nuspec` file, which *follows* the <metadata> tag:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-When you include a file named `readme.txt` in the package, the contents of that file will be displayed in Visual Studio as plain text immediately after the package is installed directly (but not when when the package is installed as a dependency). For example, here's how the readme for the HtmlAgilityPack package appears:
-
-
-
-
- Note
- If you include an empty <files> node in the .nuspec file, NuGet will not include any other content in the package other than what's in the lib folder.
-
-
-
-
-## Including MSBuild props and targets in a package
-
-In some cases you might want to add custom build targets or properties in projects that consume your package, such as running a custom tool or process during build. You do this by placing files in the form `.targets` or `.props` (such as `Contoso.Utility.UsefulStuff.targets`) within the `\build` folder of the project.
-
-Files in the root `\build` folder are considered suitable for all target frameworks. To provide framework-specific files, first place those within appropriate subfolders, such as the following:
-
- \build
- \netstandard1.4
- \Contoso.Utility.UsefulStuff.props
- \Contoso.Utility.UsefulStuff.targets
- \net462
- \Contoso.Utility.UsefulStuff.props
- \Contoso.Utility.UsefulStuff.targets
-
-Then in the `.nuspec` file, be sure to refer to these files in the <files> node:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-When NuGet 2.x installs a package with `\build` files, it will add an MSBuild <Import> elements in the project file pointing to the `.targets` and `.props` files. (`.props` is added at the top of the project file; `.targets` is added at the bottom.)
-
-With NuGet 3.x, targets are not added to the project but are instead made available through the `project.lock.json`.
-
-
-## Creating the package
-
-When using an assembly or the convention-based working directory, create a package by running `nuget pack` with your `.nuspec` file:
-
-
- nuget pack <your_project>.nuspec
-
-
-When using a Visual Studio project, run `nuget pack` instead with your project file, which will automatically load the project's `.nuspec` file and replace any tokens within it using values in the project file:
-
-
- nuget pack <your_project>.csproj
-
-
-
- Note
- Using the project file directly is necessary for token replacement because the project is the source of the token values. Token replacement does not happen if you use `nuget pack` with a `.nuspec` file.
-
-
-In all cases, `nuget pack` excludes folders that start with a period, such as `.git` or `.hg`.
-
-NuGet will indicate if there are any errors in the `.nuspec` file that need correcting, such as forgetting to change values in the manifest from their defaults.
-
-Once `nuget pack` succeeds, you'll have a `.nupkg` file that you can publish to a suitable gallery as described in [Publishing a Package](/ndocs/create-packages/publish-a-package).
-
-
- Package Explorer
- A helpful way to examine a package after creating it is to open it in the Package Explorer tool. This gives you a graphical view of the package contents and its manifest. You can also rename the resulting .nupkg file to a .zip file and explore its contents directly.
-
-
-
-### Additional options
-
-You can use various command-line switches with `nuget pack` to exclude files, override the version number in the manifest, and change the output directory, among other features. For a complete list, refer to the [pack command reference](/ndocs/tools/nuget.exe-cli-reference#pack).
-
-The following options are a few that are common with Visual Studio projects:
-
-- **Referenced projects**: If the project references other projects, you can add the referenced projects as part of the package, or as dependencies, by using the `-IncludeReferencedProjects` option:
-
-
- nuget pack MyProject.csproj -IncludeReferencedProjects
-
-
- This inclusion process is recursive, so if MyProject.csproj references projects B and C, and those projects reference D, E, and F, then files from B, C, D, E, and F will be included in the package.
-
- If a referenced project includes a `.nuspec` file of its own, then NuGet adds that referenced project as a dependency instead. You will need to package and publish that project separately.
-
-- **Build configuration**: By default, NuGet will use the default build configuration set in the project file, typically *Debug*. To pack files from a different build configuration, such as *Release*, use the `-properties` option with the configuration:
-
-
- nuget pack MyProject.csproj -properties Configuration=Release
-
-
-
-- **Symbols**: to include symbols that allow consumers to step through your package code in the debugger, use the `-Symbols` option:
-
-
- nuget pack MyProject.csproj -symbols
-
-
-
-##Next Steps
-
-Once you've created a package, which is a `.nupkg` file, you can publish it to the gallery of your choice as described on [Publishing a Package](/ndocs/create-packages/publish-a-package).
-
-You might also want to extend the capabilities of your package or otherwise support other scenarios as described in the following topics:
-
-- [Handling dependencies](/ndocs/create-packages/dependency-versions)
-- [Supporting multiple target frameworks](/ndocs/create-packages/supporting-multiple-target-frameworks)
-- [Transformations of source and configuration files](/ndocs/create-packages/source-and-config-file-transformations)
-- [Localization](/ndocs/create-packages/creating-localized-packages)
-- [Pre-release versions](/ndocs/create-packages/prerelease-packages)
-
-Finally, there are additional package types to be aware of:
-
-- [Native Packages](/ndocs/create-packages/native-packages)
-- [Symbol Packages](/ndocs/create-packages/symbol-packages)
-
diff --git a/docs/Create-Packages/Dependency-Versions.md b/docs/Create-Packages/Dependency-Versions.md
deleted file mode 100644
index 4c44ccaa6..000000000
--- a/docs/Create-Packages/Dependency-Versions.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Dependency Versions
-
-When you [create a NuGet package](/ndocs/create-packages/creating-a-package), you can specify dependencies for your package in the **<dependencies>** node of the `.nuspec` file, where each dependency is listed with a **<dependency>** tag:
-
-
-
-
-
-
-
-
-
-
-
-
-
-Dependencies are installed whenever the dependent package is installed, [reinstalled](/ndocs/consume-packages/reinstalling-and-updating-packages), or included in a [package restore](/ndocs/consume-packages/package-restore). NuGet chooses the exact version of the installed dependency by using the value of the `version` attribute specified for that dependency as described in the following sections.
-
-- [Version ranges](#version-ranges)
-- [Normalized version numbers](#normalized-version-numbers)
-- [Dependency updates during package install](#dependency-updates-during-package-install).
-
-
- Best practice
- Developers most commonly specify a minimum version, which is a version number without adornmants as shown above, like 6.1.0. This allows NuGet to install that version or later.
-
-
-For additional details on how dependencies are installed, see [Reinstalling and updating packages](/ndocs/consume-packages/reinstalling-and-updating-packages) and [Dependency resolution](/ndocs/consume-packages/dependency-resolution).
-
-
-## Version ranges
-
-NuGet supports using interval notation for specifying version ranges, summarized as follows:
-
-
-
-
Notation
-
Applied rule
-
Description
-
-
-
1.0
-
1.0 ≤ x
-
Minimum version, inclusive
-
-
-
(1.0,)
-
1.0 < x
-
Mininum version, exclusive
-
-
-
[1.0]
-
x == 1.0
-
Exact version match
-
-
-
(,1.0]
-
x ≤ 1.0
-
Maximum version, inclusive
-
-
-
(,1.0)
-
x < 1.0
-
Maximum version, exclusive
-
-
-
[1.0,2.0]
-
1.0 ≤ x ≤ 2.0
-
Exact range, inclusive
-
-
-
(1.0,2.0)
-
1.0 < x < 2.0
-
Exact range, exclusive
-
-
-
(1.0)
-
invalid
-
invalid
-
-
-
-
-A few examples:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-If no version is specified for a dependency, NuGet behaves as follows:
-
-- NuGet v2.7.2 and earlier: The **latest** package version will be used
-- NuGet v2.8 and later: The **lowest** package version will be used
-
-For consistent behavior, it's recommended to always specify a version or version range for package dependencies.
-
-(For the curious, the NuGet version notation is inspired by Maven Version Range Specification, but is not identical to it.)
-
-## Normalized version numbers
-
-
- This is a breaking change for NuGet 3.4 and later.
-
-
-When obtaining packages from a repository during install, reinstall, or restore operations, NuGet 3.4 and later will treat version numbers as follows:
-
-- Leading zeroes are removed from version numbers:
-
- 1.00 is treated as 1.0
- 1.01.1 is treated as 1.1.1
- 1.00.0.1 is treated as 1.0.0.1
-
-- A zero in the fourth part of the version number will be omitted
-
- 1.0.0.0 is treated as 1.0.0
- 1.0.01.0 is treated as 1.0.1
-
-This normalization does not affect the version numbers in the packages themselves; it affects only how NuGet matches versions.
-
-However, NuGet repositories must treat these values in the same way as NuGet to prevent package version duplication. Thus a repository that contains v1.0 of a package should not also host v1.0.0 as a separate and different package.
-
-## Dependency updates during package install
-
-With NuGet 2.4.x and earlier, when a package is installed whose dependency already exists in the project, the dependency is updated to the latest version that satisfies the version constraints, even if the existing version also satisfies those constraints.
-
-For example, consider package A that depends on package B and specifies 1.0 for the version number. The source repository contains both versions 1.0, 1.1, and 1.2 of package B. If A is installed in a project that already contains B version 1.0, then B is updated to version 1.2.
-
-With NuGet 2.5 and later, if a dependency version is already satisfied, the dependency will not be updated during other package installations.
-
-In the same example above, installing package A into a project with NuGet 2.5 and later will leave package B 1.0 in the project, as it already satisfies the version constraint. However, if package A had requests version 1.1 or higher of B, then B 1.2 would be installed.
diff --git a/docs/Create-Packages/Overview-and-Workflow.md b/docs/Create-Packages/Overview-and-Workflow.md
deleted file mode 100644
index 0187b2e65..000000000
--- a/docs/Create-Packages/Overview-and-Workflow.md
+++ /dev/null
@@ -1,22 +0,0 @@
-#Overview and Workflow
-
-Creating a package starts with the code you want to package and share with others, either through the public nuget.org gallery or a private gallery within your organization. The package can also include additional files such as a readme that is displayed when the package is installed, and can include transformations to certain project files.
-
-A package can also serve only to pull in a number of other dependencies and not contain any code of its own, which is a convenient way to create a single package for an SDK that's composed of multiple independent packages. In other cases, a package may contain only symbol (.pdb) files to aid debugging.
-
-To learn and understand the creation process, start with [Creating a package](/ndocs/create-packages/creating-a-package) which will guide you through the core processes common to all packages. This includes deciding which assemblies to package, creating the `.nuspec` (manifest) file, choosing a package identity and version number, setting a package type, adding a readme, and including MSBuild props and targets. The topic ends with creating the package itself using the `nuget pack` command.
-
-From there, you can consider a number of other options for your package:
-
-- [Dependency Versions](/ndocs/create-packages/dependency-versions) discusses how to identify the exact versions that you allow for your dependencies (other packages that you consume from your package).
-- [Supporting Multiple Target Frameworks](/ndocs/create-packages/supporting-multiple-target-frameworks) describes how to create a package with multiple variants for different .NET Frameworks.
-- [Source and Config File Transformations](/ndocs/create-packages/source-and-config-file-transformations) describes how you can do both one-way token replacements in files that are added to a project, and modify `web.config` and `app.config` with settings that are also backed out when the package is uninstalled.
-- [Creating Localized Packages](/ndocs/create-packages/creating-localized-packages) describes how to structure a package with multiple language resources and how to use separate localized satellite packages.
-- [Pre-release Packages](/ndocs/create-packages/prerelease-packages) demonstrates how to release alpha, beta, and rc packages to those customers who are interested.
-- [Native Packages](/ndocs/create-packages/native-packages) describes the process for creating a package for C++ consumers.
-- [Symbol Packages](/ndocs/create-packages/symbol-packages) offers guidance for supplying symbols for your library that allow consumers to step into your code while debugging.
-
-
-When you're then ready to publish a package to nuget.org, follow the simple process in [Publish a package](/ndocs/create-packages/publish-a-package).
-
-If you want to use a private feed instead of nuget.org, see the [Hosting Packages Overview](/ndocs/hosting-packages/overview)
\ No newline at end of file
diff --git a/docs/Create-Packages/Prerelease-Packages.md b/docs/Create-Packages/Prerelease-Packages.md
deleted file mode 100644
index dfa6bc76b..000000000
--- a/docs/Create-Packages/Prerelease-Packages.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# Pre-release Versions
-
-Whenever you release an updated package with a new version number, NuGet considers that one as the "latest stable release" as shown, for example in the Package Manager UI within Visual Studio:
-
-
-
-A stable release is one that's considered reliable enough to be used in production. The latest stable release is also the one that will be installed as a package update or during package restore (subject to constraints as described in [Reinstalling and updating packages](/ndocs/consume-packages/reinstalling-and-updating-packages)).
-
-To support the software release lifecycle, NuGet 1.6 and later allows for the distribution of pre-release packages, where the version number includes a semantic versioning suffix such as `-alpha`, `-beta`, or `-rc` (as described in [semantic versioning](#semantic-versioning) later in this topic).
-
-You can specify such versions in two ways:
-
-- `.nuspec` file: include the semantic version suffix in the `version` element:
-
- 1.0.1-alpha
-
-- Assembly attributes: when building a package from a Visual Studio project (`.csproj` or `.vbproj`), use the `AssemblyInformationalVersionAttribute` to specify the version:
-
- [assembly: AssemblyInformationalVersion("1.0.1-beta")]
-
- NuGet will pick up this value instead of the one specified in the `AssemblyVersion` attribute, which does not support SemVer.
-
-
- Note
- A stable package release cannot have a pre-release dependency. This avoids accidentally installing a potentially unstable releases.
-
-
-When you’re ready to release a stable version, just remove the suffix and the package will take precedence over any pre-release versions.
-
-
-## Installing and updating pre-release packages
-
-By default, NuGet does not include pre-release versions when working with packages, but you can change this behavior as follows:
-
-- **Package Manager UI in Visual Studio**: In the **Manage NuGet Packages** UI, check the **Include prerelease** box:
-
- 
-
- Checking or unchecking this box will refresh the Package Manager UI and the list of available versions you can install.
-
-- **Package Manager Console**: Use the `-IncludePrerelease` switch with the `Find-Package`, `Get-Package`, `Install-Package`, `Sync-Package`, and `Update-Package` commands. Refer to the [PowerShell Reference](/ndocs/tools/powershell-reference).
-
-- **NuGet CLI**: Use the `-prerelease` switch with the `install`, `update`, `delete`, and `mirror` commands. Refer to the [NuGet CLI reference](/ndocs/tools/nuget.exe-cli-reference)
-
-
-## Semantic versioning
-
-The [Semantic Versioning or SemVer convention](http://semver.org/spec/v1.0.0.html) describes how to utilize strings in version numbers to convey they meaning of the underlying code.
-
-In this convention, each version has three parts, `Major.Minor.Patch`, with the following meaning:
-
-* `Major`: Breaking changes
-* `Minor`: New features, but backwards compatible
-* `Patch`: Backwards compatible bug fixes only
-
-Pre-release versions are then denoted by appending a hyphen and a string after the patch number. Technically speaking, you can use *any *string after the hyphen and NuGet will treat the package as pre-release. NuGet then displays the full version number in the applicable UI, leaving consumers to interpret the meaning for themselves.
-
-With this in mind, it's generally good to follow recognized naming conventions such as the following:
-
-- `-alpha`: Alpha release, typically used for work-in-progress and experimentation
-- `-beta`: Beta release, typically one that is feature complete for the next planned release, but may contain known bugs.
-- `-rc`: Release candidate, typically a release that's potentially final (stable) unless significant bugs emerge.
-
-
- Note
- NuGet does not support SemVer-compatible build numbers with dot notation, as in 1.0.1-build.23. You can use a form like 1.0.1-build23 but this is always considered a pre-release version.
-
-
-Whatever suffixes you use, however, NuGet will give them precedence in reverse alphabetical order:
-
- 1.0.1
- 1.0.1-zzz
- 1.0.1-rc
- 1.0.1-open
- 1.0.1-beta
- 1.0.1-alpha2
- 1.0.1-alpha
-
-As shown, the version without any suffix will always take precedence over pre-release versions.
diff --git a/docs/Create-Packages/Publish-a-package.md b/docs/Create-Packages/Publish-a-package.md
deleted file mode 100644
index 4127b71e0..000000000
--- a/docs/Create-Packages/Publish-a-package.md
+++ /dev/null
@@ -1,70 +0,0 @@
-#Publish a Package
-
-Once you have [created a package](/ndocs/create-packages/creating-a-package) with `nuget pack`, it's a simple process to make it available to other developers, either publicly or privately:
-
-- Public packages are made available to all developers globally through [nuget.org](https://www.nuget.org/packages/manage/upload). See instructions below.
-- Private packages are available to only a team or organization, by hosting them either a file share, a private NuGet server, Visual Studio Team Services package management, or a third- party repository such as myget, ProGet, Nexus Repository, and Artifactory. For additional details, see [Hosting Packages Overview](/ndocs/hosting-packages/overview))
-
-##Publish to nuget.org
-
-For nuget.org, you must first [register for a free account](https://www.nuget.org/users/account/LogOn?returnUrl=%2F) or sign in if already registered:
-
-
-
-Next, you can either upload the package through the nuget.org web portal, or push to nuget.org from the command line:
-
-- Web portal: use the Upload Package tab on nuget.org:
-
- 
-
-- Command line:
- 1. Click on your user name to navigate to your account settings.
- 2. Under **API Key**, click **copy to clipboard** to retrieve the access key you'll need in the CLI:
-
- 
-
- 3. At a command prompt, run the following command:
-
- nuget setApiKey Your-API-Key
-
- This will store your API key on the machine so that you will not need to do this step again on the same machine.
-
- 4. Push your package to NuGet Gallery using the command:
-
- nuget push YourPackage.nupkg
-
- 5. Before being made public, all packages uploaded to nuget.org are scanned for viruses and rejected if any viruses are found. All packages listed on nuget.org are also scanned periodically.
-
- 6. In your account on nuget.org, click **Manage my packages** to see the one that you just published; you'll also receive a confirmation email. Note that it might take a while for your package to be indexed and appear in search results where others can find it, during which time you'll see the following message on your package page:
-
- 
-
-
-## Managing package owners on nuget.org
-
-Although each NuGet package's `.nuspec` file defines the package's authors, the nuget.org gallery does not use that metadata to define ownership. Instead, nuget.org assigns initial ownership to the person who publishes the package. This will be either the logged-in user who uploaded the package through the nuget.org UI, or the users whose API key was used with `nuget SetApiKey` or `nuget push`.
-
-All package owners have full permissions for the package, including adding and removing other owners, and publishing updates.
-
-To change ownership of a package, do the following:
-
-1. Sign in to nuget.org with the account that is the current owner of the package.
-1. Click on your username, then on **Manage my packages**, then on the package you want to manage.
-1. Click the **Manage owners** link on the left side.
-
-From here you have several options:
-
-1. To add an owner, enter their NuGet account name and click **Add**. This sends an email to that new co-owner with a confirmation link. Once confirmed, that person has full permissions to add and remove owners. (Until confirmed, the **Manage owners** page will indicate "pending approval" for that person).
-1. To remove an owner, select their name on the **Manage owners** and click **Remove**.
-1. To transfer ownership (as when ownership changes or a package was published under the wrong account), simply add the new owner, and once they've confirmed ownership they can remove you from the list.
-
-To assign ownership to a company or group, create a nuget.org account using an email alias that is forwarded to the appropriate team members. For example, various Microsoft ASP.NET packages are co-owned by the [microsoft](http://nuget.org/profiles/microsoft) and [aspnet](http://nuget.org/profiles/aspnet) accounts, which simply such aliases.
-
-### Recovering package ownership
-
-Occasionally, a package may not have an active owner. For example, the original owner may have left the company that produces the package, nuget.org credentials are lost, or earlier bugs in the gallery left a package ownerless.
-
-If you are the rightful owner of a package and need to regain ownership, use the [contact form](https://www.nuget.org/policies/Contact) on nuget.org to explain your situation to the NuGet team. We will then follow a process to verify your ownership of the package, including trying to locate the existing owner through the package'p Project URL, Twitter, email, or other means. But if all else fails, we can send you a new invite to become an owner.
-
-
-
diff --git a/docs/Create-Packages/Source-and-Config-File-Transformations.md b/docs/Create-Packages/Source-and-Config-File-Transformations.md
deleted file mode 100644
index bbe44ca55..000000000
--- a/docs/Create-Packages/Source-and-Config-File-Transformations.md
+++ /dev/null
@@ -1,155 +0,0 @@
-# Source Code and Configuration File Transformations
-
-NuGet supports the ability to make transformations to source code and configuration files at package install and uninstall times.
-
-A **source code transformation** applies one-way token replacement to files in the package's `content` folder when the package is installed, where tokens refer to Visual Studio [project properties](https://msdn.microsoft.com/library/vslangproj.projectproperties_properties.aspx). This allows you to insert a file into the project's namespace, or to customize code that would typically go into `global.asax` in an ASP.NET project.
-
-A **config file transformation** allows you to modify files that already exist in a target project, such as `web.config` and `app.config`. For example, your package might need to add an item to the `modules` section in the config file. This transformation is done by including special files in the package that describe the sections to add to the configuration files. When a package is uninstalled, those same changes are then reversed, making this a two-way transformation.
-
-
-## Specifying source code transformations
-
-1. Files that you want to insert from the package into the project must be located within the package's `content` folder. For example, if you want a file called `ContosoData.cs` to be installed in a `Models` folder of the target project, it must be inside the `content\Models` folder in the package.
-
-2. To instruct NuGet to apply token replacement at install time, append `.pp` to the source code file name. After installation, the file will not have the `.pp` extension.
-
- For example, to make transformations in `ContosoData.cs`, name the file in the package `ContosoData.cs.pp`. After installation it will appear as `ContosoData.cs`.
-
-3. In the source code file, use case-insensitive tokens of the form `$token$` to indicate values that NuGet should replace with project properties:
-
- namespace $rootnamespace$.Models {
- public struct CategoryInfo {
- public string categoryid;
- public string description;
- public string htmlUrl;
- public string rssUrl;
- public string title;
- }
- }
-
- Upon installation, NuGet replaces `$rootnamespace$` with `Fabrikam` assuming the target project's whose root namespace is `Fabrikam`.
-
-The `$rootnamespace$` token is the most commonly used project property; all others are listed in the [Project Properties](https://msdn.microsoft.com/library/vslangproj.projectproperties_properties.aspx) documentation on MSDN. Be mindful, of course, that some properties might be specific to the project type.
-
-
-## Specifying config file transformations
-
-As described in the sections that follow, config file transformations can be done in two ways:
-
-- Include `app.config.transform` and `web.config.transform` files in your package's `content` folder, where the `.transform` extension tells NuGet that these files contain the XML to merge with existing config files when the package is installed. When a package is uninstalled, that same XML is removed.
-- (NuGet 2.6 and later) Include `app.config.install.xdt` and `web.config.install.xdt` files in your package's `content` folder, using [XDT syntax](https://msdn.microsoft.com/library/dd465326.aspx) to describe the desired changes. With this option you can also include a `.uninstall.xdt` file to reverse changes when the package is removed from a project.
-
-
- Note
- Transformations are not applied to .config files referenced as a link in Visual Studio.
-
-
-The advantage of using XDT is that instead of simply merging two static files, it provides a syntax for manipulating the structure of an XML DOM using element and attribute matching using full XPath support. XDT can then add, update, or remove elements, place new elements at a specific location, or replace/remove elements (including child nodes). This makes it straightforward to create uninstall transforms that back out all transformations done during package installation.
-
-### XML transforms
-
-The `app.config.transform` and `web.config.transform` in a package's `content` folder contain only those elements to merge into the project's existing `app.config` and `web.config` files.
-
-As an example, suppose the project initially contains the following content in `web.config`:
-
-
-
-
-
-
-
-
-
-To add a `MyNuModule` element to the `modules` section during package install, create a `web.config.transform` file in the package's `content` folder that looks like this:
-
-
-
-
-
-
-
-
-
-After NuGet installs the package, `web.config` will appear as follows:
-
-
-
-
-
-
-
-
-
-
-Notice that NuGet didn't replace the `modules` section, it just merged the new entry into it by adding only new elements and attributes. NuGet will not change any existing elements or attributes.
-
-When the package is uninstalled, NuGet will examine the `.transform` files again and remove the elements it contains from the appropriate `.config` files. Note that this process will not affect any lines in the `.config` file that you modify after package installation.
-
-As a more extensive example, the [Error Logging Modules and Handlers for ASP.NET (ELMAH)](https://www.nuget.org/packages/elmah/) package adds many entries into `web.config`, which are again removed when a package is uninstalled.
-
-To examine its `web.config.transform` file, download the ELMAH package from the link above, change the package extension from `.nupkg` to `.zip`, and then open `content\web.config.transform` in that ZIP file.
-
-To see the effect of installing and uninstalling the package, create a new ASP.NET project in Visual Studio (the template is under **Visual C# > Web** in the New Project dialog), and select an empty ASP.NET application. Open `web.config` to see its initial state. Then right-click the project, select **Manage NuGet Packages**, browse for ELMAH on nuget.org, and install the latest version. Notice all the changes to `web.config`. Now uninstall the package and you'll see `web.config` revert to its prior state.
-
-
-### XDT transforms
-
-With NuGet 2.6 and later, you can modify config files using [XDT syntax](https://msdn.microsoft.com/library/dd465326.aspx). You can also have NuGet replace tokens with [Project Properties](https://msdn.microsoft.com/library/vslangproj.projectproperties_properties.aspx) by including the property name within `$` delimeters (case-insensitive).
-
-For example, the following `app.config.install.xdt` file will insert an `appSettings` element into `app.config` containing the `FullPath`, `FileName`, and `ActiveConfigurationSettings` values from the project:
-
-
-
-
-
-
-
-
-
-
-For another example, suppose the project initially contains the following content in `web.config`:
-
-
-
-
-
-
-
-
-
-To add a `MyNuModule` element to the `modules` section during package install, the package's `web.config.install.xdt` would contain the following:
-
-
-
-
-
-
-
-
-
-
-After installing the package, `web.config` will look like this:
-
-
-
-
-
-
-
-
-
-
-To remove only the `MyNuModule` element during package uninstall, the `web.config.uninstall.xdt` file should contain the following:
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/Create-Packages/Supporting-Multiple-Target-Frameworks.md b/docs/Create-Packages/Supporting-Multiple-Target-Frameworks.md
deleted file mode 100644
index 917adb795..000000000
--- a/docs/Create-Packages/Supporting-Multiple-Target-Frameworks.md
+++ /dev/null
@@ -1,147 +0,0 @@
-#Supporting Multiple .NET Framework Versions
-
-Many libraries target a specific version of the .NET Framework. For example, you might have one version of your library that's specific to UWP, and another version that takes advantage of features in .NET Framework 4.6.
-
-Fortunately, NuGet supports putting multiple versions of the same library in a single package through the convention-based working directory method described in [Creating a package](/ndocs/create-package/creating-a-package#from-a-convention-based-working-directory).
-
-
- Note
- Assemblies that have no associated framework name or version should be stored directly in the lib folder and not in separate folders.
-
-
-In this topic:
-
-- [Framework version folder structure](#framework-version-folder-structure)
-- [Content files and PowerShell scripts](#content-files-and-powershell-scripts)
-- [Matching assembly versions and the target framework in a project](#matching-assembly-versions-and-the-target-framework-in-a-project)
-- [Grouping assemblies by framework version](#grouping-assemblies-by-framework-version)
-- [Determining which NuGet target to use](#determining-which-nuget-target-to-use)
-
-
-## Framework version folder structure
-
-When NuGet installs an assembly from a package, it checks the target .NET Framework version of the project, then selects the correct version of the assembly from the appropriate subfolder under `lib` in the package, provided those folders use the following convention:
-
- lib\{framework name}[{version}]
-
-For a complete list of supported names, see the [Target Frameworks reference](/ndocs/schema/target-frameworks#supported-frameworks). Note that names are case-sensitive
-
-The following example shows a folder structure that supports four versions of a library:
-
- \lib
- \net46
- \MyAssembly.dll
- \net461
- \MyAssembly.dll
- \uap
- \MyAssembly.dll
- \netcore
- \MyAssembly.dll
-
-
-## Content files and PowerShell scripts
-
-
- Note
- Mutable content file support and script execution is available in NuGEt 2.x, but deprecated in NuGet 3.x and later.
-
-
-With NuGet 2.x, content files and PowerShell scripts can be grouped by target framework using the same folder convention inside the `content` and `tools` folders. For example:
-
- \content
- \net46
- \MyContent.txt
- \net461
- \MyContent461.txt
- \uap
- \MyUWPContent.html
- \netcore
- \tools
- init.ps1
- \net46
- install.ps1
- uninstall.ps1
- \uap
- install.ps1
- uninstall.ps1
-
-If a framework folder is left empty, NuGet will not add assembly references or content files or run the PowerShell scripts for that framework.
-
-
- Note
- Because init.ps1 is executed at the solution level and not dependent on project, it must be placed directly under the tools folder. If placed under a framework folder, it will be ignored.
-
-
-
-## Matching assembly versions and the target framework in a project
-
-When NuGet installs a package that has multiple assembly versions, it tries to match the framework name of the assembly with the target framework of the project.
-
-If a match is not found, NuGet copies the assembly for the highest version that is less than or equal to the project's target framework.
-
-For example, consider the following folder structure in a package:
-
- \lib
- \net45
- \MyAssembly.dll
- \net461
- \MyAssembly.dll
-
-
-Installing this package in a project that targets .NET Framework 4.6, NuGet installs the assembly in the `net45` folder.
-
-## Grouping assemblies by framework version
-
-NuGet copies assemblies from only a single library folder in the package. For example, suppose a package has the following folder structure:
-
- \lib
- \net40
- \MyAssembly.dll (v1.0)
- \MyAssembly.Core.dll (v1.0)
- \net45
- \MyAssembly.dll (v2.0)
-
-
-To easily include all these files, use a wildcard in the <files> section of your `.nuspec`:
-
-
-
-
-
-When the package is installed in a project that targets .NET Framework 4.5, `MyAssembly.dll (v2.0)` is the only assembly installed. `MyAssembly.Core.dll(v1.0)` is not installed because it's not listed in the `net45` folder. (One reason why NuGet behaves this way is that `MyAssembly.Core.dll` might have merged into version 2.0 of `MyAssembly.dll`.)
-
-If you want `MyAssembly.Core.dll` to be installed for .NET Framework 4.5, place a copy in the `net45` folder.
-
-The rule about copying assemblies from only one folder also applies to the root `lib` folder. Suppose a package has the following folder structure:
-
- \lib
- \MyAssembly.dll (v1.0)
- \MyAssembly.Core.dll (v1.0)
- \Net45
- \MyAssembly.dll (v2.0)
-
-In projects that target .NET Framework 4.0 and .NET Framework 3.5, NuGet copies both `MyAssembly.dll` and `MyAssembly.Core.dll` because their location in the package does not restrict them to a specific target. But as was true of the previous example, in projects that target .NET Framework 4.5, only `MyAssembly.dll` from the `net45` folder will be copied. If you want to include `MyAssembly.Core.dll` for .NET Framework 4.5, place a copy of it in the `net45` folder.
-
-
-## Grouping assemblies by framework profile
-
-NuGet also supports targeting a specific framework profile by appending a dash and the profile name to the end of the folder.
-
- lib\{framework name}-{profile}
-
-For example, to target the Windows Phone profile, place your assembly in a folder named `sl3-wp`.
-
-Profiles supported by NuGet :
-
-* `client`: Client Profile
-* `full`: Full Profile
-* `wp`: Windows Phone
-* `cf`: Compact Framework
-
-## Determining which NuGet target to use
-
-When packaging libraries targeting the Portable Class Library it can sometimes to be tricky to determine which NuGet target you should use in your folder names and `.nuspec` file, especially if targeting only a subset of the PCL. Here are some links to useful external resources to help you with this:
-
-* [Framework profiles in .NET](http://blog.stephencleary.com/2012/05/framework-profiles-in-net.html) (stephenclearly.com)
-* [Portable Class Library profiles](http://embed.plnkr.co/03ck2dCtnJogBKHJ9EjY/preview) (plnkr.co): Table enumerating PCL profiles and their equivalent NuGet targets
-* [Portable Class Library profiles tool](https://github.com/StephenCleary/PortableLibraryProfiles) (github.com): command line tool for determining PCL profiles available on your system
diff --git a/docs/Create-Packages/Symbol-Packages.md b/docs/Create-Packages/Symbol-Packages.md
deleted file mode 100644
index 4738367be..000000000
--- a/docs/Create-Packages/Symbol-Packages.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Symbol Packages
-
-In addition to building packages for nuget.org or other sources, NuGet also supports creating associated symbol packages and publishing them to the [SymbolSource repository](http://www.symbolsource.org/Public).
-
-Package consumers can then add https://nuget.smbsrc.net/ to their symbol sources in Visual Studio. This allows consumers to step into your package code in the Visual Studio debugger.
-
-## Creating a symbol package
-
-To create a symbol package, follow these conventions:
-- Name the primary package (with your code) `{identifier}.nupkg` and include all your files except `.pdb` files.
-- Name the symbol package `{identifier}.symbols.nupkg` and include your assembly DLL, `.pdb` files, XMLDOC files, source files (see the sections that follow).
-
-You can create both packages with the `-Symbols` option, either from a nuspec file or a project file:
-
-
- nuget pack MyPackage.nuspec -Symbols
-
-
-
- nuget pack MyProject.csproj -Symbols
-
-
-## Symbol package structure
-
-A symbol package can target multiple target frameworks in the same way that a library package does, so the structure of the `lib` folder should be exactly the same as the primary package, only including `.pdb` files alongside the DLL.
-
-For example, a symbol package that targets .NET 4.0 and Silverlight 4 would have this layout:
-
- \lib
- \net40
- \MyAssembly.dll
- \MyAssembly.pdb
- \sl40
- \MyAssembly.dll
- \MyAssembly.pdb
-
-Source files are then placed in a separate special folder named `src`, which must follow the relative structure of your source repository. This is because PDBs contain absolute paths to source files used to compile the matching DLL, and they need to be found during the publishing process. A base path (common path prefix) can be stripped out. For example, consider a library built from these files:
-
- C:\Projects
- \MyProject
- \Common
- \MyClass.cs
- \Full
- \Properties
- \AssemblyInfo.cs
- \MyAssembly.csproj (producing \lib\net40\MyAssembly.dll)
- \Silverlight
- \Properties
- \AssemblyInfo.cs
- \MySilverlightExtensions.cs
- \MyAssembly.csproj (producing \lib\sl4\MyAssembly.dll)
-
-Apart from the `lib` folder, a symbol package would need to contain this layout:
-
- \src
- \Common
- \MyClass.cs
- \Full
- \Properties
- \AssemblyInfo.cs
- \Silverlight
- \Properties
- \AssemblyInfo.cs
- \MySilverlightExtensions.cs
-
-## Referring to files in the nuspec
-
-A symbol package can be built by conventions, from a folder structure as described in the previous section, or by specifying its contents in the `files` section of the manifest. For example, to build the package shown in the previous section, use the following in the `.nuspec` file:
-
-
-
-
-
-
-
-
-
-## Publishing a symbol package
-
-1. For convenience, first save your API key with NuGet (see [publish a package](/ndocs/create-packages/publish-a-package), which will apply to both nuget.org and symbolsource.org, because symbolsource.org will check with nuget.org to verify that you are the package owner.
-
-
- nuget push MyPackage.symbols.nupkg
-
-
-
-3. To publish to a different symbol repository, or to push a symbol package that doesn't follow the naming convention, use the `-Source` option:
-
-
- nuget push MyPackage.nupkg
-
-
- In this case, NuGet will publish `MyPackage.symbols.nupkg`, if present, to symbolsource.org (https://nuget.smbsrc.net/), after it publishes the primary package to nuget.org.
-
-
diff --git a/docs/Create-Packages/_metadata b/docs/Create-Packages/_metadata
deleted file mode 100644
index 69960d24b..000000000
--- a/docs/Create-Packages/_metadata
+++ /dev/null
@@ -1,12 +0,0 @@
-Overview-and-Workflow
-Creating-a-Package
-Dependency-Versions
-Supporting-Multiple-Target-Frameworks
-Source-and-Config-File-Transformations
-Creating-Localized-Packages
-Prerelease-Packages
-Native-Packages
-Symbol-Packages
-Publish-a-package
-project.json-and-UWP
-project.json-Impact
\ No newline at end of file
diff --git a/docs/Create-Packages/media/publish_APIKey.png b/docs/Create-Packages/media/publish_APIKey.png
deleted file mode 100644
index d9dd46836..000000000
Binary files a/docs/Create-Packages/media/publish_APIKey.png and /dev/null differ
diff --git a/docs/Create-Packages/media/publish_NotYetIndexed.png b/docs/Create-Packages/media/publish_NotYetIndexed.png
deleted file mode 100644
index 9996cfefb..000000000
Binary files a/docs/Create-Packages/media/publish_NotYetIndexed.png and /dev/null differ
diff --git a/docs/Create-Packages/media/publish_NuGetSignIn.PNG b/docs/Create-Packages/media/publish_NuGetSignIn.PNG
deleted file mode 100644
index 59e3a7beb..000000000
Binary files a/docs/Create-Packages/media/publish_NuGetSignIn.PNG and /dev/null differ
diff --git a/docs/Create-Packages/media/publish_UploadYourPackage.PNG b/docs/Create-Packages/media/publish_UploadYourPackage.PNG
deleted file mode 100644
index 0a396dfca..000000000
Binary files a/docs/Create-Packages/media/publish_UploadYourPackage.PNG and /dev/null differ
diff --git a/docs/Create-Packages/project.json-Impact.md b/docs/Create-Packages/project.json-Impact.md
deleted file mode 100644
index cb08d056a..000000000
--- a/docs/Create-Packages/project.json-Impact.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# project.json Impact on Package Authors
-
-The project.json system used in NuGet 3.x affects package authors in several ways as described in the following sections.
-
-- [Install and uninstall scripts are ignored](#install-and-uninstall-scripts-are-ignored)
-
-
-## Changes affecting existing packages usage
-
-Traditional NuGet packages support a set of features that are not carried over to the transitive world.
-
-### Install and uninstall scripts are ignored
-
-The transitive restore model, described in [Dependency resolution](/ndocs/consume-packages/dependency-resolution#dependency-resolution-in-nuget-3-x), does not have a concept of "package install time". A package is either present or not present, but there is no consistent process that occurs when a package is installed.
-
-Also, install scripts were supported only in Visual Studio. Other IDEs had to mock the Visual Studio extensibility API to attempt to support such scripts, and no support was available in common editors and command-line tools.
-
-### Content transforms are not supported.
-
-Similar to install scripts, transforms run on package install and are typically not idempotent. Since there is no install time anymore, XDT Transform and similar features are not supported, and will be ignored if such a package is used in a transitive scenario.
-
-
-### Content
-
-Traditional NuGet packages are shipping content files such as source code and configuration files. There are used typically in two scenarios
-
-1. Initial files dropped into the project so the user can edit them at a later time. The common example is default configuration files.
-
-2. Content files used as companions to the assemblies installed in the project. The example here would be a logo image used by an assembly.
-
-Support for content is currently disabled for similar reasons for scripts and transforms, but we are in the process of designing support for content.
-
-Content files can still be carried inside the packages, and will be ignored currently, however the end user can still copy them into the right spot.
-
-You can see one of the proposals for bringing back content files, and follow its progress, here: [https://github.com/NuGet/Home/issues/627](https://github.com/NuGet/Home/issues/627)
-
-## Impact for Package Authors
-
-Packages using the above features would have to use a different mechanism. The most commonly useful mechanism for this would be the MSBUILD targets/props that continues to get fully supported. The build system can choose to pick up other conventions in the package. This is how msbuild targets are supported as well as Roslyn analyzers. It is possible to build packages that supports targets and analyzers for packages.config and project.json scenarios.
-
-Packages that attempt to modify the project to ease startup, typically work in a very limited set of scenarios, and will instead provide a readme, or guidance on how to use the package.
-
-Most existing packages should not need to use the new package format described below.
-
-The new format enables native content as a first class scenario. This means that managed assemblies depending on close to hardware implementations to ship binary implementations alongside the managed assemblies based on the target platform. For example System.IO.Compression package is utilizing this technology. [https://www.nuget.org/packages/System.IO.Compression](https://www.nuget.org/packages/System.IO.Compression)
-
-In summary if the functionality above is not absolutely necessary, we recommend sticking with the existing package format. The new format will be supported only by NuGet 3.0.
-
-It would be possible to build packages to work for both packages.config and project.json scenarios through shimming, however it is often simpler to just structure the packages the traditional way, without the deprecated features mentioned above.
-
-
-## 3.x Package Format ##
-
-The 3.x package format allows for several new features:
-
-1. Defining a reference assembly used for compilation and a set of implementation assemblies used for runtime on different platforms/devices. Which allows you to take advantage of platform specific APIs while providing a common surface area for your consumers. Specifically this makes writing intermediate portable libraries easier.
-
-2. Allows packages to pivot on platforms e.g. operating systems or CPU architecture.
-
-3. Allows for separation of platform specific implementations to companion packages.
-
-4. Support Native dependencies as a first class citizen.
\ No newline at end of file
diff --git a/docs/Create-Packages/project.json-and-UWP.md b/docs/Create-Packages/project.json-and-UWP.md
deleted file mode 100644
index b563a531d..000000000
--- a/docs/Create-Packages/project.json-and-UWP.md
+++ /dev/null
@@ -1,196 +0,0 @@
-#Project.json and UWP
-
-This document describes a new package structure that can be used to take advantage of new features in NuGet v3. The *minClientVersion* property of your NuSpec can be used to state that you require the new features described here by setting it to 3.1. Note that NuGet v3 is available in Visual Studio 2015 and newer.
-
-## Adding UWP support to an existing package
- ##
-If you have an existing package and you want to add support for UWP applications then you don’t need to adopt the new packaging format described here. You only need to adopt this format if you require the features it describes and are willing to only work with clients that have updated to the latest version of the NuGet client.
-
-## I already target netcore45 ##
-
-If you target netcore45 already, and you don’t need to take advantage of anything new then you don’t need to do anything, netcore45 will be consumed by UWP applications.
-
-## I want to take advantage of Windows 10 specific APIs ##
-
-In this case you need to add the uap10.0 TxM to your package. Create a new directory in your package and add the assembly that has been compiled to work with Windows 10 to that directory.
-
-## I don’t need Windows 10 specific APIs, but want new .NET features or don’t have netcore45 already ##
-
-In this case you would add the new dotnet TxM to your package. Unlike other TxMs dotnet doesn’t imply a surface area or platform. It is stating that your package will work on any platform that your dependencies work on. When building a package with the dotnet TxM you are likely to have many more TxM specific dependencies in your NuSpec, as you will need to define the BCL packages you depend on, such System.Text, System.Xml, etc. The locations that those dependencies work on define where your package will work.
-
-### How do I find out my dependencies
-
-There are two ways to figure out which dependencies to list:
-
-1. Use `ILDasm` to look at your dll to see what assemblies are actually needed at runtime. Then determine which NuGet package they each come from. This is the hard way.
-2. Use the [NuSpec Dependency Generator](https://github.com/onovotny/ReferenceGenerator) **3rd party** tool. The tool automates the process and updates your .nuspec file with the dependant packages on build. It is available via a NuGet package, [NuSpec.ReferenceGenerator](https://www.nuget.org/packages/NuSpec.ReferenceGenerator/).
-
-See the project.json document for details on supports and includes features that both help in the creation of a package that support the dotnet TxM.
-
-**If your package is intended to work with the new PCL project, we highly recommend to create a dotnet folder, to avoid warnings and potential compatibility issues.**
-
-
-
-## Directory Structure ##
-
-NuGet packages using the new format have the following well-known directories and behaviors:
-
-* Build
- * MSBuild targets and props files in this folder are integrated differently into the project, but otherwise there is no change.
-
-* Tools
- * Install.ps1 and uninstall.ps1 will no longer run. Init.ps1 works as it always has.
-
-* Content
- * Content will no longer be copied automatically into a user’s project. Support for content inclusion in the project is planned for a later release
-
-* Lib
- * For many packages the lib will work the same way it does in the 2.0, but with expanded options for what names can be used inside it and better logic for picking the correct sub-directory when consuming packages. However, when used in conjunction with ref, the lib folder will contain assemblies that implement the surface area defined by the assemblies in the ref folder.
-
-* Ref
- * ref is a new, optional, directory that contains .NET assemblies defining the public surface (public types and methods) for an application to compile against. The assemblies in this folder may have no implementation, they are purely used to define surface area for the compiler. If the package has no ref directory, then the lib is both the reference assembly and the implementation assembly.
-
-* Runtimes
- * runtimes is a new, optional, directory that will contain OS specific code, such as CPU architecture and OS specific or otherwise platform-dependent binaries.
-
-
-## MSBuild targets and props files in packages ##
-
-NuGet packages can contain .props and .targets files which will be imported into any MSBuild project that the package is installed into. In NuGet 2.x, this was done by injecting statements into the .csproj file, in NuGet 3.0 there is no specific "installation to project" action. Instead the package restore process writes two files:
-
-* [projectname].nuget.props
-
-* [projectname].nuget.targets
-
-MSBuild knows to look for these two files and automatically imports them near the beginning and near the end of the project build process. This provides very similar behavior to NuGet 2, but with one major difference: **There is no guaranteed order of targets/props files in this case**. However, MSBuild does provide ways to order Targets through the BeforeTargets and AfterTargets attributes of the definition (see [https://msdn.microsoft.com/en-us/library/t50z2hka.aspx](https://msdn.microsoft.com/en-us/library/t50z2hka.aspx)).
-
-
-## Lib and Ref ##
-
-The behavior of the Lib directory hasn't changed significantly in NuGet v3. However, all assemblies must be within sub-folders named after a TxM, and can no longer be placed directly under the lib folder. A TxM is the name of a platform that a given asset in a package is supposed to work for. Logically these are an extension of the Target Framework Monikers (TFM) e.g. *net45*, *net46*, *netcore50*, and *dnxcore50* are all examples of TxMs. We use a new term TxM because a TxM can refer to a framework (TFM) as well as other platform specific surface area. For example the UWP TxM (UAP10.0) represents the .NET surface area as well as the Windows surface area for UWP applications.
-
-An example lib structure:
-
- lib
- ├───net40
- │ MyLibrary.dll
- │
- └───wp81
- MyLibrary.dll
-
-The lib folder contains assemblies that will be used at runtime. For most packages a directory under lib for each of the target TxMs is all that is required.
-
-## Ref ##
-
-There are sometimes cases where a different assembly should be used during compilation (.NET Reference Assemblies do this today). For those cases, we are introducing a new top-level folder called *ref* (short for "Reference Assemblies").
-
-Most package authors will not require the ref directory. It is useful for packages that need to provide a consistent surface area for compilation and intellisense but then have different implementation for different TxMs. The biggest use case of this will be the System.* packages that are being produced as part of shipping .NET Core on NuGet. These packages have various implementations that are being unified by a consistent set of ref assemblies.
-
-Mechanically, the assemblies included in the ref folder are the reference assemblies being passed to the compiler. For those of you who have used csc.exe these are the assemblies we are passing to the /reference ([https://msdn.microsoft.com/en-us/library/yabyz3h4.aspx](https://msdn.microsoft.com/en-us/library/yabyz3h4.aspx)) switch
-
-The structure of the ref folder is the same as lib, for example:
-
- └───MyImageProcessingLib
- ├───lib
- │ ├───net40
- │ │ MyImageProcessingLibrary.dll
- │ │
- │ ├───net451
- │ │ MyImageProcessingLibrary.dll
- │ │
- │ └───win81
- │ MyImageProcessingLibrary.dll
- │
- └───ref
- ├───net40
- │ MyImageProcessingLibrary.dll
- │
- └───portable-net451-win81
- MyImageProcessingLibrary.dll
-
-
-In this example the assemblies in the ref directories would all be identical.
-
-
-## Runtimes ##
-
-The runtimes folder contains assemblies and native libraries required to run on specific "runtimes", which are generally defined by Operating System and CPU architecture. These runtimes are identified using Runtime Identifiers (RIDs) such as win, win-x86, win7-x86, win8-64, etc.
-
-## Native light-up ##
-
-In the following example we will show a package that has a purely managed implementation for several platforms, but will use native helpers on Windows 8 where it can call into Windows 8 specific native APIs.
-
- └───MyLibrary
- ├───lib
- │ └───net40
- │ MyLibrary.dll
- │
- └───runtimes
- ├───win8-x64
- │ ├───lib
- │ │ └───net40
- │ │ MyLibrary.dll
- │ │
- │ └───native
- │ MyNativeLibrary.dll
- │
- └───win8-x86
- ├───lib
- │ └───net40
- │ MyLibrary.dll
- │
- └───native
- MyNativeLibrary.dll
-
-Given the above package the following things will happen:
-
-* When not on Windows 8 the *lib/net40/MyLibrary.dll* assembly will be used.
-
-* When on Windows 8 the *runtimes/win8-/lib/MyLibrary.dll* will be used and the native/MyNativeHelper.dll will be copied to the output of your build.
-
-In the example above the *lib/net40* assembly is purely managed code, whilst the assemblies in the runtimes folder will p/invoke into the native helper assembly to call APIs specific to Windows 8.
-
-Only a single lib directory will ever be picked, so if there is a runtime specific directory it will be chosen over non-runtime specific lib. The native directory is additive, if it exists it will be copied to the output of the build.
-
-## Managed wrapper ##
-
-Another way to use runtimes is to ship a package that is purely a managed wrapper over a native assembly. In this scenario you create a package like the following:
-
- └───MyLibrary
- └───runtimes
- ├───win8-x64
- │ ├───lib
- │ │ └───net451
- │ │ MyLibrary.dll
- │ │
- │ └───native
- │ MyImplementation.dll
- │
- └───win8-x86
- ├───lib
- │ └───net451
- │ MyLibrary.dll
- │
- └───native
- MyImplementation.dll
-
-In this case there is no top-level lib folder as that folder as there is no implementation of this package that doesn’t rely on the corresponding native assembly. If the managed assembly, MyLibrary.dll, was exactly the same in both of these cases then we could put it in a top level lib folder, but because the lack of a native assembly doesn’t cause the package to fail installing if it was installed on a platform that wasn’t win-x86 or win-x64 then the top level lib would be used but no native assembly would be copied.
-
-
-## Authoring packages for NuGet 2 and NuGet 3 ##
-
-If you want to create a package that can be consumed by projects using packages.config as well as packages using project.json then the following apply:
-
-* Ref and runtimes only work on NuGet 3. They will both be ignored by NuGet 2.
-
-* You cannot rely on install.ps1 or uninstall.ps1 to function. These files will execute when using packages.config, but will be ignored in v3. So your package needs to be usable without them running. Init.ps1 will still run on NuGet 3.
-
-* Targets and Props installation is different, you will need to make sure that your package works as expected on both clients.
-
-* Subdirectories of lib must be a TxM in NuGet 3. You cannot place libraries at the root of the lib folder.
-
-* Content will no longer be copied automatically. If you package relies on the files in content being copied into the users project then this will not happen on NuGet 3. Consumers of your package could copy the files themselves or use a tool like a task runner to automate copying the files.
-
-* You cannot rely on transforms, like web.config transformation. Transforms are not run by the NuGet 3 client.
-
-If you are supporting NuGet 2 and 3 then your minClientVersion should be the lowest version of NuGet 2 client that your package works on. In the case of an existing package it shouldn’t need to change.
\ No newline at end of file
diff --git a/docs/Guides/Create-Cross-Platform-Packages.md b/docs/Guides/Create-Cross-Platform-Packages.md
deleted file mode 100644
index 20e1a6b94..000000000
--- a/docs/Guides/Create-Cross-Platform-Packages.md
+++ /dev/null
@@ -1,244 +0,0 @@
-#Create Cross-Platform Packages
-
-A cross-platform package contains code that uses native APIs on iOS, Android, and Windows, depending on the run-time operating system. Although this is straightforward to do, it's preferable to let developers consume the package from a PCL or .NET Standard libraries through a common API surface area.
-
-In this walkthrough you'll create a cross-platform NuGet package that can be used in mobile projects on iOS, Android, and Windows.
-
-1. [Pre-requisites](#pre-requisites)
-2. [Create the project structure and abstraction code](#create-the-project-structure-and-abstraction-code)
-3. [Write your platform-specific code](#write-your-platform--specific-code)
-4. [Create and update the .nuspec file](#create-and-update-the--nuspec-file)
-5. [Package the component](#package-the-component)
-6. [Related topics](#related-topics)
-
-##Pre-requisites
-1. Visual Studio 2015 with Universal Windows Platform (UWP) and Xamarin. Install the Community edition for free from [visualstudio.com](https://www.visualstudio.com/); you can use the Professional and Enterprise editions as well, of course. To include UWP and Xamarin tools, select a Custom install and check the appropriate options.
-2. NuGet CLI. Download the latest version of nuget.exe from [nuget.org/downloads](https://nuget.org/downloads), saving it to a location of your choice. Then add that location to your PATH environment variable if it isn't already.
-
-
- Note
- nuget.exe is the CLI tool itself, not an installer, so be sure to save the downloaded file from your browser instead of running it.
-
-
-##Create the project structure and abstraction code
-
-1. Download and run the [Plugin for Xamarin Templates extension](https://visualstudiogallery.msdn.microsoft.com/afead421-3fbf-489a-a4e8-4a244ecdbb1e) for Visual Studio. These templates will make it easy to create the necessary project structure for this walkthrough.
-2. In Visual Studio, **File > New > Project**, search for `Plugin`, select the **Plugin for Xamarin** template, change the name to LoggingLibrary, and click OK.
-
-
-
-
-The resulting solution contains two PCL projects, along with a variety of platform-specific projects:
-
-- The PCL named `Plugin.LoggingLibrary.Abstractions (Portable)`, defines the public interface (the API surface area) of the component, in this case the `ILoggingLibrary` interface contained in the ILoggingLibrary.cs file. This is where you'll define the interface to your library.
-- The other PCL, `Plugin.LoggingLibrary (Portable)`, contains code in CrossLoggingLibrary.cs that will locate a platform-specific implementation of the abstract interface at run time. You typically don't need to modify this file.
-- The platform-specific projects, such as `Plugin.LoggingLibrary.Android`, each contain contain a native implementation of the interface in their respective LoggingLibraryImplementation.cs files. This is where you'll build out your library's code.
-
-By default, the ILoggingLibrary.cs file of the Abstractions project contains an interface definition, but no methods. For the purposes of this walkthrough, add a `Log` method as follows:
-
- using System;
-
- namespace Plugin.LoggingLibrary.Abstractions
- {
- ///
- /// Interface for LoggingLibrary
- ///
- public interface ILoggingLibrary
- {
- ///
- /// Log a message
- ///
- void Log(string text);
- }
- }
-
-##Write your platform-specific code
-To implement a platform-specific implementation of the `ILoggingLibrary` interface and its methods, do the following:
-
-1. Open the `LoggingLibraryImplementation.cs` file of each platform project and add the necessary code. For example (using the `Plugin.LoggingLibrary.Android` project):
-
- using Plugin.LoggingLibrary.Abstractions;
- using System;
-
- namespace Plugin.LoggingLibrary
- {
- ///
- /// Implementation for Feature
- ///
- public class LoggingLibraryImplementation : ILoggingLibrary
- {
- ///
- /// Log a message
- ///
- public void Log(string text)
- {
- throw new NotImplementedException("Called Log on Android");
- }
- }
- }
-
-2. Repeat this implementation in the projects for each platform you want to support.
-3. Right-click the iOS project, select **Properties**, click the **Build** tab, and remove "\iPhone" from the **Output path** and **XML documentation file** settings. This is just for later convenience in this walkthrough. Save the file when done.
-3. Right-click the solution, select **Configuration Manager...**, and check the **Build** boxes for the PCLs and each platform you're supporting.
-4. Right-click the solution and select **Build Solution** to check your work and produce the artifacts that you'll package next. If you get errors about missing references, right-click the solution, select **Restore NuGet Packages** to install dependencies, and rebuild.
-
-
- Note
- To build for iOS you need a networked Mac connected to Visual Studio as described on Introduction to Xamarin.iOS for Visual Studio. If you don't have a Mac available, uncheck the iOS project in the configuration manager (step 3 above).
-
-
-##Create and update the .nuspec file
-1. Open a command prompt, navigate to the `LoggingLibrary` folder that's one level below where the .sln file is, and run the NuGet `spec` command to create the initial `Package.nuspec` file:
-
-
- nuget spec
-
-
-2. Rename this file to `LoggingLibrary.nuspec` and open it in an editor.
-3. Update the file to match the following, replacing YOUR_NAME with an appropriate value. The <id> value, specifically, must be unique across nuget.org (see the naming conventions described in [Creating a package](/ndocs/create-packages/creating-a-package(#choosing-a-unique-package-identifier-and-setting-the-version-number))). Also note that you must also update the author and description tags or you'll get an error during the packing step.
-
-
-
-
- LoggingLibrary.YOUR_NAME
- 1.0.0
- LoggingLibrary
- YOUR_NAME
- YOUR_NAME
- false
- Awesome application logging utility
- First release
- Copyright 2016
- logger logging logs
-
-
-
-###Add reference assemblies
-To include platform-specific reference assemblies, add the following to the <files> element of `LoggingLibrary.nuspec` as appropriate for your supported platforms:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Note
- To shorten the names of the DLL and XML files, right-click on any given project, select the Library tab, and change the assembly names.
-
-
-###Add dependencies
-If you have specific dependencies for native implementations, use the <dependencies> element with <group> elements to specify them, for example:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-For example, the following would set iTextSharp as a dependency for the UAP target:
-
-
-
-
-
-
-
-###Final nuspec
-
-Your final .nuspec file should now look like the following, where again YOUR_NAME should be replaced with an appropriate value:
-
-
-
-
- LoggingLibrary.YOUR_NAME
- 1.0.0
- LoggingLibrary
- YOUR_NAME
- YOUR_NAME
- false
- Awesome application logging utility
- First release
- Copyright 2016
- logger logging logs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##Package the component
-With the completed .nuspec referencing all the files you need to include in the package, you're ready to run the `pack` command:
-
-
- nuget pack LoggingLibrary.nuspec
-
-
-This will generate `LoggingLibrary.YOUR_NAME.1.0.0.nupkg`. Opening this file in a tool like the [NuGet Package Explorer](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) and expanding all the nodes, you'll see the following contents:
-
-
-
-
- Note
- A .nupkg file is just a ZIP file with a different extension. You can also examine package contents, then, by change .nupkg to .zip, but remember to restore the extension before uploading a package to nuget.org.
-
-
-To make your package available to other developers, follow the instructions on [Publish a package](/ndocs/create-packages/publish-a-package).
-
-##Related topics
-
-* [Nuspec Reference](/ndocs/schema/nuspec)
-* [Symbol packages](/ndocs/create-packages/symbol-packages)
-* [Dependency Versions](/ndocs/create-packages/dependency-versions)
-* [Supporting Multiple .NET Framework Versions](/ndocs/create-packages/supporting-multiple-target-frameworks)
-* [Including MSBuild props and targets in a package](/ndocs/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package)
-* [Creating Localized Packages](/ndocs/create-packages/creating-localized-packages)
\ No newline at end of file
diff --git a/docs/Guides/Create-NET-Standard-Packages.md b/docs/Guides/Create-NET-Standard-Packages.md
deleted file mode 100644
index a06deec74..000000000
--- a/docs/Guides/Create-NET-Standard-Packages.md
+++ /dev/null
@@ -1,381 +0,0 @@
-#Create .NET Standard Packages
-
-The [.NET Standard Library](https://docs.microsoft.com/en-us/dotnet/articles/standard/library) is a formal specification of .NET APIs intended to be available on all .NET runtimes, thus establishing greater uniformity in the .NET ecosystem. The .NET Standard Library defines a uniform set of BCL (Base Class Library) APIs for all .NET platforms to implement, independent of workload. It enables developers to produce PCLs that are usable across all .NET runtimes, and reduces if not eliminates platform-specific conditional compilation directives in shared code.
-
-This guide will walk you through creating a nuget package targeting .NET Standard Library 1.4. This will work across .NET Framework 4.6.1, Universal Windows Platform 10, .NET Core, and Mono/Xamarin. For details, see the [.NET Standard mapping table](#table) later in this topic.
-
-1. [Pre-requisites](#pre-requisites)
-2. [Create the class library project](#create-the-class-library-project)
-3. [Create and update the .nuspec file](#create-and-update-the--nuspec-file)
-4. [Package the component](#package-the-component)
-5. [Additional options](#additional-options)
-5. [.NET Standard mapping table](#-net-standard-mapping-table)
-6. [Related topics](#related-topics)
-
-
-##Pre-requisites
-1. Visual Studio 2015. Install the Community edition for free from [visualstudio.com](https://www.visualstudio.com/); you can use the Professional and Enterprise editions as well, of course.
-2. .NET Core: Install .NET Core along with templates and other tools for Visual Studio 2015 from [https://go.microsoft.com/fwlink/?LinkId=824849](https://go.microsoft.com/fwlink/?LinkId=824849).
-3. NuGet CLI. Download the latest version of nuget.exe from [nuget.org/downloads](https://nuget.org/downloads), saving it to a location of your choice. Then add that location to your PATH environment variable if it isn't already.
-
-
- Note
- nuget.exe is the CLI tool itself, not an installer, so be sure to save the downloaded file from your browser instead of running it.
-
-
-
-##Create the class library project
-1. In Visual Studio, **File > New > Project**, expand the **Visual C# > Windows** node, select **Class Library (Portable)**, change the name to AppLogger, and click OK.
-
- 
-
-2. In the **Add Portable Class Library** dialog that appears, select the `.NET Framework 4.6` and `ASP.NET Core 1.0` options.
-3. Right-click the `AppLogger (Portable)` in Solution Explorer, select **Properties**, select the **Library** tab, then click **Target .NET Platform Standard** in the **Targeting** section. This will prompt for confirmation, after which you can select `.NET Standard 1.4` from the drop down:
-
- 
-
-5. Click on the **Build** tab, change the **Configuration** to `Release`, and check the box for **XML documentation file**.
-6. Add your code to the component, for example:
-
- namespace AppLogger
- {
- public class Logger
- {
- public void Log(string text)
- {
- throw new NotImplementedException("Called Log");
- }
- }
- }
-
-6. Build the project (with the Release configuration) and check that DLL and XML files are produced within the bin\Release folder.
-
-##Create and update the .nuspec file
-
-1. Open a command prompt, navigate to the folder containing `AppLogg.csproj` folder (one level below where the .sln file is), and run the NuGet `spec` command to create the initial `AppLogger.nuspec` file:
-
-
- nuget spec
-
-
-2. Open `AppLogger.nuspec` in an editor and update it to match the following, replacing YOUR_NAME with an appropriate value. The <id> value, specifically, must be unique across nuget.org (see the naming conventions described in [Creating a package](/ndocs/create-packages/creating-a-package(#choosing-a-unique-package-identifier-and-setting-the-version-number)). Also note that you must also update the author and description tags or you'll get an error during the packing step.
-
-
-
-
- AppLogger.YOUR_NAME
- 1.0.0
- AppLogger
- YOUR_NAME
- YOUR_NAME
- false
- Awesome application logging utility
- First release
- Copyright 2016 (c) Contoso Corporation. All rights reserved.
- logger logging logs
-
-
-
-3. Add reference assemblies to the nuspec file, namely the library's DLL and the IntelliSense XML file:
-
-
-
-
-
-
-
-3. Right-click the solution and select **Build Solution** to generate all the files for the package.
-
-
-##Package the component
-With the completed .nuspec referencing all the files you need to include in the package, you're ready to run the `pack` command:
-
-
- nuget pack AppLogger.nuspec
-
-
-This will generate `AppLogger.YOUR_NAME.1.0.0.nupkg`. Opening this file in a tool like the [NuGet Package Explorer](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) and expanding all the nodes, you'll see the following contents:
-
-
-
-
- Note
- A .nupkg file is just a ZIP file with a different extension. You can also examine package contents, then, by change .nupkg to .zip, but remember to restore the extension before uploading a package to nuget.org.
-
-
-To make your package available to other developers, follow the instructions on [Publish a package](/ndocs/create-packages/publish-a-package).
-
-
-##Additional options
-
-The following sections go into additional options for NuGet package creation:
-
-- [Declaring dependencies](#declaring-dependencies)
-- [Supporting multiple target frameworks](#supporting-multiple-target-frameworks)
-- [Adding targets and props for MSBuild](#adding-targets-and-props-for-msbuild)
-- [Creating localized packages](#creating-localized-packages)
-- [Adding a readme](#adding-a-readme)
-
-###Declaring dependencies
-If you have any dependencies on other NuGet packages, list those in the <dependencies> element with <group> elements. For example, to declare a dependency on NewtonSoft.Json 8.0.3 or above, add the following:
-
-
-
-
-
-
-
-
-The syntax of the *version* attribute here indicates that version 8.0.3 or above is acceptable. To specify different version ranges, refer to [Dependency Versions](/ndocs/create-packages/dependency-versions).
-
-###Supporting multiple target frameworks
-Suppose you'd like to take advantage of an API in .NET Framework 4.6.2 that is not available in .NET Standard 1.4. To do this, you'll first need to make sure the library compiles for .NET 4.6.2 by using conditional compilation or shared projects. (In Visual Studio, you can create a NetCore project, add the framework of choice to the mutliple framework section, and then build.) Then you create the package using the simple convention-based working directory technique as follows:
-
-1. In the project's root folder containing your .nuspec file, create a folder named `lib`.
-2. Inside `lib`, create folders for each platform you want to support:
-
- \lib
- \netstandard1.4
- \AppLogger.dll
- \net462
- \AppLogger.dll
-
-3. In the .nuspec file, add a `files` node under the `package` node and refer to the files in `lib` using wildcards. Note: Token replacements are not supported with the convention-based working directory approach, so replace them with literal values:
-
-
-
-
- AppLogger.YOUR_NAME
- 1.0.0.0
- AppLogger
- YOUR_NAME
- YOUR_NAME
- false
- Awesome application logging utility
- First release.
- Copyright 2016
- logger logging logs
-
-
-
-
-
-
-4. Create the package again using `nuget pack AppLogger.spec`.
-
-For more details on using this technique, see [Supporting Multiple .NET Framework Versions](/ndocs/create-packages/supporting-multiple-target-frameworks)
-
-###Adding targets and props for MSBuild
-
-In some cases you might want to add custom build targets or properties in projects that consume your package, such as running a custom tool or process during build. You do this by adding files in a `\build` folder as described in the steps below. When NuGet installs a package with \build files, it adds an MSBuild element in the project file pointing to the .targets and .props files.
-
-
- Note
- When using project.json, targets are not added to the project but are made available through the project.lock.json.
-
-
-1. In the project folder containing the your .nuspec file, create a folder named `build`.
-2. Inside `build`, create folders for each supported, and within those place your .targets and .props files:
-
- \build
- \netstandard1.4
- \AppLogger.props
- \AppLogger.targets
- \net462
- \AppLogger.props
- \AppLogger.targets
-
-3. In the .nuspec file, add a `files` node under the `package` node and refer to the files in `build` using wildcards.
-
-
-
- ...
-
-
-
-
-
-
-4. Create the package again using `nuget pack AppLogger.nuspec`.
-
-For additional details, refer to [Include MSBuild props and targets in a package](/ndocs/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package).
-
-
-###Creating localized packages
-To create localized versions of your library, you can either create separate packages for different locales, or include localized resource assemblies within a single package. Here's how to do the latter approach for German and Italian:
-
-1. Within each target framework folder under `lib`, create folders for each supported language other than the English default. In these folders you can place resource assemblies and localized IntelliSense XML files. For example:
-
- lib
- ├───netstandard1.4
- │ │ AppLogger.dll
- │ │ AppLogger.xml
- │ │
- │ ├───de
- │ │ AppLogger.resources.dll
- │ │ AppLogger.xml
- │ │
- │ └───it
- │ AppLogger.resources.dll
- │ AppLogger.xml
- └───net462
- │ AppLogger.dll
- │ AppLogger.xml
- │
- ├───de
- │ AppLogger.resources.dll
- │ AppLogger.xml
- │
- └───it
- AppLogger.resources.dll
- AppLogger.xml
-
-2. In the .nuspec file, reference these files in the <files> node:
-
-
-
- ...
-
-
-
-
-
-
-3. Create the package again using `nuget pack AppLogger.nuspec`.
-
-
-###Adding a readme
-When you include a `readme.txt` file in the root of the package, Visual Studio will display it when the package is installed directly.
-
-
- Note
- Readme files are not shown for packages that are installed as a dependency, or for .NET Core projects.
-
-
-To do this, create your `readme.txt` file, place it in the project root folder, and refer to it in the .nuspec file:
-
-
-
- ...
-
-
-
-
-
-
-
-## .NET Standard mapping table
-
-
-
-
Platform Name
-
Alias
-
-
-
-
-
-
-
-
-
.NET Standard
-
netstandard
-
1.0
-
1.1
-
1.2
-
1.3
-
1.4
-
1.5
-
1.6
-
-
-
.NET Core
-
netcoreapp
-
→
-
→
-
→
-
→
-
→
-
→
-
1.0
-
-
-
.NET Framework
-
net
-
→
-
4.5
-
4.5.1
-
4.6
-
4.6.1
-
4.6.2
-
4.6.3
-
-
-
Mono/Xamarin Platforms
-
-
→
-
→
-
→
-
→
-
→
-
→
-
*
-
-
-
Universal Windows Platform
-
uap
-
→
-
→
-
→
-
→
-
10.0
-
-
-
-
-
Windows
-
win
-
→
-
8.0
-
8.1
-
-
-
-
-
-
-
Windows Phone
-
wpa
-
→
-
→
-
8.1
-
-
-
-
-
-
-
Windows Phone Silverlight
-
wp
-
8.0
-
-
-
-
-
-
-
-
-
-
-##Related topics
-
-* [Nuspec Reference](/ndocs/schema/nuspec)
-* [Symbol packages](/ndocs/create-packages/symbol-packages)
-* [Dependency Versions](/ndocs/create-packages/dependency-versions)
-* [Supporting Multiple .NET Framework Versions](/ndocs/create-packages/supporting-multiple-target-frameworks)
-* [Include MSBuild props and targets in a package](/ndocs/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package)
-* [Creating Localized Packages](/ndocs/create-packages/creating-localized-packages)
-* [.NET Standard Library documentation](https://docs.microsoft.com/en-us/dotnet/articles/standard/library)
-* [Porting to .NET Core from .NET Framework](https://docs.microsoft.com/en-us/dotnet/articles/core/porting/index)
-
diff --git a/docs/Guides/Create-UWP-Packages.md b/docs/Guides/Create-UWP-Packages.md
deleted file mode 100644
index 41f2ccdc8..000000000
--- a/docs/Guides/Create-UWP-Packages.md
+++ /dev/null
@@ -1,249 +0,0 @@
-#Create UWP Packages
-
-The [Universal Windows Platform (UWP)](https://developer.microsoft.com/en-us/windows) provides a common app platform for every device that runs Windows 10. Within this model, UWP apps can call both the WinRT APIs that are common to all devices, and also APIs (including Win32 and .NET) that are specific to the device family on which the app is running.
-
-In this walkthrough you'll create a NuGet package with a native UWP component (including a XAML control) that can be used in both Managed and Native projects.
-
-1. [Pre-requisites](#pre-requisites)
-2. [Create a UWP Windows Runtime Component](#create-a-uwp-windows-runtime-component)
-3. [Create and update the .nuspec file](#create-and-update-the--nuspec-file)
-4. [Package the component](#package-the-component)
-5. [Related topics](#related-topics)
-
-##Pre-requisites
-
-1. Visual Studio 2015. Install the Community edition for free from [visualstudio.com](https://www.visualstudio.com/); you can use the Professional and Enterprise editions as well, of course.
-2. NuGet CLI. Download the latest version of nuget.exe from [nuget.org/downloads](https://nuget.org/downloads), saving it to a location of your choice. Then add that location to your PATH environment variable if it isn't already.
-
-
- Note
- nuget.exe is the CLI tool itself, not an installer, so be sure to save the downloaded file from your browser instead of running it.
-
-
-##Create a UWP Windows Runtime Component
-
-1. In Visual Studio, choose **File > New > Project**, expand the **Visual C++ > Windows > Universal** node, select the **Windows Runtime Component (Universal Windows)** template, change the name to ImageEnhancer, and click OK. Accept the default values for Target Version and Minimum Version when prompted.
-
- 
-
-2. Right click the project in Solution Explorer, select **Add > New Item**, click the **Visual C++ > XAML** node, select **Templated Control**, change the name to AwesomeImageControl.cpp, and click **Add**:
-
- 
-
-3. Right-click the project in Solution Explorer and select **Properties.** In the Properties page, expand **Configuration Properties > C/C++** and click **Output Files**. In the pane on the right, change the value for **Generate XML Documentation Files** to Yes:
-
- 
-
-4. Right click the *solution* now, select **Batch Build**, check the three Debug boxes in the dialog as shown below. This makes sure that when you do a build, you'll generate a full set of artifacts for each of the target systems that Windows supports.
-
- 
-
-5. In the Batch Build dialog, and click **Build** to verify the project and create the output files that you'll need for the NuGet package.
-
-
- Note
- In this walkthrough you'll use the Debug artifacts for the package. For non-debug package, check the Release options in the Batch Build dialog instead, and refer to the resulting Release folders in the steps that follow.
-
-
-##Create and update the .nuspec file
-
-To create the initial .nuspec file, do the three steps below. The sections that follow then guide you through other necessary updates.
-
-1. Open a command prompt and navigate to the folder containing ImageEnhancer.vcxproj (this will be a subfolder below where the solution file is).
-2. Run the NuGet `spec` command to generate `ImageEnhancer.nuspec` (the name of the file is taken from the name of the .vcxproj file):
-
-
- nuget spec
-
-
-3. Open `ImageEnhancer.nuspec` in an editor and update it to match the following, replacing YOUR_NAME with an appropriate value. The <id> value, specifically, must be unique across nuget.org (see the naming conventions described in [Creating a package](/ndocs/create-packages/creating-a-package(#choosing-a-unique-package-identifier-and-setting-the-version-number)). Also note that you must also update the author and description tags or you'll get an error during the packing step.
-
-
-
-
- ImageEnhancer.YOUR_NAME
- 1.0.0
- ImageEnhancer
- YOUR_NAME
- YOUR_NAME
- false
- Awesome Image Enhancer
- First release
- Copyright 2016
- image enhancer imageenhancer
-
-
-
-
- Note
- For packages built for public consumption, pay special attention to the <tags> element, as these tags help others find your package and understand what it does.
-
-
-
-###Adding Windows metadata to the package
-
-A Windows Runtime Component requires metadata that describes all of its publicly available types, which makes it possible for other apps and libraries to consume the component. This metadata is contained in a .winmd file, which is created when you compile the project and must be included in your NuGet package. An XML file with IntelliSense data is also built at the same time, and should be included as well.
-
-Add the following <files> node to the .nuspec file:
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-###Adding XAML content
-
-To include a XAML control with your component, you need to add the XAML file that has the default template for the control (as generated by the project template). This also goes in the <files> section:
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-###Adding the native implementation libraries
-
-Within your component, the core logic of the ImageEnhancer type is in native code, which is contained in the various `ImageEnhancer.dll` assemblies that are generated for each target runtime (ARM, x86, and x64). To include these in the package, reference them in the <files> section along with their associated .pri resource files:
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-###Adding .targets
-
-Next, C++ and JavaScript projects that might consume your NuGet package need a .targets file to identify the necessary assembly and winmd files. (C# and Visual Basic projects do this automatically.) Create this file by copying the text below into `ImageEnhancer.targets` and save it in the same folder as the .nuspec file:
-
-
-
-
- x86
- $(Platform)
-
-
-
- ImageEnhancer.dll
-
-
-
-
-
-Then refer to `ImageEnhancer.targets` in your .nuspec file:
-
-
-
-
- ...
-
-
- ...
-
-
-
-
-
-
-
-
-
-###Final nuspec
-
-Your final .nuspec file should now look like the following, where again YOUR_NAME should be replaced with an appropriate value:
-
-
-
-
- ImageEnhancer.YOUR_NAME
- 1.0.0
- ImageEnhancer
- YOUR_NAME
- YOUR_NAME
- false
- Awesome Image Enhancer
- First Release
- Copyright 2016
- image enhancer imageenhancer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##Package the component
-
-With the completed .nuspec referencing all the files you need to include in the package, you're ready to run the `pack` command:
-
-
- nuget pack ImageEnhancer.nuspec
-
-
-This will generate `ImageEnhancer.YOUR_NAME.1.0.0.nupkg`. Opening this file in a tool like the [NuGet Package Explorer](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) and expanding all the nodes, you'll see the following contents:
-
-
-
-
- Note
- A .nupkg file is just a ZIP file with a different extension. You can also examine package contents, then, by change .nupkg to .zip, but remember to restore the extension before uploading a package to nuget.org.
-
-
-To make your package available to other developers, follow the instructions on [Publish a package](/ndocs/create-packages/publish-a-package).
-
-
-##Related topics
-
-* [Nuspec Reference](/ndocs/schema/nuspec)
-* [Symbol packages](/ndocs/create-packages/symbol-packages)
-* [Dependency Versions](/ndocs/create-packages/dependency-versions)
-* [Supporting Multiple .NET Framework Versions](/ndocs/create-packages/supporting-multiple-target-frameworks)
-* [Include MSBuild props and targets in a package](/ndocs/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package)
-* [Creating Localized Packages](/ndocs/create-packages/creating-localized-packages)
\ No newline at end of file
diff --git a/docs/Guides/Install-NuGet.md b/docs/Guides/Install-NuGet.md
deleted file mode 100644
index 08b6477ea..000000000
--- a/docs/Guides/Install-NuGet.md
+++ /dev/null
@@ -1,127 +0,0 @@
-#Installing NuGet
-
-There are two primary tools available to help you build, publish and consume NuGet packages:
-
-1. The [**NuGet CLI**](#nuget-cli) is the command-line utility that works on Windows, Mac OS X, and Linux and supports all NuGet capabilities.
-2. The [**NuGet Package Manager in Visual Studio**](#nuget-package-manager-in-visual-studio) is a GUI tool for managing packages and includes a console through which you can use certain NuGet commands directly within Visual Studio. It's included with Visual Studio 2012 and later and can be installed manually for earlier versions.
-
-Both support the following operations:
-
-- Search packages
-- Install packages
-- Update packages
-- Uninstall packages
-- Restore packages (UI only in the Package Manager)
-- Manage NuGet sources
-
-The following capabilities are supported only in the NuGet CLI:
-
-- Manage packages (nuget.org or private feed)
-- Create packages
-- Publish packages
-- Manage nuget.config
-- Manage the NuGet cache
-- Replication a package
-
-
- Note
- You might also be interested in the NuGet Package Explorer, an open-source, stand-alone tool to visually explore and create NuGet packages..
- Also, the cross-platform .NET Core CLI toolchain for developing .NET Core applications also supports a dotnet restore command that performs a nuget restore. No other nuget commands are available in the .NET Core CLI at present, however.
-
-
-
-##NuGet CLI
-
-The NuGet CLI can be installed using any of the following methods:
-
-1. **nuget.org**: Download the latest version of the nuget.exe file from [nuget.org/downloads](https://nuget.org/downloads) and save it to an appropriate location on your machine. If desired, add that location to your PATH environment variable so you can NuGet from anywhere. (Note that the download is a single .exe file, so save it rather than running it from the browser.)
-
-
- With NuGet 1.4+, you can use `nuget update -self` to update your existing nuget.exe to the latest version.
-
-
-2. **Chocolatey**: Install the [NuGet.CommandLine](http://chocolatey.org/packages/NuGet.CommandLine) Chocolatey package using the [Chocolatey](http://chocolatey.org) client.
-
-
- choco install nuget.commandline
-
-
-3. **Visual Studio**: Install the [NuGet.CommandLine](http://www.nuget.org/packages/NuGet.CommandLine/) package from the Package Manager Console in Visual Studio.
-
-
- NuGet 2.x users
- Because there are a few breaking changes introduced in NuGet 3.2, https://nuget.org/nuget.exe points to the latest stable NuGet 2.x release to prevent CI systems from potentially breaking at this time.
-
-
-
-### Compatibility with Mono
-Though not fully-supported as yet, the NuGet command-line executable (version 3.2 and above) will run on Mac OS X and Linux systems when the Mono runtime is installed with a few limitations:
-
-* Commands tested to work:
- * Config
- * Delete
- * Help
- * Install
- * List
- * Push
- * SetApiKey
- * Sources
- * Spec
-* Partially-working commands:
- * Pack: works with .nuspec files but not with project files.
- * Restore: works with packages.config and project.json files but not with solution (.sln) files.
-* Commands that do not work:
- * Update
-
-
-###Related topics
-- [NuGet CLI reference ](/ndocs/tools/nuget.exe-cli-reference)
-- [Creating a package](/ndocs/create-packages/creating-a-package)
-- [Publishing a Package](/ndocs/create-packages/publish-a-package)
-
-
-## NuGet Package Manager in Visual Studio
-
-The NuGet Package Manager is included in every edition of Visual Studio 2012 and later. It includes the Package Manager UI ([reference](/ndocs/tools/package-manager-ui)) and the Package Manager Console, through which you can access tools that come with certain packages ([reference](/ndocs/tools/package-manager-console)).
-
-
- Note
- The console requires PowerShell 2.0, which will already be installed on Windows 7 or higher and Windows Server 2008 R2 or higher.
- Package Manager Console commands also work only within Visual Studio. Use the NuGet CLI outside of that envronment.
-
-
-### Package Manager installation for Visual Studio 2010 and earlier
-
-1. In Visual Studio, click **Tools > Extension and Updates**.
-2. Navigate to **Online**, search for "NuGet Package Manager for Visual Studio," and click **Download**.
-3. In the Installer dialog box, click **Install**.
-4. When installation is complete, restart Visual Studio.
-
-### Updating the Package Manager
-
-For Visual Studio 2015 Update 2 and later, the Package Manager is automatically updated to the latest stable release.
-
-For earlier versions of Visual Studio, select the **Tools > Extensions and Updates** command and click on the **Updates** tab to see if a new version of the Package Manager is available.
-
-### NuGet Beta Channel
-
-The NuGet Beta Channel for the NuGet Package Manager in Visual Studio 2015 gives you access to high-quality builds that are close to completion. We use this channel to gather feedback on our near-final builds, and it's recommended for developers who want to try out new features and those who are experiencing blocking issues and need early access to updated builds before RTM.
-
-Accessing the beta channel is simple:
-
-1. In Visual Studio, navigate to **Tools > Options > Environment > Extensions and Updates**, then add the feed `https://dotnet.myget.org/F/nuget-beta/vsix/` to the **Additional Extension Galleries** list:
-
- 
-
-2. Navigate to **Tools > Extensions and Updates** and select **Online**, which should show the NuGet-Beta Feed from which you can install a beta NuGet Package Manager:
-
- 
-
-To report problems with the Beta builds or to share ideas, open an issue on the [NuGet GitHub repository](https://github.com/Nuget/Home).
-
-###Related topics
-
-- [Package Manager UI reference](/ndocs/tools/package-manager-ui)
-- [Package Manager Console reference](/ndocs/tools/package-manager-console)
-- [Package Manager Console PowerShell reference](/ndocs/tools/powershell-reference)
-
diff --git a/docs/Guides/_metadata b/docs/Guides/_metadata
deleted file mode 100644
index 4b3556fee..000000000
--- a/docs/Guides/_metadata
+++ /dev/null
@@ -1,4 +0,0 @@
-Install NuGet
-Create .NET Standard Packages
-Create UWP Packages
-Create Cross Platform Packages
\ No newline at end of file
diff --git a/docs/Guides/media/BetaChannel-ExtensionUpdate.png b/docs/Guides/media/BetaChannel-ExtensionUpdate.png
deleted file mode 100644
index af96fe2f9..000000000
Binary files a/docs/Guides/media/BetaChannel-ExtensionUpdate.png and /dev/null differ
diff --git a/docs/Guides/media/BetaChannel-ToolsSettings.png b/docs/Guides/media/BetaChannel-ToolsSettings.png
deleted file mode 100644
index c5afdc858..000000000
Binary files a/docs/Guides/media/BetaChannel-ToolsSettings.png and /dev/null differ
diff --git a/docs/Guides/media/CrossPlatform-NewProject.png b/docs/Guides/media/CrossPlatform-NewProject.png
deleted file mode 100644
index 449fa4d0c..000000000
Binary files a/docs/Guides/media/CrossPlatform-NewProject.png and /dev/null differ
diff --git a/docs/Guides/media/UWP-BatchBuild.png b/docs/Guides/media/UWP-BatchBuild.png
deleted file mode 100644
index a0301bfb7..000000000
Binary files a/docs/Guides/media/UWP-BatchBuild.png and /dev/null differ
diff --git a/docs/Guides/media/UWP-PackageExplorer.png b/docs/Guides/media/UWP-PackageExplorer.png
deleted file mode 100644
index 559a80dff..000000000
Binary files a/docs/Guides/media/UWP-PackageExplorer.png and /dev/null differ
diff --git a/docs/Hosting-Packages/Local-Feeds.md b/docs/Hosting-Packages/Local-Feeds.md
deleted file mode 100644
index 7d82a081d..000000000
--- a/docs/Hosting-Packages/Local-Feeds.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Local Feeds
-
-Local NuGet package feeds are simply folders on your local network in which you place packages (or even just a folder on your own machine). Local feeds can be either a simple folder of packages, or a hierarchical folder structure that include version numbers. With NuGet 3.3 and above, using the hierarchical structure gives much better performance.
-
-In these cases, you enable the source by simply adding the pathname, such as `\\myserver\packages` through the [Package Manager UI](/ndocs/tools/package-manager-ui#package-sources) or the command line using [`nuget sources`](/ndocs/tools/nuget.exe-cli-reference#sources).
-
-## Initializing and maintaining hierarchical folders
-
-With NuGet 3.3 and above, you'll realize much better performance by structuring the feed using a hierarchical versioned folder tree:
-
- \\myserver\packages
- └─
- └─
- ├─..nupkg
- └─
-
-NuGet will create this structure automatically when you use the [`nuget add`](/ndocs/tools/nuget.exe-cli-reference#add) command to copy packages to the feed:
-
- nuget add new_package.1.0.0.nupkg -source \\myserver\packages
-
-You can also use the [`nuget init`](/ndocs/tools/nuget.exe-cli-reference#init) command to copy multiple packages from a single folder to the feed. For example, the following command copues all packages from `c:\packages` to a hierarchical tree on `\\myserver\packages`:
-
- nuget init c:\packages \\myserver\packages
-
-Again, this will create a folder for each package identifier, each of which will contain a version number folder, within which will be the appropriate package.
-
diff --git a/docs/Hosting-Packages/NuGet.Server.md b/docs/Hosting-Packages/NuGet.Server.md
deleted file mode 100644
index ba31a9043..000000000
--- a/docs/Hosting-Packages/NuGet.Server.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# NuGet.Server
-
-NuGet.Server is a package provided by the .NET Foundation that creates an ASP.NET application that can host a package feed on any server that runs IIS. Simply said, NuGet.Server basically makes a folder on the server available through HTTP(S) (specifically OData). As such it's best for simple scenarios and is easy to set up.
-
-The process is as follows:
-
-1. Create an empty ASP.NET Web application in Visual Studio and add the NuGet.Server package to it.
-2. Configure the `Packages` folder in the application and add packages.
-3. Deploy the application to a suitable server.
-
-The following sections walk through this process in detail, using C#.
-
-## Create and deploy an ASP.NET Web application with NuGet.Server
-
-1. In Visual Studio, select **File > New > Project**, set the target framework for .NET Framework 4.6 (see below), search for "ASP.NET", and select the **ASP.NET Web Application** template for C#.
-
- 
-
-
- Note
- The web application must target .NET Framework 4.6 or above to use the latest version of NuGet.Server (2.11.2 as of this writing). If you target .NET Framework 4.5.2, be sure to install NuGet Server 2.10.3 instead below in step 3.
-
-
-2. Give the application a suitable name, click OK, and in the next dialog select the **ASP.NET 4.6 - Empty** template (or a higher version) and click OK.
-
-3. Right-click the project, select **Manage NuGet Packages**, and in the Package Manager UI search and install the latest version of the NuGet.Server package. (You can also install it from the Package Manager Console with `Install-Package NuGet.Server`.)
-
- 
-
-4. Installing NuGet.Server converts the empty Web application into a package source. It creates a `Packages` folder in the application and overwrites `web.config` to include additional settings (see the comments in that file for details).
-5. To make packages available in the feed when you publish the application to a server, add their `.nupkg` files to the `Packages` folder in Visual Studio, then set their **Build Action** to **Content** and **Copy to Output Directory** to **Copy always**:
-
- 
-
-6. Run the site locally in Visual Studio (without debugging, that is Ctrl+F5). The home page provides the package feed URLs:
-
- 
-
-7. Click on **here** in the area outlined above to see the OData feed of packages.
-
-8. By running the application the first time, the `Packages` folder gets restructured to contain a folder for each package. This matches the [local storage layout](http://blog.nuget.org/20151118/nuget-3.3.html#folder-based-repository-commands) introduced with NuGet 3.3 to improve performance. When adding more packages, continue to follow this structure.
-
-9. Once you've tested your local deployment, you can deploy the application to any other internal or external site as needed.
-10. Once deployed to `http://`, the URL that you use for the package source will be `http:///nuget`.
-
-
-##Configuring the Packages folder
-
-With `NuGet.Server` 1.5 and later, you can more specifically configure the package folder using the `appSetting/packagesPath` value in `web.config`:
-
-
-
-
-
-
-`packagesPath` can be an absolute or virtual path.
-
-When `packagesPath` is omitted or left blank, the packages folder is the default `~/Packages`.
-
-## Adding packages to the feed externally
-
-Once a NuGet.Server site is running, you can add or delete packages using nuget.exe provided that you set an API key value in `web.config`.
-
-After installing the NuGet.Server package, `web.config` will contain an empty `appSetting/apiKey` value:
-
-
-
-
-
-When `apiKey` is omitted or blank, pushing packages to the feed is disabled.
-
-To enable this capability, set the `apiKey` to a value (ideally a strong password) and add a key called `appSettings/requireApiKey` with the value of `true`:
-
-
-
-
-
-
-
-
-
-If your server is already secured or you do not otherwise require an API key (for example, when using a private server on a local team network), you can set `requireApiKey` to `false`. All users with access to the server can then push or delete packages.
-
diff --git a/docs/Hosting-Packages/Overview.md b/docs/Hosting-Packages/Overview.md
deleted file mode 100644
index 01f8e205e..000000000
--- a/docs/Hosting-Packages/Overview.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hosting Your Own NuGet Feeds
-
-Instead of making packages publicly available, you might want to release packages for only a limited audience, such as your organization or workgroup. In addition, some companies may want to restrict which third-party libraries their developers may use, and thus direct those developers to draw from a limited package source rather than nuget.org.
-
-For all such purposes, NuGet supports setting up a private package source in the following ways:
-
-- Local feed: Packages are simply placed on a suitable network file share, ideally using `nuget init` and `nuget add` to create a hierarchical folder structure (NuGet 3.3+). For details, see [Local Feeds](/ndocs/hosting-packages/local-feeds).
-- NuGet.Server: Packages are made available through a local server through HTTP. For details, see [NuGet.Server](/ndocs/hosting-packages/nuget.server).
-- NuGet Gallery: Packages are hosted on an Internet server using the [NuGet Gallery Project](https://github.com/NuGet/NuGetGallery/wiki/Hosting-the-NuGet-Gallery-Locally-in-IIS) on GitHub. NuGet Gallery provides user management and additional features such as an extensive web UI that allows searching and exploring packages from within the browser, similar to nuget.org.
-
-If you're using Visual Studio Team Services, you can also use the [Package Management extension](https://marketplace.visualstudio.com/items?itemName=ms.feed) to make NuGet packages available to your team. This extension works in conjunction with any other solution.
-
-There are also several third-party NuGet hosting products that support remote private feeds, including the following:
-
-- [MyGet](http://myget.org)
-- [ProGet](http://inedo.com/proget) from Inedo
-- [NuGet Server](http://nugetserver.net/), a community project from Inedo
-- [Artifactory](https://www.jfrog.com/artifactory/) from JFrog.
-- [Nexus](http://www.sonatype.org/nexus/) from Sonatype.
-
-Regardless of how packages are hosted, you access them by adding them to the list of available sources in `NuGet.config`. This can be done in Visual Studio as described in [Package Sources](/ndocs/tools/package-manager-ui#package-sources), or from the command line using [`nuget sources`](/ndocs/tools/nuget.exe-cli-reference#sources). The path to a source can be anything from a local directory to a network name to an Internet URL.
\ No newline at end of file
diff --git a/docs/Hosting-Packages/_metadata b/docs/Hosting-Packages/_metadata
deleted file mode 100644
index dadc3f5c5..000000000
--- a/docs/Hosting-Packages/_metadata
+++ /dev/null
@@ -1,3 +0,0 @@
-Overview
-Local-Feeds
-NuGet-Server
\ No newline at end of file
diff --git a/docs/Hosting-Packages/media/Hosting_01-NuGet.Server-Set4.6.png b/docs/Hosting-Packages/media/Hosting_01-NuGet.Server-Set4.6.png
deleted file mode 100644
index 6eab4e789..000000000
Binary files a/docs/Hosting-Packages/media/Hosting_01-NuGet.Server-Set4.6.png and /dev/null differ
diff --git a/docs/Hosting-Packages/media/Hosting_02-NuGet.Server-Package.png b/docs/Hosting-Packages/media/Hosting_02-NuGet.Server-Package.png
deleted file mode 100644
index 1e7fa9d5d..000000000
Binary files a/docs/Hosting-Packages/media/Hosting_02-NuGet.Server-Package.png and /dev/null differ
diff --git a/docs/Hosting-Packages/media/Hosting_03-NuGet.Server-Package-Folder.png b/docs/Hosting-Packages/media/Hosting_03-NuGet.Server-Package-Folder.png
deleted file mode 100644
index 97566ebfa..000000000
Binary files a/docs/Hosting-Packages/media/Hosting_03-NuGet.Server-Package-Folder.png and /dev/null differ
diff --git a/docs/Hosting-Packages/media/Hosting_04-NuGet.Server-FeedHomePage.png b/docs/Hosting-Packages/media/Hosting_04-NuGet.Server-FeedHomePage.png
deleted file mode 100644
index ec3950a10..000000000
Binary files a/docs/Hosting-Packages/media/Hosting_04-NuGet.Server-FeedHomePage.png and /dev/null differ
diff --git a/docs/Policies/Deleting-Packages.md b/docs/Policies/Deleting-Packages.md
deleted file mode 100644
index 1784f23f3..000000000
--- a/docs/Policies/Deleting-Packages.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# Deleting packages
-
-NuGet.org does not support permanent deletion of packages. Doing so would break every project depending on the availabiliyy of the package, especially with build workflows that involve package restore.
-
-NuGet.org does supports *unlisting* a package, which can be done in the package management page on the web site. Unlisted packages no longer appear on nuget.org or in the Visual Studio UI, and do not appear in search results. Unlisted packages, however, can still be downloaded and installed by using an exact version number, which supports package restore.
-
-## Exceptions
-
-In exceptional situations such as copyright infringement and potentially harmful content, packages can be deleted manually by the NuGet team. Submit a support request through [NuGet Gallery](http://www.nuget.org) to start the process.
-
-## Prohibited use
-
-Packages that meet any of the following criteria are not allowed on the public NuGet gallery and will be immediately removed without discussion. Package owners will, however, be notified of the removal.
-
-- Contains malware, adware, or any kind of spyware.
-- Are designed to harm a developer's workstation or their organization.
-- Infringes copyrights or violates licenses.
-- Contains illegal content.
-- Are being used to squat on package identifiers, including packages that have zero productive content. Packages must contain code or the owners must concede the identifier to someone who actually has a product to ship.
-- Attempt to make the gallery do something that it is not explicitly designed to do.
-
-If you find a package that is in violation of any of these items, click the **Report Abuse** link on the package details page and submit a report.
-
-Note that the NuGet team and the .NET Foundation reserves the right to change these criteria at any time.
\ No newline at end of file
diff --git a/docs/Policies/NuGet-FAQ.md b/docs/Policies/NuGet-FAQ.md
deleted file mode 100644
index f345055a0..000000000
--- a/docs/Policies/NuGet-FAQ.md
+++ /dev/null
@@ -1,203 +0,0 @@
-# NuGet frequently-asked questions
-
-In this topic:
-
-- [Getting started](#getting-started)
-- [NuGet in Visual Studio](#nuget-in-visual-studio)
-- [NuGet command line](#nuget-command-line)
-- [NuGet Package Manager Console](#nuget-package-manager-console)
-- [Creating and publishing packages](#creating-and-publishing-packages)
-- [Working with packages](#working-with-packages)
-- [Managing packages on nuget.org](#managing-packages-on-nuget-org)
-
-## Getting started
-
-**What is required to run NuGet?**
-
-All the information around both UI and command-line tools is available in the [Install guide](/ndocs/guides/install-nuget).
-
-**Does NuGet support Mono?**
-
-The command-line tool, `nuget.exe`, builds and runs under Mono 3.2+ and can create packages in Mono.
-
-Although `nuget.exe` work fully on Windows, there are known issues on Linux and OS X. Refer [Mono issues](https://github.com/NuGet/Home/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+mono) on GitHub.
-
-A [graphical client](https://github.com/mrward/monodevelop-nuget-addin) is available as an add-in for MonoDevelop.
-
-## NuGet in Visual Studio
-
-**How do I check the exact version of NuGet installed?**
-
-In Visual Studio, use the **Help > About Microsoft Visual Studio** command and look at the version displayed next to **NuGet Package Manager**.
-
-Alternatively, launch the Package Manager Console (**Tools > NuGet Package Manager > Package Manager Console**) and tnere `$host` to see information about NuGet including the version.
-
-**What languages are supported by NuGet?**
-
-NuGet generally works for .NET languages and is designed to bring .NET libraries into a project. Because it also supports MSBuild and Visual Studio automation in some project types, it also supports other projects and languages to various degrees.
-
-The most recent version of NuGet supports C#, Visual Basic, F#, WiX, and C++.
-
-**What project templates are supported by NuGet?**
-
-NuGet has full support for a variety of project templates like Windows, Web, Cloud, SharePoint, Wix and so on.
-
-**How do I update packages that are part of Visual Studio templates?**
-
-Go to the **Updates** tab in the Package Manager UI and select **Update All**, or use the `Update-Package` command from Package Manager Console.
-
-To update the template itself, you'll need to manually update the template repository. See [Xavier Decoster's blog](http://www.xavierdecoster.com/update-project-template-to-latest-nuget-packages) on this subject. Note that this is done at your own risk, because manual updates might corrupt the template if the latest version of all dependencies are not compatible with each other.
-
-**Can I use NuGet outside of Visual Studio?**
-
-Yes, NuGet works directly from the command line. See the [Install guide](/ndocs/guides/install-nuget).
-
-
-## NuGet CommandLine
-
-**How do I get the latest version of NuGet commandline?**
-
-See the [Install guide](/ndocs/guides/install-nuget).
-
-**Is it possible to extend the NuGet commandline?**
-
-Yes, it's possible to add custom commands to `nuget.exe`, as described in [Rob Reynold's post](http://geekswithblogs.net/robz/archive/2011/07/15/extend-nuget-command-line.aspx).
-
-## NuGet Package Manager Console
-
-**How do I get access to the DTE object in the Package Manager console?**
-
-The console provides a variable named `$DTE` that returns the `DTE` object. See the [`Get-Project` command](/ndocs/tools/powershell-reference#get-project).
-
-**I try to cast the $DTE variable to the type DTE2, but I get an error: Cannot convert the "EnvDTE.DTEClass" value of type "EnvDTE.DTEClass" to type "EnvDTE80.DTE2". What's wrong?**
-
-This is a known issue with how PowerShell interacts with a COM object. Try the following:
-
- `$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])`
-
-`Get-Interface` is a helper function added by the NuGet PowerShell host.
-
-## Creating and publishing packages
-
-**How do I list my package in a feed?**
-
-See [Creating and publishing a package](/ndocs/quickstart/create-and-publish-a-package).
-
-**I have multiple versions of my library that target different versions of the .NET Framework. How do I build a single package that supports this?**
-
-See [Supporting Multiple .NET Framework Versions and Profiles](/ndocs/create-packages/supporting-multiple-target-frameworks).
-
-**How do I set up my own repository or feed?**
-
-See the [Hosting packages overview](/ndocs/hosting-packages/overview).
-
-**How can I upload packages to my NuGet feed in bulk?**
-
-See [Bulk publishing NuGet packages](http://jeffhandley.com/archive/2012/12/13/Bulk-Publishing-NuGet-Packages.aspx) (jeffhandly.com).
-
-## Working with packages
-
-**What is the difference between a project-level package and a solution-level package?**
-
-A solution-level package (NuGet 3.x and later) is installed only once in a solution and is then available for all projects in the solution. A project-level package is installed in each project that uses it. Typically, a solution-level package installs new commands that can be called from within the Package Manager Console.
-
-**Is it possible to install NuGet package without Internet connectivity?**
-
-Yes, see Scott Hanselman's Blog post [How to access NuGet when NuGet.org is down (or you're on a plane)](http://www.hanselman.com/blog/HowToAccessNuGetWhenNuGetorgIsDownOrYoureOnAPlane.aspx) (hanselman.com).
-
-**How do I install packages in a different location from the default packages folder?**
-
-Set the [`repositoryPath`](/ndocs/schema/nuget.config#config-section) setting in `nuget.config` using `nuget config -set repositoryPath=<path>`.
-
-**How do I avoid checking in packages folder to source control?**
-
-Set the [`disableSourceControlIntegration`](/ndocs/schema/nuget.config#solution-section) in `nuget.config` to `true`. This key works at the solution level and hence need to be added to the `$(Solutiondir)\.nuget\nuget.config` file. Enabling package restore from Visual Studio creates this file automaticatlly.
-
-**How do I turn off package restore?**
-
-See [Enabling and disabling package restore](/ndocs/consume-packages/package-restore#enabling-and-disabling-package-restore).
-
-**Why do I get an "Unable to resolve dependency error" when installing a local package with remote dependencies?**
-
-You need to select the **All** source when installing a local package into the project. This aggregates all the feeds instead of using just one. The reason this error appears is that users of a local repository often want to avoid accidentally installing a remote package due to corporate polices.
-
-**I have multiple projects in the same folder, how can I use separate packages.config or project.json files for each project?**
-
-In most projects where separate projects live in separate folders, this is not a problem as NuGet will identify the `packages.config` and `project.json` files in each project. With NuGet 3.3+ and multiple projects in the same folder, you can insert the name of the project into the `packages.config` or `project.json` filenames as below and NuGet will use that file:
-
- `packages.config`: use the pattern `packages.{project-name}.config`
- `project.json`: use the pattern `{project-name}.project.json`
-
-**I don't see nuget.org in my list of repositories, how do I get it back?**
-
-- Add `https://api.nuget.org/v3/index.json` to your list of sources, or
-- Delete the `%appdata%\.nuget\NuGet.config` and let NuGet re-create it.
-
-## Managing packages on nuget.org
-
-**Is it possible to reserve names for packages that will be published in future?**
-
-No. If you feel that an existing package has taken the name which suits your package better, try contacting the owner of the package (click on the owner name on the package page on nuget.org). If you don't get a response within a reasonable time, [contact support](https://www.nuget.org/policies/Contact) and we'll look into it.
-
-**How do I claim ownership for packages ?**
-
-See [Managing package owners on nuget.org](/ndocs/create-packages/publish-a-package#managing-package-owners-on-nuget-org).
-
-**How do I deal with a package owner who is violating my software license?**
-
-We encourage the NuGet community to work together to resolve any disputes that may arise between package owners and the owners of other software. We have crafted a [dispute resolution process](/ndocs/policies/dispute-resolution) to follow before asking nuget.org administrators to intercede.
-
-**Is it recommended to upload my test packages to nuget.org?**
-
-For test purposes, you can use [staging.nuget.org](http://staging.nuget.org), or alternative public NuGet servers like [myget.org](https://myget.org) or [Visual Studio Team Services](https://blogs.msdn.microsoft.com/visualstudioalm/2015/08/27/announcing-package-management-support-for-vsotfs/).
-
-Note that packages uploaded to staging.nuget.org may not be preserved. See [Goodbye preview](http://blog.nuget.org/20130419/goodbye-preview.html).
-
-**What is the maximum size of packages I can upload to nuget.org?**
-
-nuget.org allows packages up to 250MB, but we recommend keeping packages under 1MB if possible and using dependencies to link packages together. As a rule of thumb, packages contain only one assembly to avoid collisions.
-
-NuGet's uses HTTP to download packages, so larger packages have a higher likelihood of failed installs than smaller ones.
-
-It is possible to share dependencies between multiple packages, making the total download size for consumers of your NuGet packages smaller.
-
-Dependencies are mostly static and never change. When fixing a bug in code, the dependencies may not have to be updated. If you bundle dependencies, you end up reshipping larger packages every time. By splitting NuGet packages into related dependencies, upgrades are much more fine-grained for consumers of your package.
-
-**Why can't I download/upload packages to nuget.org?**
-
-First make sure you're using the latest versions of NuGet. If that continues to faile, [contact support](https://www.nuget.org/policies/Contact) and provide additional connection troubleshooting information including:
-
-- The version of NuGet you're using
-- The package sources you're using
-- A restore log with detailed verbosity
-- MTR or a Fiddler traces (see below)
-- Your geographical area
-- Your operating system version
-- Machine configuration (CPU, Network, hard drive)
-- Whether is your machine behind a proxy or firewall
-- The versions of .NET that are installed on the machine.
-- Versions of cross-platform tools such as .NET CLI, or DNU that you're using.
-
-*To capture MTR:*
-
-- Download WinMTR from [http://winmtr.net/download/](http://winmtr.net/)
-- Enter `api.nuget.org` as the hostname and click **Start**.
-- Wait until the **Sent** column is >= 100.
-
- 
-
-- Copy text to clipboard.
-
-*To capture Fiddler:*
-
-- Install the latest version of [Fiddler](http://www.telerik.com/download/fiddler).
-- Start Fiddler and disable capturing traffic using the **File > Capture Traffic** menu.
-- Remove all sessions (select all items in the list, press the **Delete** key).- - Configure Fiddler to capture HTTPS traffic by checking **Decrypt HTTPS traffic** in the **HTTPS** tab of the **Tools > Fiddler Options...** menu.
-- Close Visual Studio.
-- Enable the **File > Capture Traffic** menu.
-- Start Visual Studio or nuget.exe .exe and perform the actions that are not working. The traffic generated by these actions should show up in Fiddler.
-- Once the actions have run, use **File > Save > All Sessions** to store the captured sessions.
-
-Note: it may be required to set the `HTTP_PROXY` environment variable to `http://127.0.0.1:8888` for routing NuGet traffic through Fiddler.
-
-If that fails, try the [tips mentioned in this StackOverflow post](http://stackoverflow.com/questions/21049908/using-fiddler-to-sniff-visual-studio-2013-requests-proxy-firewall).
\ No newline at end of file
diff --git a/docs/Policies/_metadata b/docs/Policies/_metadata
deleted file mode 100644
index 7840965f4..000000000
--- a/docs/Policies/_metadata
+++ /dev/null
@@ -1,5 +0,0 @@
-NuGet-FAQ
-Governance
-Ecosystem
-Dispute-Resolution
-Deleting-Packages
\ No newline at end of file
diff --git a/docs/Quickstart/Create-and-Publish-a-Package.md b/docs/Quickstart/Create-and-Publish-a-Package.md
deleted file mode 100644
index 034f2feae..000000000
--- a/docs/Quickstart/Create-and-Publish-a-Package.md
+++ /dev/null
@@ -1,155 +0,0 @@
-#Create and publish a package
-
-It's a simple process to create a NuGet package from a .NET Class Library and publish it to nuget.org. The following steps walk you through the process using the NuGet command-line interface (CLI) and Visual Studio:
-
-- [Install pre-requisites](#install-pre-requisites)
-- [Create a class library project](#create-a-class-library-project)
-- [Create the .nuspec package manifest file](#create-the--nuspec-package-manifest-file)
-- [Create the package](#create-the-package)
-- [Publish the package](#publish-the-package)
-
-##Install pre-requisites
-1. Visual Studio 2015. Install the Community edition for free from [visualstudio.com](https://www.visualstudio.com/); you can use the Professional and Enterprise editions as well, of course.
-2. NuGet CLI. Download the latest version of nuget.exe from [nuget.org/downloads](https://nuget.org/downloads), saving it to a location of your choice. Then add that location to your PATH environment variable if it isn't already.
-
-
- Note
- nuget.exe is the CLI tool itself, not an installer, so be sure to save the downloaded file from your browser instead of running it.
-
-
-##Create a class library project
-
-In Visual Studio, choose **File > New > Project**, expand the **Visual C# > Windows** node, select the "Class Library" template, name the project AppLogger, and click OK.
-
-
-
-Right click on the resulting project file and select **Build** to make sure the project was created properly.
-
-Within a real NuGet package, of course, you'll implement many useful features upon which others can build applications. For this walkthrough, however, you won't add any additional code because a class library from the template is sufficient to create a package.
-
-##Create the .nuspec package manifest file
-
-Every NuGet package needs a manifest–a .nuspec file–to describe its contents and its dependencies. The NuGet CLI will create this file for you, which you then customize.
-
-1. Open a command prompt and navigate to the folder containing the AppLogger project file (.csproj).
-2. Run the NuGet CLI spec command to generate `AppLogg.nuspec`:
-
-
- nuget spec
-
-
-3. Open the file in your favorite text editor. It will look something like the code below, where tokens in the form *$<token>$* will be replaced during the packaging process with values from the project's Properties/AssemblyInfo.cs file. For more details on tokens, see [Creating a .nuspec file](/ndocs/create-packages/creating-a-package#creating-the--nuspec-file).
-
-
-
-
- $id$
- $version$
- $title$
- $author$
- $author$
- http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE
- http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE
- http://ICON_URL_HERE_OR_DELETE_THIS_LINE
- false
- $description$
- Summary of changes made in this release of the package.
- Copyright 2016
- Tag1 Tag2
-
-
-
-4. Select a package ID that is unique across nuget.org. We recommend using the naming conventions described in [Creating a package](/ndocs/create-packages/creating-a-package#choosing-a-unique-package-identifier-and-setting-the-version-number). You must also update the author and description tags or you will get an error in the next step. Here's an updated .nuspec file as an example:
-
-
-
-
- MyCompanyName.MyProductName.MyPackageName
- $version$
- $title$
- kraigb
- kraigb
- false
- Awesome application logging utility
- First release
- Copyright 2016
- application app logger logging logs
-
-
-
-
- Note
- For packages built for public consumption, pay special attention to the <tags> element, as these tags help others find your package and understand what it does.
-
-
-
-##Create the package
-
-Creating a NuGet package from a project is simple: just run the pack command:
-
-
- nuget pack AppLogger.csproj
-
-
-This will create a NuGet package file like `AppLogger.1.0.0.0.nupkg` using, of course, the package name and version number from the .nuspec file.
-
-Note that you'll get warnings if you haven't updated various fields in the .nuspec file from from their default values.
-
-
-##Publish the package
-
-You're now ready to publish the package to nuget.org using the NuGet CLI. (Alternately, you can use the [nuget.org publishing workflow](/ndocs/create-packages/publish-a-package#publish-through-nuget-org).
-
-
- Note
- The packages you publish to nuget.org will be publicly visible to other developers. To host packages privately, see Hosting packages.
-
-
-1. Create a free account on [nuget.org](https://www.nuget.org/users/account/LogOn?returnUrl=%2F), or log in if you already have one. When creating a new account, you'll receive a confirmation email. You must confirm the account before you can upload a package.
-2. Once logged in, click your user name (on the upper right) to navigate to your account settings.
-3. Under **API Key**, click **copy to clipboard** to retrieve the access key you'll need in the CLI:
-
- 
-
-
- Note
- Always keep your API key a secret! If your key is accidentally revealed, you can always regenerate it at any time. You can also remove the API key if you no longer want to push packages via the CLI.
-
-
-4. At a command prompt, run the following command, replacing the key with the value copied in step 3:
-
-
- nuget push AppLogger.1.0.0.0.nupkg 47be3377-c434-4c29-8576-af7f6993a54b -Source https://www.nuget.org/api/v2/package
-
-
-5. You should then see something like the following:
-
-
- Pushing AppLogger.1.0.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
- PUT https://www.nuget.org/api/v2/package/
- Created https://www.nuget.org/api/v2/package/ 6829ms
- Your package was pushed.
-
-
-6. In your account on nuget.org, click **Manage my packages** to see the one that you just published; you'll also receive a confirmation email. Note that it might take a while for your package to be indexed and appear in search results where others can find it, during which time you'll see the following message on your package page:
-
- 
-
-
-
- Virus Scanning
- Before being made public, all packages uploaded to nuget.org are scanned for viruses and rejected if any viruses are found. All packages listed on nuget.org are also scanned periodically.
-
-
-And that's it! You've just created and published your first NuGet package to [nuget.org](https://www.nuget.org/), that other developers can use in their own projects.
-
-##Related topics
-* [Create a Package](/ndocs/create-packages/creating-a-package)
-* [Publish a Package](/ndocs/create-packages/publish-a-package)
-* [Support multiple target frameworks](/ndocs/create-packages/supporting-multiple-target-frameworks)
-* [Dependency versions](/ndocs/create-packages/dependency-versions)
-* [Creating localized packages](/ndocs/create-packages/creating-localized-packages)
-
-
-
-
diff --git a/docs/Quickstart/Use-a-Package.md b/docs/Quickstart/Use-a-Package.md
deleted file mode 100644
index 086286186..000000000
--- a/docs/Quickstart/Use-a-Package.md
+++ /dev/null
@@ -1,102 +0,0 @@
-#Use a package
-
-This tutorial walks you through installing and using the popular [Newtonsoft.Json](https://www.nuget.org/packages/Newtonsoft.Json/) package in a Universal Windows Platform (UWP) project:
-
-- [Install pre-requisites](#install-pre-requisites)
-- [Create a new UWP project](#create-a-new-uwp-project)
-- [Add the Newtonsoft.Json NuGet package](#add-the-newtonsoft-json-nuget-package)
-- [Use the Newtonsoft.Json API in the app](#use-the-newtonsoft-json-api-in-the-app)
-
-You'll use a similar same workflow for virtually every NuGet package you use in a project.
-
-
- Start with nuget.org
- Installing packages from nuget.org is a very common workflow that .NET developers use to find components they can reuse in their own applications. You can always search nuget.org directly or find and install packages within Visual Studio as we'll do here.
-
-
-
-##Install pre-requisites
-This tutorial requires Visual Studio 2015 Update 3 with Tools for Universal Windows Apps.
-
-You can install the Community edition for free from [visualstudio.com](https://www.visualstudio.com/) or use the Professional or Enterprise editions. The UWP tools option can be selected through the Custom install option during setup, checking the box under **Windows and Web Development > Universal Windows App Development Tools**. If you already have Visual Studio installed, you can run the installer again and click **Modify** to add the UWP tools.
-
-
-##Create a new UWP project
-In Visual Studio, choose **File > New > Project**, expand **Visual C# > Windows > Universal**, select the **Blank App (Universal Windows)**, and click OK. Accept the default values for Target Version and Minimum Version when prompted.
-
-
-
-
-##Add the Newtonsoft.Json NuGet package
-
-1. In Solution Explorer, right click on **References** and choose **Manage NuGet Packages**.
-
- 
-
-2. Choose "nuget.org" as the **Package source**, click the **Browse** tab, search for **Newtonsoft.Json**, select that package in the list, and click **Install**:
-
- 
-
-3. If prompted to review changes, click OK.
-
-4. Right-click the solution in Solution Explorer and click **Build Solution**. This restore anys NuGet packages listed under **References**. For more details, see [Package Restore](/ndocs/consume-packages/package-restore).
-
-
-
-##Use the Newtonsoft.Json API in the app
-
-With the Newtonsoft.Json package in the project, you can call its `JsonConvert.SerializeObject` method to convert an object to a human-readable string.
-
-1. Open MainPage.xaml and replace the existing `Grid` element with the following:
-
-
-
-
-
-
-
-
-2. Expand MainPage.xaml, open MainPage.xaml.cs, and insert the following code inside the `MainPage` class, after the constructor:
-
- public class Account
- {
- public string Name { get; set; }
- public string Email { get; set; }
- public DateTime DOB { get; set; }
- }
-
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- Account account = new Account
- {
- Name = "John Doe",
- Email = "john@microsoft.com",
- DOB = new DateTime(1980, 2, 20, 0, 0, 0, DateTimeKind.Utc),
- };
- string json = JsonConvert.SerializeObject(account, Formatting.Indented);
- TextBlock.Text = json;
- }
-
-3. Even though you added the Newtonsoft.Json package to the project, you'll still see a red squiggle under `JsonConvert` because you need a `using` statement. Hover over the underlined `JsonConvert` and you'll see the Lightbulb and the option to **Show potential fixes**:
-
- 
-
-
-4. Click on **Show potential fixes** and select the first suggested fix, `using Newtonsoft.Json;`. This adds the necessary line to the top of the file.
-
- 
-
-5. Build and run the app by pressing F5 or selecting **Debug > Start Debugging**:
-
- 
-
-6. Click on the button to see the contents of the TextBlock replaced with some JSON text:
-
- 
-
-
-
-##Related topics
-* [Overview and workflow of package consumption](/ndocs/consume-packages/overview-and-workflow)
-* [Finding and choosing](/ndocs/consume-packages/finding-and-choosing-packages)
-* [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior)
diff --git a/docs/Quickstart/_metadata b/docs/Quickstart/_metadata
deleted file mode 100644
index 906d2fdbb..000000000
--- a/docs/Quickstart/_metadata
+++ /dev/null
@@ -1,2 +0,0 @@
-Create-and-Publish-a-Packages
-Use-a-Package
\ No newline at end of file
diff --git a/docs/Quickstart/media/QS_Create-01-NewProject.png b/docs/Quickstart/media/QS_Create-01-NewProject.png
deleted file mode 100644
index d4eed29e0..000000000
Binary files a/docs/Quickstart/media/QS_Create-01-NewProject.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Create-02-APIKey.png b/docs/Quickstart/media/QS_Create-02-APIKey.png
deleted file mode 100644
index d9dd46836..000000000
Binary files a/docs/Quickstart/media/QS_Create-02-APIKey.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Create-03-NotIndexed.png.PNG b/docs/Quickstart/media/QS_Create-03-NotIndexed.png.PNG
deleted file mode 100644
index 9996cfefb..000000000
Binary files a/docs/Quickstart/media/QS_Create-03-NotIndexed.png.PNG and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-01-NewProject.png b/docs/Quickstart/media/QS_Use-01-NewProject.png
deleted file mode 100644
index 20f3df37e..000000000
Binary files a/docs/Quickstart/media/QS_Use-01-NewProject.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-02-ManageNuGetPackages.png b/docs/Quickstart/media/QS_Use-02-ManageNuGetPackages.png
deleted file mode 100644
index a1b11fa24..000000000
Binary files a/docs/Quickstart/media/QS_Use-02-ManageNuGetPackages.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-03-NewtonsoftJson.png b/docs/Quickstart/media/QS_Use-03-NewtonsoftJson.png
deleted file mode 100644
index bb1bac590..000000000
Binary files a/docs/Quickstart/media/QS_Use-03-NewtonsoftJson.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-04-ShowPotentialFixes.png b/docs/Quickstart/media/QS_Use-04-ShowPotentialFixes.png
deleted file mode 100644
index 43749d330..000000000
Binary files a/docs/Quickstart/media/QS_Use-04-ShowPotentialFixes.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-05-AddUsing.png b/docs/Quickstart/media/QS_Use-05-AddUsing.png
deleted file mode 100644
index ff40655f4..000000000
Binary files a/docs/Quickstart/media/QS_Use-05-AddUsing.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-06-AppStart.png b/docs/Quickstart/media/QS_Use-06-AppStart.png
deleted file mode 100644
index 07f130ae1..000000000
Binary files a/docs/Quickstart/media/QS_Use-06-AppStart.png and /dev/null differ
diff --git a/docs/Quickstart/media/QS_Use-07-AppEnd.png b/docs/Quickstart/media/QS_Use-07-AppEnd.png
deleted file mode 100644
index 4818678d4..000000000
Binary files a/docs/Quickstart/media/QS_Use-07-AppEnd.png and /dev/null differ
diff --git a/docs/Release-Notes/Known-Issues.md b/docs/Release-Notes/Known-Issues.md
deleted file mode 100644
index 8a3fe3d9b..000000000
--- a/docs/Release-Notes/Known-Issues.md
+++ /dev/null
@@ -1,255 +0,0 @@
-# Known Issues with NuGet
-
-These are the most common known issues with NuGet that are repeatedly reported. If you are having trouble installing NuGet or managing packages, please take a look through these known issues and their resolutions.
-
-## Authentication issues with NuGet feeds in VSTS with nuget.exe v3.4.3
-
-**Problem:**
-
-When we use the following command to store the credentials, we end up double encrypting the Personal Access Token.
-
-$PAT = "Your personal access token"
-$Feed = "Your url"
-.\nuget.exe sources add -Name Test -Source $Feed -UserName $UserName -Password $PAT
-
-**Workaround:**
-
-Store passwords in clear text using the [-StorePasswordInClearText](/ndocs/tools/nuget.exe-cli-reference#sources) option.
-
-## Error installing packages with NuGet 3.4, 3.4.1
-
-**Problem:**
-
-In NuGet 3.4 and 3.4.1, when using the NuGet add-in, no sources are reported as available and you are unable to add new sources in the configuration window. The result is similar to the image below:
-
-
-
-The NuGet.config file in your `%AppData%\NuGet\` folder has accidentally been emptied. To fix this: Close Visual Studio 2015, delete the NuGet.config file in the `%AppData%\NuGet\` folder and restart Visual Studio. A new NuGet.Config file will be generated and you will be able to proceed.
-
-## Error installing packages with NuGet 2.7
-
-**Problem:**
-
-In NuGet 2.7 or above, when you attempt to install any package which contains assembly references, you may receive the error message **"Input string was not in a correct format."**, like below:
-
- PM> install-package log4net
- Installing 'log4net 2.0.0'.
- Successfully installed 'log4net 2.0.0'.
- Adding 'log4net 2.0.0' to Tyson.OperatorUpload.
- Install failed. Rolling back...
- install-package : Input string was not in a correct format.
- At line:1 char:1
- ◾install-package log4net
- ◾ ~~~~~~~~~~~~~~~~~~~~~~~
- ◾CategoryInfo : NotSpecified: (:) [Install-Package], FormatException
- ◾ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand
-
-
-This is caused by the type library for the VSLangProj.dll COM component being unregistered on your system. This can happen, for example, when you have two versions of Visual Studio installed side-by-side and you then uninstall the older version. Doing so may inadvertently unregister the above COM library.
-
-**Solution:**:
-
-Run this command from an **elevated prompt** to re-register the type library for VSLangProj.dll
-
- regsvr32 "C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VsLangproj.olb"
-
-If the command fails, check to see if the file exists in that location.
-
-For more information about this error, see this [work item](https://nuget.codeplex.com/workitem/3609 "Work item 3609").
-
-## Package Restore Consent Errors with NuGet 2.7
-
-If you are using NuGet 2.7+, but you are working in a solution that had enabled package restore through the MSBuild-integrated approach, it's possible that package restore will still fail due to a lack of package restore consent. This happens when the version of `NuGet.exe` in your solution's `.nuget` folder is version 2.6 or earlier, where package restore consent was still OFF by default.
-
-If you have upgraded to NuGet 2.7+ but your solution fails to build stating that you haven't given consent, you have a few options for proceeding:
-
-1. **Force save your NuGet settings with consent given.** To do this, open Visual Studio's options and under Package Manager, choose General. Uncheck and then re-check the boxes for consent and click OK. This forces your `%AppData%\NuGet\NuGet.config` file to be saved with consent explicitly given, allowing NuGet 2.6 and earlier to see that you've given consent.
-1. **Update the version of `NuGet.exe` in your `.nuget` folder.** To do this, run `nuget.exe update -self` from your `.nuget` folder, which will download the latest version of `NuGet.exe` and replace the version in the `.nuget` folder. The latest version of `NuGet.exe` will infer consent to be ON even when not explicitly saved in the `NuGet.config` file.
-1. **Migrate to Automatic Package Restore.** For this approach, you would migrate from the MSBuild-integrated package restore to the Automatic Package Restore approach, following the [documented walkthrough](/ndocs/consume-packages/package-restore#migrating-to-automatic-restore).
-
-## Build failure after package update in VS 2012
-The problem: You are using VS 2012 RTM. When updating NuGet packages, you get this message:
-"One or more packages could not be completed uninstalled." and you are prompted to restart
-Visual Studio. After VS restart, you get weird build errors.
-
-The cause is that certain files in the old packages are locked by a background MSBuild process.
-Even after VS restart, the background MSBuild process still uses the files in the old packages,
-causing the build failures.
-
-The fix is to install VS 2012 Update, e.g. [VS 2012 Update 2](http://www.microsoft.com/en-us/download/details.aspx?id=38188).
-
-## Upgrading to latest NuGet from an older version causes a signature verification error
-
-If you are running VS 2010 SP1, you might run into the following error message when attempting to upgrade
-NuGet if you have an older version installed.
-
-
-
-When viewing the logs, you might see a mention of a `SignatureMismatchException`.
-
-To prevent this from occurring, there is a [Visual Studio 2010 SP1 hotfix](http://bit.ly/vsixcertfix) you can install.
-Alternatively, the workaround is to simply uninstall NuGet (while running Visual Studio as Administrator) and then install it from the VS Extension Gallery. See
-http://support.microsoft.com/kb/2581019 for more information.
-
-## Package Manager Console throws an exception when the Reflector Visual Studio Add-In is also installed.
-
-When running the Package Manager console, you may run into the following exception message
-if you have the Reflector VS Add-in installed.
-
- The following error occurred while loading the extended type data file:
- Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2950) :
- Error in type "System.Security.AccessControl.ObjectSecurity":
- Exception: Cannot convert the "Microsoft.PowerShell.Commands.SecurityDescriptorCommandsBase"
- value of type "System.String" to type "System.Type".
- System.Management.Automation.ActionPreferenceStopException:
- Command execution stopped because the preference variable "ErrorActionPreference" or common parameter
- is set to Stop: Unable to find type
-
-or
-
- System.Management.Automation.CmdletInvocationException: Could not load file or assembly 'Scripts\nuget.psm1' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) ---> System.IO.FileLoadException: Could not load file or assembly 'Scripts\nuget.psm1' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG)) ---> System.ArgumentException: Illegal characters in path.
- at System.IO.Path.CheckInvalidPathChars(String path)
- at System.IO.Path.Combine(String path1, String path2)
- at Microsoft.VisualStudio.Platform.VsAppDomainManager.<AssemblyPaths>d__1.MoveNext()
- at Microsoft.VisualStudio.Platform.VsAppDomainManager.InnerResolveHandler(String name)
- at Microsoft.VisualStudio.Platform.VsAppDomainManager.ResolveHandler(Object sender, ResolveEventArgs args)
- at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
- --- End of inner exception stack trace ---
- at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadBinaryModule(Boolean trySnapInName, String moduleName, String fileName, Assembly assemblyToLoad, String moduleBase, SessionState ss, String prefix, Boolean loadTypes, Boolean loadFormats, Boolean& found)
- at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModuleNamedInManifest(String moduleName, String moduleBase, Boolean searchModulePath, String prefix, SessionState ss, Boolean loadTypesFiles, Boolean loadFormatFiles, Boolean& found)
- at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModuleManifest(ExternalScriptInfo scriptInfo, ManifestProcessingFlags manifestProcessingFlags, Version version)
- at Microsoft.PowerShell.Commands.ModuleCmdletBase.LoadModule(String fileName, String moduleBase, String prefix, SessionState ss, Boolean& found)
- at Microsoft.PowerShell.Commands.ImportModuleCommand.ProcessRecord()
- at System.Management.Automation.Cmdlet.DoProcessRecord()
- at System.Management.Automation.CommandProcessor.ProcessRecord()
- --- End of inner exception stack trace ---
- at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
- at System.Management.Automation.Runspaces.Pipeline.Invoke()
- at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.Invoke(String command, Object input, Boolean outputResults)
- at NuGetConsole.Host.PowerShell.Implementation.PowerShellHostExtensions.ImportModule(PowerShellHost host, String modulePath)
- at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.LoadStartupScripts()
- at NuGetConsole.Host.PowerShell.Implementation.PowerShellHost.Initialize()
- at NuGetConsole.Implementation.Console.ConsoleDispatcher.Start()
- at NuGetConsole.Implementation.PowerConsoleToolWindow.MoveFocus(FrameworkElement consolePane)
-
-We've contacted the author of the add-in in the hopes of working out a resolution.
-
-
Update: We have verified that the latest version of Reflector, 6.5, no longer causes this exception in the console.
-
-## Opening Package Manager Console fails with ObjectSecurity exception
-
-If you see these errors when trying to open the Package Manager Console:
-
- The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2977) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
- The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2984) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
- The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2991) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
- The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2998) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
- The following error occurred while loading the extended type data file: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(3005) : Error in type "System.Security.AccessControl.ObjectSecurity": Exception: The getter method should be public, non void, static, and have one parameter of type PSObject.
- The term 'Get-ExecutionPolicy' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
-
-follow the solution discussed on this page (http://stackoverflow.com/questions/12638289/embedding-powershell-v2-0-in-net-app-on-windows-8-rtm) to fix it.
-
-## The Add Package Library Reference dialog throws an exception if the solution contains InstallShield Limited Edition Project.
-
-We have identified that if your solution contains one or more InstallShield Limited Edition project, the **Add Package Library
-Reference** dialog will throw an exception when opened. There is currently no workaround yet except either removing
-InstallShield projects or unloading them.
-
-## Uninstall Button Greyed out? NuGet Requires Admin Privileges to Install/Uninstall
-
-If you try to uninstall NuGet via the Visual Studio Extension Manager, you may notice that the Uninstall button is disabled.
-NuGet requires admin access to install and uninstall. Relaunch Visual Studio as an administrator to uninstall the extension.
-NuGet does not require admin access to use it.
-
-## The Package Manager Console crashes when I open it in Windows XP. What's wrong?
-
-NuGet requires Powershell 2.0 runtime. Windows XP, by default, doesn't have Powershell 2.0.
-You can download the Powershell 2.0 runtime from this link
-http://support.microsoft.com/kb/968929.
-After you install it, restart Visual Studio and you should be able to open Package Manager Console.
-
-## Visual Studio 2010 SP1 Beta crashes on exit if the Package Manager Console is open.
-
-If you have installed Visual Studio 2010 SP1 Beta, you may notice that if you leave the Package Manager Console open
-and close Visual Studio, it will crash. This is a known issue of Visual Studio and will be fixed in SP1 RTM release.
-For now, just ignore the crash or uninstall SP1 Beta if you can.
-
-## The element 'metadata' ... has invalid child element exception occurs
-
-If you installed packages built with a pre-release version of NuGet, you might encounter an error message stating
-"The element 'metadata' in namespace 'schemas.microsoft.com/packaging/2010/07/nuspec.xsd' has invalid child element" when
-running the RTM version of NuGet with that project. You'll need to uninstall and then re-install each package
-using the RTM version of NuGet.
-
-## Attempting to install or uninstall results in the error "Cannot create a file when that file already exists.”
-
-For some reason, Visual Studio extensions can get in a weird state where you've uninstalled the VSIX extension,
-but some files were left behind. To work around this issue:
-
-1. Exit Visual Studio
-2. Open the following folder (it might be on a different drive on your machine)
-
-
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\<version>\
Required. Name of the assembly such as System.Net.
-
-
-
targetFramework
-
- Optional. Allows specifying a framework and profile name (or alias) that this framework assembly
- applies to such as "net40" or "sl4". Uses the same format described in
- Supporting Multiple Target Frameworks.
-
-
-
-
-
-
-
-
-
-### NuGet.exe now is able to store API Key credentials
-
-When using the NuGet.exe command line tool, you can now use the SetApiKey command to store your API key. That way,
-you won’t need to specify it every time you push a package. For more details on saving your API key with NuGet.exe,
-[read the documentation on publishing a package](/ndocs/create-packages/publish-a-package).
-
-### Package Explorer
-Package Explorer has been updated to support NuGet 1.2. For more information, check out the
-[Package Explorer release notes](http://nuget.codeplex.com/wikipage?title=New%20features%20in%20NuGet%20Package%20Explorer%201.0).
-
-###Other features/fixes
-The previous list were the most noticeable of the many features we implemented and bugs we fixed. All in all, we
-implemented/fixed [59 work items](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=All&type=All&priority=All&release=NuGet%201.2&assignedTo=All&component=All&sortField=Votes&sortDirection=Descending&page=0)
-in this release.
-
-### Known Issues
-
-* **1.2 Package incompatibility**: Packages built with the latest version of the command line tool, NuGet.exe (> 1.2)
-will not work with older versions of the NuGet VS Add-in (such as 1.1). If you run into an error message stating
-something about incompatible schema, you are running into this error. Please update NuGet to the latest version.
-* **NuGet.Server incompatibility**: If you’re hosting an internal NuGet feed using the NuGet.Server project, you’ll
-need to update that project with the latest version of NuGet.Server.
-* **Signature Mismatch Error**: If you run into an error during an upgrade with a message about a Signature Mismatch,
-you'll need to uninstall NuGet first and then install it. This is listed in our [Known Issues page](/nuget/release-notes/Known-Issues)
-which provides more details. The issue only affects those running Visual Studio 2010 SP1 and have a version of NuGet
-1.0 installed that was incorrectly signed. This version was only made available from the CodePlex website for a brief
-period so this issue shouldn't affect too many people.
diff --git a/docs/Release-Notes/NuGet-2.1.md b/docs/Release-Notes/NuGet-2.1.md
deleted file mode 100644
index 0ad5fa3bc..000000000
--- a/docs/Release-Notes/NuGet-2.1.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# NuGet 2.1 Release Notes
-
-[NuGet 2.0 Release Notes](/nuget/release-notes/nuget-2.0) | [NuGet 2.2 Release Notes](/nuget/release-notes/nuget-2.2)
-
-NuGet 2.1 was released on October 4, 2012.
-
-## Hierarchical Nuget.config
-NuGet 2.1 gives you greater flexibility in controlling NuGet settings by way of recursively walking up the directory structure looking for NuGet.config files and then building the configuration from the set of all found files. As an example, consider the scenario where a team has an internal package repository for CI builds of other internal dependencies. The directory structure for an individual project might look like the following:
-
- C:\
- C:\myteam\
- C:\myteam\solution1
- C:\myteam\solution1\project1
-
-Additionally, if package restore is enabled for the solution, the following folder will also exist:
-
- C:\myteam\solution1\.nuget
-
-In order to have the team’s internal package repository available for all projects that the team works on, while not making it available for every project on the machine, we can create a new nuget.config file and place it in the c:\myteam directory. There is no way to specificy a packages forlder per project.
-
-
-
-
-
-
-
-
-
-
-
-We can now see that the source was added by running the ‘nuget.exe sources’ command from any directory beneath c:\myteam as shown below:
-
-
-
-NuGet.config files are searched for in the following order:
-
-1. .nuget\nuget.config
-2. Recursive walk from project folder to root
-3. Global nuget.config (%appdata%\NuGet\nuget.config)
-
-The configurations are than applied in the *reverse order*, meaning that based on the above ordering, the global nuget.config would be applied first, followed by the discovered nuget.config files from root to project folder, followed by .nuget\nuget.config. This is particularly important if you’re using the `` element to remove a set of items from config.
-
-## Specify ‘packages’ Folder Location
-In the past, NuGet has managed a solution’s packages from a known ‘packages’ folder found beneath the solution root directory. For development teams that have many different solutions which have NuGet packages installed, this can result in the same package being installed in many different places on the file system.
-NuGet 2.1 provides more granular control over the location of the packages folder via the ‘repositoryPath’ element in the NuGet.config file. Building on the previous example of hierarchical nuget.config support, assume that we wish to have all projects under C:\myteam\ share the same packages folder. To accomplish this, simply add the following entry to C:\myteam\nuget.config.
-
-
-
-
-
- ...
-
-
-In this example, the shared nuget.config file specifies a shared packages folder for every project that is created beneath C:\myteam, regardless of depth. Note that if you have an existing packages folder underneath your solution root, you will need to delete it before NuGet will place packages in the new location.
-
-## Support for Portable Libraries
-[Portable libraries](http://msdn.microsoft.com/en-us/library/gg597391.aspx) is a feature first introduced with .NET 4 that enables you to build assemblies that can work without modification on different Microsoft platforms, from versions of the.NET Framework to Silverlight to Windows Phone and even Xbox 360 (though at this time, NuGet does not support the Xbox portable library target). By extending the [package conventions](/ndocs/create-packages/supporting-multiple-target-frameworks) for framework versions and profiles, NuGet 2.1 now supports portable libraries by enabling you to create packages that have compound framework and profile target lib folders.
-
-As an example, consider the following portable class library’s available target platforms.
-
-
-
-After the library is built and the command ‘nuget.exe pack MyPortableProject.csproj’ is run, the new portable library package folder structure can be seen by examining the contents of the generated NuGet package.
-
-
-
-As you can see, the portable library folder name convention follows the pattern ‘portable-{framework 1}+{framework n}’ where the framework identifiers follow the existing [framework name and version conventions](/ndocs/schema/target-frameworks). One exception to the name and version conventions is found in the framework identifier used for Windows Phone. This moniker should use the framework name ‘wp’ (wp7, wp71 or wp8). Using ‘silverlight-wp7’, for example, will result in an error.
-
-When installing the package that is created from this folder structure, NuGet can now apply its framework and profile rules to multiple targets, as specified in the folder name. Behind NuGet’s matching rules is the principle that “more specific” targets will take precedence over “less specific” ones. This means that monikers targeting a specific platform will always be preferred over portable ones if they are both compatible with a project. Additionally, if multiple portable targets are compatible with a project, NuGet will prefer the one where the set of platforms supported is “closest” to the project referencing the package.
-
-## Targeting Windows 8 and Windows Phone 8 Projects
-In addition to adding support for targeting portable library projects, NuGet 2.1 provides new framework monikers for both Windows 8 Store and Windows Phone 8 projects, as well as some new general monikers for Windows Store and Windows Phone projects that will be easier to manage across future versions of the respective platforms.
-
-For Windows 8 Store applications, the identifiers look as follows:
-
-
-
-
NuGet 2.0 and earlier
-
NuGet 2.1
-
-
-
winRT45, .NETCore45
-
Windows, Windows8, win, win8
-
-
-
-For Windows Phone projects, the identifiers look as follows:
-
-
-
Phone OS
-
NuGet 2.0 and earlier
-
NuGet 2.1
-
-
-
Windows Phone 7
-
silverlight3-wp
-
wp, wp7, WindowsPhone, WindowsPhone7
-
-
-
Windows Phone 7.5 (Mango)
-
silverilght4-wp71
-
wp71, WindowsPhone71
-
-
-
Windows Phone 8
-
(not supported)
-
wp8, WindowsPhone8
-
-
-
-In all of the above changes, the old framework names will continue to be fully supported by NuGet 2.1. Moving forward, the new names should be used as they will be more stable across future versions of the respective platforms. The new names will *not* be supported in versions of NuGet prior to 2.1, however, so plan accordingly for when to make the switch.
-
-## Improved Search in Package Manager Dialog
-Over the past several iterations, changes have been introduced to the NuGet gallery that greatly improved the speed and relevance of package searches. However, these improvements were limited to the nuget.org Web site. NuGet 2.1 makes the improved search experience available through the NuGet package manager dialog. As an example, imagine that you wanted to find the Windows Azure Caching Preview package. A reasonable search query for this package may be “Azure Cache”. In previous versions of the package manager dialog, the desired package would not even be listed on the first page of results. However, in NuGet 2.1, the desired package now shows up at the top of the search results.
-
-
-
-## Force Package Update
-Prior to NuGet 2.1, NuGet would skip updating a package when there was a not a high version number. This introduced friction for certain scenarios – particularly in the case of build or CI scenarios where the team did not want to increment the package version number with each build. The desired behavior was to force an update regardless. NuGet 2.1 addresses this with the ‘reinstall’ flag. For example, previous versions of NuGet would result in the following when attempting to update a package that did not have a more recent package version:
-
- PM> Update-Package Moq
- No updates available for 'Moq' in project 'MySolution.MyConsole'.
-
-With the reinstall flag, the package will be updated regardless of whether there is a newer version.
-
- PM> Update-Package Moq -Reinstall
- Successfully removed 'Moq 4.0.10827' from MySolution.MyConsole.
- Successfully uninstalled 'Moq 4.0.10827'.
- Successfully installed 'Moq 4.0.10827'.
- Successfully added 'Moq 4.0.10827' to MySolution.MyConsole.
-
-Another scenario where the reinstall flag proves beneficial is that of framework re-targeting. When changing the target framework of a project (for example, from .NET 4 to .NET 4.5), Update-Package -Reinstall can update references to the correct assemblies for all NuGet packages installed in the project.
-
-## Edit Package Sources Within Visual Studio
-In previous versions of NuGet, updating a package source from within the Visual Studio options dialog required deleting and re-adding the package source. NuGet 2.1 improves this workflow by supporting update as a first class function of the configuration user interface.
-
-
-
-## Bug Fixes
-NuGet 2.1 includes many bug fixes. For a full list of work items fixed in NuGet 2.0, please view the [NuGet Issue Tracker for this release](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=Fixed&type=All&priority=All&release=NuGet%202.1&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0).
diff --git a/docs/Release-Notes/NuGet-2.2.md b/docs/Release-Notes/NuGet-2.2.md
deleted file mode 100644
index 022211387..000000000
--- a/docs/Release-Notes/NuGet-2.2.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# NuGet 2.2 Release Notes
-
-[NuGet 2.1 Release Notes](/nuget/release-notes/nuget-2.1) | [NuGet 2.2.1 Release Notes](/nuget/release-notes/nuget-2.2.1)
-
-NuGet 2.2 was released on December 12, 2012.
-
-## Visual Studio Quick Launch
-One of the new features that was added in Visual Studio 2012 was the [quick launch dialog](http://msdn.microsoft.com/library/hh417697.aspx). NuGet 2.2 extends this dialog, allowing it to initialize the package manager dialog with the search terms entered in the quick launch. For example, entering 'jquery' in quick launch now includes an option in the results to search NuGet packages matching 'jquery'.
-
-
-
-Selecting this option will launch the standard NuGet package manager search experience for the term 'jquery'.
-
-
-
-## Specify Entire Folder for Package Contents
-NuGet 2.2 now allows you to specify an entire directory in the `` element of the .nuspec file to include all of the contents of that directory. For example, the following will cause all scripts in the package's scripts folder to be added to the contents\scripts folder when the package is installed into a project.
-
-**``**
-
-**Update 6/24/16: Empty folders in the "content" folder are ignored when installing the package.**
-
-## Known Issues
-
-### Package installation fails for F# projects when using the package manager console
-When attempting to install a NuGet package into an F# project using the package manager console, an InvalidOperationException is thrown. We are actively working with the F# team to resolve the issue, but in the meantime, the workaround is to install NuGet packages into F# projects via NuGet's package manager dialog rather than the console. [More information is available on CodePlex](http://nuget.codeplex.com/workitem/2873).
-
-
-## Bug Fixes
-NuGet 2.2 includes many bug fixes. For a full list of work items fixed in NuGet 2.2, please view the [NuGet Issue Tracker for this release](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=Closed&type=All&priority=All&release=NuGet%202.2&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0).
diff --git a/docs/Release-Notes/NuGet-2.5.md b/docs/Release-Notes/NuGet-2.5.md
deleted file mode 100644
index 5b2c039c3..000000000
--- a/docs/Release-Notes/NuGet-2.5.md
+++ /dev/null
@@ -1,174 +0,0 @@
-# NuGet 2.5 Release Notes
-
-[NuGet 2.2.1 Release Notes](/nuget/release-notes/nuget-2.2.1) | [NuGet 2.6 Release Notes](/nuget/release-notes/nuget-2.6)
-
-NuGet 2.5 was released on April 25, 2013. This release was so big, we felt compelled to skip versions 2.3 and 2.4! To date, this is the largest release we've had for NuGet, with over [160 work items](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.5&status=all) in the release.
-
-## Acknowledgements
-
-We would like to thank the following external contributors for their significant contributions to NuGet 2.5:
-
-1. [Daniel Plaisted](https://www.codeplex.com/site/users/view/dsplaisted) ([@dsplaisted](https://twitter.com/dsplaisted))
- - [#2847](https://nuget.codeplex.com/workitem/2847) - Add MonoAndroid, MonoTouch, and MonoMac to the list of known target framework identifiers.
-1. [Andres G. Aragoneses](https://www.codeplex.com/site/users/view/knocte) ([@knocte](https://twitter.com/knocte))
- - [#2865](https://nuget.codeplex.com/workitem/2865) - Fix spelling of NuGet.targets for a case-sensitive OS
-1. [David Fowler](https://www.codeplex.com/site/users/view/dfowler) ([@davidfowl](https://twitter.com/davidfowl))
- - Make the solution build on Mono.
-1. [Andrew Theken](https://www.codeplex.com/site/users/view/atheken) ([@atheken](https://twitter.com/atheken))
- - Fix unit tests failing on Mono.
-1. [Olivier Dagenais](https://www.codeplex.com/site/users/view/OliIsCool) ([@OliIsCool](https://twitter.com/oliiscool))
- - [#2920](https://nuget.codeplex.com/workitem/2920) - nuget.exe pack command does not propagate Properties to msbuild
-1. [Miroslav Bajtos](https://www.codeplex.com/site/users/view/MiroslavBajtos) ([@bajtos](https://twitter.com/bajtos))
- - [#1511](https://nuget.codeplex.com/workitem/1511) - Modified XML handling code to preserve formatting.
-1. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) ([@adamralph](https://twitter.com/adamralph))
- - Added recognized words to custom dictionary to allow build.cmd to succeed.
-1. [Bruno Roggeri](https://www.codeplex.com/site/users/view/broggeri)
- - Fix unit tests when running in localized VS.
-1. [Gareth Evans](https://www.codeplex.com/site/users/view/garethevans)
- - Extracted interface from PackageService
-1. [Maxime Brugidou](https://www.codeplex.com/site/users/view/brugidou) ([@brugidou](https://twitter.com/brugidou))
- - [#936](https://nuget.codeplex.com/workitem/936) - Handle project dependencies when packing
-1. [Xavier Decoster](https://www.codeplex.com/site/users/view/XavierDecoster) ([@XavierDecoster](https://twitter.com/xavierdecoster))
- - [#2991](https://nuget.codeplex.com/workitem/2991), [#3164](https://nuget.codeplex.com/workitem/3164) - Support Clear Text Password when storing package source credentials in nuget.cofig files
-1. [James Manning](http://www.codeplex.com/site/users/view/jmanning) ([@manningj](https://twitter.com/manningj))
- - [#3190](http://nuget.codeplex.com/workitem/3190), [#3191](http://nuget.codeplex.com/workitem/3191) - Fix Get-Package help description
-
-We also appreciate the following individuals for finding bugs with NuGet 2.5 Beta/RC that were approved and fixed before the final release:
-
-1. [Tony Wall](https://www.codeplex.com/site/users/view/CodeChief) ([@CodeChief](https://twitter.com/codechief))
- - [#3200](https://nuget.codeplex.com/workitem/3200) - MSTest broken with lastest NuGet 2.4 and 2.5 builds
-
-# Notable features in the release
-
-## Allow users to overwrite content files that already exist
-
-One of the most requested features of all time has been the ability to overwrite content files that already exist on disk when included in a NuGet package. Starting with NuGet 2.5, these conflicts are identified and you will be prompted to overwrite the files, whereas previously these files were always skipped.
-
-
-
-'NuGet.exe update' and 'Install-Package' now both have a new option '-FileConflictAction' to set some default for command-line scenarios.
-
-Set a default action when a file from a package already exists in the target project. Set to 'Overwrite' to always overwrite files. Set to 'Ignore' to skip files. If not specified, it will prompt for each conflicting file.
-
-## Automatic import of msbuild targets and props files
-
-A new conventional folder has been created at the top level of the NuGet package. As a peer to \lib, \content, and \tools, you can now include a '\build' folder in your package. Under this folder, you can place two files with fixed names, {packageid}.targets or {packageid}.props. These two files can be either directly under \build or under framework-specific folders just like the other folders. The rule for picking the best-matched framework folder is exactly the same as in those.
-
-When NuGet installs a package with \build files, it will add an MSBuild <Import> element in the project file pointing to the .targets and .props files. The .props file is added at the top, whereas the .targets file is added to the bottom.
-
-## Specify different references per platform using <References/> element
-
-Before 2.5, in .nuspec file, user can only specify the reference files, to be added for all framework. Now with this new feature in 2.5, user can author the <reference/> element for each of the supported platform, for example:
-
-
-
-
-
-
-
-
-
-
-
-
-
-Here is the flow for how NuGet adds references to projects based on the .nuspec file:
-
-1. Find the lib folder that is appropriate for the target framework and get the list of assemblies from that folder
-1. Separately find the references group that is appropriate for the target framework and get the list of assemblies from that group. Reference group without target framework specified is the fallback group.
-1. Find the intersection of the two lists, and use that as the references to add
-
-This new feature will allow package authors to use the References feature to apply subsets of assemblies to different frameworks when they would otherwise need to carry duplicate assemblies in multiple lib folders.
-
-Note: you must presently use NuGet.exe pack to use this feature; NuGet Package Explorer does not yet support it.
-
-## Update All button to allow updating all packages at once
-
-Many of you know about the "Update-Package" PowerShell cmdlet to update all of your packages; now there's an easy way to do this through the UI as well.
-
-To try this feature out:
-
-1. Create a new ASP.NET MVC application
-1. Launch the 'Manage NuGet Packages' dialog
-1. Select 'Updates'
-1. Click the 'Update All' button
-
-
-
-## Improved project reference support for NuGet.exe Pack
-
-Now nuget.exe pack command processes referenced projects with the following rules:
-
-1. If the referenced project has corresponding nuspec file, e.g. there is a file called proj1.nuspec in the same directory as proj1.csproj, then this project is added as a dependency to the package, using the id and version read from the nuspec file.
-1. Otherwise, the files of the referenced project are bundled into the package. Then projects referenced by this project will be processed using the sames rules recursively.
-1. All dlls/pdb/exe files are added.
-1. All other content files are added.
-1. All dependencies are merged.
-
-This allows a referenced project to be treated as a dependency if there is nuspec file, otherwise, it becomes part of the package.
-
-More details here:
-[http://nuget.codeplex.com/workitem/936](http://nuget.codeplex.com/workitem/936)
-
-## Add a 'Minimum NuGet Version' property to packages
-
-A new metadata attribute called 'minClientVersion' can now indicate the minimum NuGet client version required to consume a package.
-
-This feature helps package author to specify that a package will work only after a particular version of NuGet. As new nuspec features are added after NuGet 2.5, packages will be able to claim a minimum NuGet version.
-
-
-
-If the user has NuGet 2.5 installed and a package is identified as requiring 2.6, visual cues will be given to the user indicating the package will not be installable. The user will then be guided to update their version of NuGet.
-
-This will improve upon the existing experience where packages begin to install but then fail indicating an unrecogized schema version was identified.
-
-## Dependencies are no longer unnecessarily updated during package installation
-
-Before NuGet 2.5, when a package was installed that depended on a package already installed in the project, the dependency would be updated as part of the new installation, even if the existing version satisfied the dependency.
-
-Starting with NuGet 2.5, if a dependency version is already satisifed, the dependency will not be updated during other package installations.
-
-**The scenario:**
-
-1. The source repository contains package B with version 1.0.0 and 1.0.2. It also contains package A which has a dependency on B (>= 1.0.0).
-1. Assume that the current project already has package B version 1.0.0 installed. Now you want to install package A.
-
-**In NuGet 2.2 and older:**
-
-* When installing package A, NuGet will auto-update B to 1.0.2, even though the existing version 1.0.0 already satisfies the dependency version constraint, which is >= 1.0.0.
-
-**In NuGet 2.5 and newer:**
-
-* NuGet will no longer update B, because it detects that the existing version 1.0.0 satisfies the dependency version constraint.
-
-For more background on this change, read the detailed [work item](http://nuget.codeplex.com/workitem/1681) as well as the related [discussion thread](http://nuget.codeplex.com/discussions/436712).
-
-## NuGet.exe outputs http requests with detailed verbosity
-
-If you are troubleshooting NuGet.exe or just curious what HTTP requests are made during operations, the '-verbosity detailed' switch will now output all HTTP requests made.
-
-
-
-## NuGet.exe push now supports UNC and directory sources
-
-Before NuGet 2.5, if you attempted to run 'NuGet.exe push' to a package source based on a UNC path or local directory, the push would fail. With the recently added hierarchical configuration feature, it had become common for NuGet.exe to need to target either a UNC/folder source, or an HTTP-based NuGet Gallery.
-
-Starting with NuGet 2.5, if NuGet.exe identifies a UNC/folder source, it will perform the file copy to the source.
-
-The following command will now work:
-
- NuGet.exe push -source \\mycompany\repo\ mypackage.1.0.0.nupkg
-
-## NuGet.exe supports explicitly-specified Config files
-
-NuGet.exe commands that acccess configuration (all except 'spec' and 'pack') now support a new '-ConfigFile' option, which forces a specific config file to be used in place of the default config file at %AppData%\nuget\nuget.config.
-
-Example:
-
- NuGet.exe sources add -name test -source http://test -ConfigFile C:\test\.nuget\nuget.config
-
-## Support for Native projects
-
-With NuGet 2.5, the NuGet tooling is now available for Native projects in Visual Studio. We expect most native packages will utilize the MSBuild imports feature above, using a tool created by the [CoApp project](http://coapp.org). For more information, read [the details about the tool](http://coapp.org/news/2013-03-27-The-Long-Awaited-post.html) on the coapp.org website.
-
-The target framework name of "native" is introduced for packages to include files in \build, \content, and \tools when the package is installed into a native project. The \lib folder is not used for native projects.
diff --git a/docs/Release-Notes/NuGet-2.7.1.md b/docs/Release-Notes/NuGet-2.7.1.md
deleted file mode 100644
index b3897bd49..000000000
--- a/docs/Release-Notes/NuGet-2.7.1.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# NuGet 2.7.1 Release Notes
-
-[NuGet 2.7 Release Notes](/nuget/release-notes/nuget-2.7) | [NuGet 2.7.2 Release Notes](/nuget/release-notes/nuget-2.7.2)
-
-NuGet 2.7.1 was released on October 7, 2013. This is a minor update to our recent 2.7 release with some targeted fixes to improve the experience of new 2.7 features. For a list of work items fixed in NuGet 2.7.1, please view the [NuGet Issue Tracker for this release](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=Closed&type=All&priority=All&release=NuGet%202.7.1&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0).
-
-The complete set of features in 2.7 can be found in the [release notes](/nuget/release-notes/nuget-2.7) here.
diff --git a/docs/Release-Notes/NuGet-2.7.md b/docs/Release-Notes/NuGet-2.7.md
deleted file mode 100644
index 7dca77714..000000000
--- a/docs/Release-Notes/NuGet-2.7.md
+++ /dev/null
@@ -1,181 +0,0 @@
-# NuGet 2.7 Release Notes
-
-[NuGet 2.6.1 for WebMatrix Release Notes](/nuget/release-notes/nuget-2.6.1-for-webmatrix) | [NuGet 2.7.1 Release Notes](/nuget/release-notes/nuget-2.7.1)
-
-NuGet 2.7 was released on August 22, 2013.
-
-## Acknowledgements
-
-We would like to thank the following external contributors for their significant contributions to NuGet 2.7:
-
-1. [Mike Roth](http://www.codeplex.com/site/users/view/mxrss) ([@mxrss](https://twitter.com/mxrss))
- - Show License url when listing packages and verbosity is detailed.
-1. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) ([@adamralph](https://twitter.com/adamralph))
- - [#1956](http://nuget.codeplex.com/workitem/1956) - Add developmentDependency attribute to packages.config and use it in pack command to only include runtime packages
-1. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael) ([@tkrafael](https://twitter.com/tkrafael))
- - Avoid duplicate Properties key in nuget.exe pack command.
-1. [Ben Phegan](http://www.codeplex.com/site/users/view/benphegan) ([@BenPhegan](https://twitter.com/benphegan))
- - [#2610](http://nuget.codeplex.com/workitem/2610) - Increase machine cache size to 200.
-1. [Slava Trenogin](http://www.codeplex.com/site/users/view/derigel) ([@derigel](https://twitter.com/derigel))
- - [#3217](http://nuget.codeplex.com/workitem/3217) - Fix NuGet dialog showing updates in the wrong tab
- - Fix Project.TargetFramework can be null in ProjectManager
- - [#3248](http://nuget.codeplex.com/workitem/3248) - Fix SharedPackageRepository FindPackage/FindPackagesById will fail on non-existent packageId
-1. [Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG) ([@kevfromireland](https://twitter.com/kevfromireland))
- - [#3234](http://nuget.codeplex.com/workitem/3234) - Enable support for Nomad project
-1. [Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie) ([@corinblaikie](https://twitter.com/corinblaikie))
- - [#3252](http://nuget.codeplex.com/workitem/3252) - Fix push command fails with exit code 0 when file doesn't exist.
-1. [Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)
- - [#3226](http://nuget.codeplex.com/workitem/3226) - Fix bug with Add-BindingRedirect command when a project references a database project.
-1. [Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos) ([@bajtos](https://twitter.com/bajtos))
- - [#2891](http://nuget.codeplex.com/workitem/2891) - Fix bug of nuget.pack parsing wildcard in the 'exclude' attribute incorrectly.
-1. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981) ([@zippy1981](https://twitter.com/zippy1981))
- - [#3307](http://nuget.codeplex.com/workitem/3307) - Fix bug NuGet.targets does not pass $(Platform) to nuget.exe when restoring packages.
-1. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin) ([@benerdin](https://twitter.com/benerdin))
- - [#3294](http://nuget.codeplex.com/workitem/3294) - Fix bug in nuget.exe package command which would allow adding files with the same name but different casing, eventually causing "Item already exists" exception.
-1. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino) ([@kzu](https://twitter.com/kzu))
- - [#2990](http://nuget.codeplex.com/workitem/2990) - Add Version property to NetPortableProfile class.
-1. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
- - [#3460](https://nuget.codeplex.com/workitem/3460) - Fix bug NullReferenceException if requireApiKey = true, but the header X-NUGET-APIKEY isn't present
-1. [Michael Friis](https://www.codeplex.com/site/users/view/friism) ([@friism](https://twitter.com/friism))
- - [#3278](https://nuget.codeplex.com/workitem/3278) - Fixes NuGet.Build targets file to so that it works correctly on MonoDevelop
-1. [Pranav Krishnamoorthy](https://www.codeplex.com/site/users/view/pranavkm) ([@pranav_km](https://twitter.com/pranav_km))
- - Improve Restore command performance by increasing parallelization
-
-## Notable features in the release
-
-### Package Restore by Default (with implicit consent)
-
-NuGet 2.7 introduces a new approach to package restore, and also overcomes a major hurdle: Package restore consent is now on by default! The combination of the new approach and the implicit consent will drastically simplify package restore scenarios.
-
-#### Implicit Consent
-
-With NuGet versions 2.0, 2.1, 2.2, 2.5, and 2.6, users needed to explicitly allow NuGet to download missing packages during build. If this consent had not been explicitly given, then solutions that had enabled package restore would fail to build until the user had granted consent.
-
-Starting with NuGet 2.7, package restore consent is ON by default while allowing users to explicitly *opt out* of package restore if desired, using the checkbox in NuGet's settings in Visual Studio. This change for implicit consent affects NuGet in the following environments:
-
-* Visual Studio 2013 Preview
-* Visual Studio 2012
-* Visual Studio 2010
-* NuGet.exe Command-Line Utility
-
-#### Automatic Package Restore in Visual Studio
-
-Starting with NuGet 2.7, NuGet will automatically download missing packages during build in Visual Studio, even if package restore hasn't been explicitly enabled for the solution. This Automatic Package Restore happens in Visual Studio when you build a project or the solution, but before MSBuild is invoked. This yields a few significant benefits:
-
-1. No further need to use the "Enable NuGet Package Restore" gesture on your solution
-1. Projects don't need to be modified, and NuGet won't make changes to your project to ensure package restore is enabled
-1. All NuGet packages, including those that included MSBuild imports for props/targets files, will be restored *before* MSBuild is invoked, ensuring those props/targets are properly recognized during the build
-
-In order to use Automatic Package Restore in Visual Studio, you only need to take one (in)action:
-
-1. Don't check in your `packages` folder
-
-There are several ways to omit your `packages` folder from source control. For more information, see the [Packages and Source Control](/ndocs/consume-packages/packages-and-source-control) topic.
-
-While all users are implicitly opted into Automatic Package Restore consent, you can easily opt out through the Package Manager settings in Visual Studio.
-
-
-
-#### Simplified Package Restore from the Command-Line
-
-NuGet 2.7 introduces a new feature for nuget.exe: `nuget.exe restore`
-
-This new Restore command allows you to easily restore all packages for a solution with a single command, by accepting a solution file or folder as an argument. Furthermore, that argument is implied when there's only a single solution in the current folder. That means the following all work from a folder that contains a single solution file (MySolution.sln):
-
-1. nuget.exe restore MySolution.sln
-1. nuget.exe restore .
-1. nuget.exe restore
-
-The Restore command will open the solution file and find all projects within the solution. From there, it will find the packages.config files for each of the projects and restore all of the packages found. It also restores solution-level packages found in the .nuget\packages.config file. More information about the new Restore command can be found in the [Command-Line Reference](/ndocs/tools/nuget.exe-cli-reference#restore).
-
-#### The New Package Restore Workflow
-
-We are excited about these changes to Package Restore, as it introduces a new workflow. If you want to omit your packages from source control you simply don't commit the `packages` folder. Visual Studio users who open and build the solution will see the packages automatically restored. For command-line builds, simply invoke `nuget.exe restore` before invoking `msbuild`. You'll no longer need to remember to use the "Enable NuGet Package Restore" gesture on your solution, and we'll no longer need to modify your projects to alter the build. And this also yields a much improved experience for packages that include MSBuild imports, especially for imports added through NuGet's recent feature for [automatically importing props/targets files](/nuget/release-notes/nuget-2.5#Automatic-import-of-msbuild-targets-and-props-files) from the \build folder.
-
-In addition to the work we've done ourselves, we're also working with some important partners to round this new approach out. We don't have concrete timelines for any of these yet, but each partner is as excited as we are about the new approach.
-
-* Team Foundation Service - They are working to integrate the call to `nuget.exe restore` into the default build scenarios.
-* Windows Azure Web Sites - They are working to allow you to push your project to Azure and have `nuget.exe restore` called before your web site is built.
-* TeamCity - They are updating their NuGet Installer plugin for TeamCity 8.x
-* AppHarbor - They are working to allow you to push your repo to AppHarbor and have `nuget.exe restore` called before your solution is build.
-
-With each of the partners above, they would use their own copy of nuget.exe and you would not need to carry nuget.exe in your solution.
-
-#### Known Issues
-
-There were two known issues with nuget.exe restore with the initial 2.7 release, but they were fixed on 9/6/2013 with an update to the [NuGet.CommandLine package](http://www.nuget.org/packages/NuGet.CommandLine/). This update is also available on the [NuGet 2.7 download page](https://nuget.codeplex.com/releases/view/107605) on CodePlex. Running `nuget.exe update -self` will update to the latest release.
-
-The fixed were:
-
-1. [New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)
-1. [New package restore doesn't work with Wix projects](https://nuget.codeplex.com/workitem/3598)
-
-There is also a known issue with the new package restore workflow whereby [Automatic Package Restore does not work for projects under a solution folder](https://nuget.codeplex.com/workitem/3625). This issue was fixed in NuGet 2.7.1.
-
-### Project Retargeting and Upgrade Build Errors/Warnings
-
-Many times after retargeting or upgrading your project, you find that some NuGet packages aren't functioning properly. Unfortunately, there is no indication of this and then there's no guidance on how to address it. With NuGet 2.7, we now use some Visual Studio events to recognize when you've retargeted or upgraded your project in a way that affects your installed NuGet packages.
-
-If we detect that any of your packages were affected by the retargeting or upgrade, we'll produce immediate build errors to let you know. In addition to the immediate build error, we also persist a `requireReinstallation="true"` flag in your packages.config file for all packages that were affected by the retargeting, and each subsequent build in Visual Studio will raise a build warnings for those packages.
-
-While NuGet cannot take automatic action to reinstall affected packages, we hope this indication and warning will guide help you discover when you need to reinstall packages. We are also working on [package reinstallation guidance documentation](/ndocs/consume-packages/reinstalling-and-updating-packages) that these error messages direct you to.
-
-### NuGet Configuration Defaults
-
-Many companies are using NuGet internally, but have had a hard time guiding their developers to use internal package sources instead of nuget.org. NuGet 2.7 introduces a Configuration Defaults feature that allows machine-wide defaults to be specified for:
-
-1. Enabled package sources
-1. Registered, but disabled package sources
-1. The default nuget.exe push source
-
-Each of these can now be configured within a file located at %ProgramData%\NuGet\NuGetDefaults.config. If this config file specifies package sources, then the default nuget.org package source will not be registered automatically, and the ones in NuGetDefaults.config will be registered instead.
-
-While not required to use this feature, we expect companies to deploy NuGetDefaults.config files using Group Policy.
-
-*Note that this feature will never cause a package source to be removed from a developer's NuGet settings. That means if the developer has already used NuGet and therefore has the nuget.org package source registered, it won't be removed after the creation of a NuGetDefaults.config file.*
-
-See [NuGet Configuration Defaults](/ndocs/consume-packages/configuring-nuget-behavior#nuget-defaults-file) for more information about this feature.
-
-### Renaming the Default Package Source
-
-NuGet has always registered a default package source called "NuGet official package source" that points to nuget.org. That name was verbose and it also didn't specify where it was actually pointing. To address those two issues, we've renamed this package source to simply "nuget.org" in the UI. The URL for the package source was also changed to include the "www." prefix. After using NuGet 2.7, your existing "NuGet official package source" will automatically be updated to "nuget.org" as its name and "https://www.nuget.org/api/v2/" as its URL.
-
-### Performance Improvements
-
-We made some performance improvement in 2.7 which will yield smaller memory footprint, less disk usage and faster package installation. We also made smarter queries to OData-based feeds which will reduce the overall payload.
-
-### New Extensibility APIs
-
-We added some new APIs to our extensibility services to fill the gap of missing functionalities in previous releases.
-
-#### IVsPackageInstallerServices
-
- // Checks if a NuGet package with the specified Id and version is installed in the specified project.
- bool IsPackageInstalledEx(Project project, string id, string versionString);
-
- // Get the list of NuGet packages installed in the specified project.
- IEnumerable GetInstalledPackages(Project project);
-
-#### IVsPackageInstaller
-
- // Installs one or more packages that exist on disk in a folder defined in the registry.
- void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary packageVersions);
-
- // Installs one or more packages that are embedded in a Visual Studio Extension Package.
- void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary packageVersions);
-
-### Development-Only Dependencies
-
-This feature was contributed by [Adam Ralph](https://twitter.com/adamralph) and it allows package authors to declare dependencies that were only used at development time and don't require package dependencies. By adding a `developmentDependency="true"` attribute to a package in packages.config, nuget.exe pack will no longer include that package as a dependency.
-
-### Removed Support for Visual Studio 2010 Express for Windows Phone
-
-The new package restore model in 2.7 is implemented by a new VSPackage which is different from the main NuGet VSPackage. Due to a technical issue, this new VSPackage doesn’t work correctly in the *Visual Studio 2010 Express for Windows Phone* SKU as we share the same code base with other supported Visual Studio SKUs. Therefore, starting with NuGet 2.7, we are dropping support for *Visual Studio 2010 Express for Windows Phone* from the published extension. Support for *Visual Studio 2010 Express for Web* is still included in the primary extension published to the Visual Studio Extension Gallery.
-
-Since we are unsure how many developers are still using NuGet in that version/edition of Visual Studio, we are publishing a separate Visual Studio extension specifically for those users and publishing it on CodePlex (rather than the Visual Studio Extension Gallery). We don't plan to continue to maintain that extension, but if this affects you please let us know by filing an issue on CodePlex.
-
-To download the NuGet Package Manager (for Visual Studio 2010 Express for Windows Phone), visit the [NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605) page.
-
-### Bug Fixes
-
-In addition to these features, this release of NuGet also includes many other bug fixes. There were 97 total issues addressed in the release. For a full list of work items fixed in NuGet 2.7, please view the [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.7&status=all).
diff --git a/docs/Release-Notes/NuGet-2.8.2.md b/docs/Release-Notes/NuGet-2.8.2.md
deleted file mode 100644
index a405d33c8..000000000
--- a/docs/Release-Notes/NuGet-2.8.2.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# NuGet 2.8.2 Release Notes
-
-[NuGet 2.8.1 Release Notes](/nuget/release-notes/nuget-2.8.1) | [NuGet 2.8.3 Release Notes](/nuget/release-notes/nuget-2.8.3)
-
-NuGet 2.8.2 was released on May 22, 2014. This release only included changes to the NuGet.exe command-line, the NuGet.Server package and other NuGet packages. The release did not include an updated Visual Studio extension or WebMatrix extension.
-
-## Notable Updates
-
-The most notable updates were in the NuGet.exe command-line and the NuGet.Server package (for self-hosted NuGet feeds).
-
-### Important NuGet.exe Bug Fixes
-
-1. [NuGet.exe Push fails and keeps retrying](https://nuget.codeplex.com/workitem/4000)
-1. [NuGet.exe Push does not send Basic Auth credentials correctly](https://nuget.codeplex.com/workitem/4109)
-1. [NuGet.exe Push won't follow temporary redirect](https://nuget.codeplex.com/workitem/4050)
-
-### Important NuGet.Server Bug Fix
-
-1. [Wrong value of IsAbsoluteLatestVersion returned by NuGet.Server](https://nuget.codeplex.com/workitem/4147)
-
-## Packages Updated
-
-The NuGet.exe command-line and NuGet.Server fixes are shipped as NuGet package updates. There were other packages updated with 2.8.2 as well.
-
-Here's the list of updated packages:
-
-1. [NuGet.Core](https://www.nuget.org/packages/NuGet.Core/)
-1. [NuGet.CommandLine](https://www.nuget.org/packages/NuGet.CommandLine/)
-1. [NuGet.Server](https://www.nuget.org/packages/NuGet.Server/)
-1. [NuGet.Build](https://www.nuget.org/packages/NuGet.Build/)
-1. [NuGet.VisualStudio](https://www.nuget.org/packages/NuGet.VisualStudio/) (the package, not the extension)
-
-## All Changes
-There were 10 issues addressed in the release. For a full list of the work items fixed in NuGet 2.8.2, please view the [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?keyword=&status=All&type=All&priority=All&release=NuGet%202.8.2&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0&reasonClosed=All).
diff --git a/docs/Release-Notes/NuGet-2.8.3.md b/docs/Release-Notes/NuGet-2.8.3.md
deleted file mode 100644
index 99f761704..000000000
--- a/docs/Release-Notes/NuGet-2.8.3.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# NuGet 2.8.3 Release Notes
-
-[NuGet 2.8.2 Release Notes](/nuget/release-notes/nuget-2.8.2) | [NuGet 2.8.5 Release Notes](/nuget/release-notes/nuget-2.8.5)
-
-NuGet 2.8.3 was released October 17, 2014. It is a minor update to our 2.8.1 VSIX with some targeted fixes.
-
-In this release, the support for NuGet Package Manager dialog was added for [ASP.NET vNext](http://www.asp.net/vnext), [DevExtreme](http://js.devexpress.com/) and [BizTalk (.btproj)](http://msdn.microsoft.com/en-us/library/aa577497.aspx) project types. It also includes reliability bug fixes related to the scenarios of enabling package restore and saving package manager options.
diff --git a/docs/Release-Notes/NuGet-2.8.7.md b/docs/Release-Notes/NuGet-2.8.7.md
deleted file mode 100644
index dd9e40782..000000000
--- a/docs/Release-Notes/NuGet-2.8.7.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# NuGet 2.8.7 Release Notes
-
-[NuGet 2.8.6 Release Notes](/nuget/release-notes/nuget-2.8.6) | [NuGet 2.9-RC Release Notes](/nuget/release-notes/nuget-2.8.8-RC)
-
-NuGet 2.8.7 was released July 27, 2015 as a patch update to the 2.8.6 VSIX with fix specific to a bug that effected Powershell policy implementation.
-[https://github.com/NuGet/Home/issues/974](https://github.com/NuGet/Home/issues/974)
-
-
-
diff --git a/docs/Release-Notes/NuGet-2.8.md b/docs/Release-Notes/NuGet-2.8.md
deleted file mode 100644
index 859b59e7f..000000000
--- a/docs/Release-Notes/NuGet-2.8.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# NuGet 2.8 Release Notes
-
-[NuGet 2.7.2 Release Notes](/nuget/release-notes/nuget-2.7.2) | [NuGet 2.8.1 Release Notes](/nuget/release-notes/nuget-2.8.1)
-
-NuGet 2.8 was released on January 29, 2014.
-
-## Acknowledgements
-
-1. [Llewellyn Pritchard](https://www.codeplex.com/site/users/view/leppie) ([@leppie](https://twitter.com/leppie))
- - [#3466](https://nuget.codeplex.com/workitem/3466) - When packing packages, verifying Id of dependency packages.
-1. [Maarten Balliauw](https://www.codeplex.com/site/users/view/maartenba) ([@maartenballiauw](https://twitter.com/maartenballiauw))
- - [#2379](https://nuget.codeplex.com/workitem/2379) - Remove the $metadata suffix when persistening feed credentials.
-1. [Filip De Vos](https://www.codeplex.com/site/users/view/FilipDeVos) ([@foxtricks](https://twitter.com/foxtricks))
- - [#3538](http://nuget.codeplex.com/workitem/3538) - Support specifying project file for the nuget.exe update command.
-1. [Juan Gonzalez](https://www.codeplex.com/site/users/view/jjgonzalez)
- - [#3536](http://nuget.codeplex.com/workitem/3536) - Replacement tokens not passed with -IncludeReferencedProjects.
-1. [David Poole](https://www.codeplex.com/site/users/view/Sarkie) ([@Sarkie_Dave](https://twitter.com/Sarkie_Dave))
- - [#3677](http://nuget.codeplex.com/workitem/3677) - Fix nuget.push throwing OutOfMemoryException when pushing large package.
-1. [Wouter Ouwens](https://www.codeplex.com/site/users/view/Despotes)
- - [#3666](http://nuget.codeplex.com/workitem/3666) - Fix incorrect target path when project references another CLI/C++ project.
-1. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) ([@adamralph](https://twitter.com/adamralph))
- - [#3639](https://nuget.codeplex.com/workitem/3639) - Allow packages to be installed as development dependencies by default
-1. [David Fowler](https://www.codeplex.com/site/users/view/dfowler) ([@davidfowl](https://twitter.com/davidfowl))
- - [#3717](https://nuget.codeplex.com/workitem/3717) - Remove implicit upgrades to the latest patch version
-1. [Gregory Vandenbrouck](https://www.codeplex.com/site/users/view/vdbg)
- - Several bug fixes and improvements for NuGet.Server, the nuget.exe mirror command, and others.
- - This work was done over several months, with Gregory working with us on the right timing to integrate into master for 2.8.
-
-## Notable features in the release
-
-### Patch Resolution for Dependencies
-When resolving package dependencies, NuGet has historically implemented a strategy of selecting the lowest major and minor package version which satisfies the dependencies on the package. Unlike the major and minor version, however, the patch version was always resolved to the highest version. Though the behavior was well-intentioned, it created a lack of determinism for installing packages with dependencies. Consider the following example:
-
-```
- PackageA@1.0.0 -[ >=1.0.0 ]-> PackageB@1.0.0
-
- Developer1 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.0
-
- PackageB@1.0.1 is published
-
- Developer2 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.1
-```
-
-In this example, even though Developer1 and Developer2 installed PackageA@1.0.0, each ended up with a different version of PackageB. NuGet 2.8 changes this default behavior such that the dependency resolution behavior for patch versions is consistent with the behavior for major and minor versions. In the above example, then, PackageB@1.0.0 would be installed as a result of installing PackageA@1.0.0, regardless of the newer patch version.
-
-### -DependencyVersion Switch
-Though NuGet 2.8 changes the _default_ behavior for resolving dependencies, it also adds more precise control over dependency resolution process via the -DependencyVersion switch in the package manager console. The switch enables resolving dependencies to the lowest possible version (default behavior), the highest possible version, or the highest minor or patch version. This switch only works for install-package in the powershell command.
-
-
-
-### DependencyVersion Attribute
-In addition to the -DependencyVersion switch detailed above, NuGet has also allowed for the ability to set a new attribute in the nuget.config file defining what the default value is, if the -DependencyVersion switch is not specified in an invocation of install-package. This value will also be respected by the NuGet Package Manager Dialog for any install package operations. To set this value, add the attribute below to your nuget.config file:
-
-```
-
-
-
-```
-
-### Preview NuGet Operations With -whatif
-Some NuGet packages can have deep dependency graphs, and as such, it can be helpful during an install, uninstall, or update operation to first see what will happen. NuGet 2.8 adds the standard PowerShell -whatif switch to the install-package, uninstall-package, and update-package commands to enable visualizing the entire closure of packages to which the command will be applied. For example, running `install-package Microsoft.AspNet.WebApi -whatif` in an empty ASP.NET Web application yields the following.
-
-```
- PM> install-package Microsoft.AspNet.WebApi -whatif
- Attempting to resolve dependency 'Microsoft.AspNet.WebApi.WebHost (≥ 5.0.0)'.
- Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Core (≥ 5.0.0)'.
- Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Client (≥ 5.0.0)'.
- Attempting to resolve dependency 'Newtonsoft.Json (≥ 4.5.11)'.
- Install Newtonsoft.Json 4.5.11
- Install Microsoft.AspNet.WebApi.Client 5.0.0
- Install Microsoft.AspNet.WebApi.Core 5.0.0
- Install Microsoft.AspNet.WebApi.WebHost 5.0.0
- Install Microsoft.AspNet.WebApi 5.0.0
-```
-
-### Downgrade Package
-It is not uncommon to install a prerelease version of a package in order to investigate new features and then decide to roll back to the last stable version. Prior to NuGet 2.8, this was a multi-step process of uninstalling the prerelease package and its dependencies, and then installing the earlier version. With NuGet 2.8, however, the update-package will now roll back the entire package closure (e.g. the package's dependency tree) to the previous version.
-
-### Development Dependencies
-Many different types of capabilities can be delivered as NuGet packages - including tools that are used for optimizing the development process. These components, while they can be instrumental in developing a new package, should not be considered a dependency of the new package when it is later published. NuGet 2.8 enables a package to identify itself in the .nuspec file as a developmentDependency. When installed, this metadata will also be added to the packages.config file of the project into which the package was installed. When that packages.config file is later analyzed for NuGet dependencies during `nuget.exe pack`, it will exclude those dependences marked as development dependencies.
-
-### Individual packages.config Files for Different Platforms
-When developing applications for multiple target platforms, it is common to have different project files for each of the respective build environments. It is also common to consume different NuGet packages in different project files, as packages have varying levels of support for different platforms. NuGet 2.8 provides improved support for this scenario by creating different packages.config files for different platform-specific project files.
-
-
-
-### Fallback to Local Cache
-Though NuGet packages are typically consumed from a remote gallery such as [the NuGet gallery](http://www.nuget.org/) using a network connection, there are many scenarios where the client is not connected. Without a network connection, the NuGet client was not able to successfully install packages - even when those packages were already on the client's machine in the local NuGet cache. NuGet 2.8 adds automatic cache fallback to the package manager console. For example, when disconnecting the network adapter and installing jQuery, the console shows the following:
-
-```
- PM> Install-Package jquery
- The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at C:\Users\me\AppData\Local\NuGet\Cache
- Installing 'jQuery 2.0.3'.
- Successfully installed 'jQuery 2.0.3'.
- Adding 'jQuery 2.0.3' to WebApplication18.
- Successfully added 'jQuery 2.0.3' to WebApplication18.
-```
-
-The cache fallback feature does not require any specific command arguments. Additionally, cache fallback currently works only in the package manager console - the behavior does not currently work in the package manager dialog.
-
-### WebMatrix NuGet Client Updates
-Along with NuGet 2.8, the NuGet extension for WebMatrix was also updated to include many of the major features delivered with [NuGet 2.5](/nuget/release-notes/nuget-2.5). New capabilities include those such as 'Update All', 'Minimum NuGet Version', and allowing for overwriting of content files.
-
-To update your NuGet Package Manager extension in WebMatrix 3:
-
-1. Open WebMatrix 3
-2. Click the Extensions icon in the ribbon
-3. Select the Updates tab
-4. Click to update NuGet Package Manager to 2.5.0
-5. Close and restart WebMatrix 3
-
-This is the NuGet team's first release of the NuGet Package Manager extension for WebMatrix. The code was recently contributed by Microsoft into the open-source NuGet project. Previously, the NuGet integration was built into WebMatrix, and it could not be updated out of band from WebMatrix. We now have the capability to further update it alongside the rest of NuGet's client tools.
-
-### Bug Fixes
-One of the major bug fixes made was performance improvement in the update-package -reinstall command.
-
-In addition to these features and the aforementioned performance fix, this release of NuGet also includes many other bug fixes. There were 181 total issues addressed in the release. For a full list of the work items fixed in NuGet 2.8, please view the [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.8&status=all).
diff --git a/docs/Release-Notes/NuGet-2.9-RC.md b/docs/Release-Notes/NuGet-2.9-RC.md
deleted file mode 100644
index d16735634..000000000
--- a/docs/Release-Notes/NuGet-2.9-RC.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# NuGet 2.9-RC Release Notes
-
-[NuGet 2.8.7 Release Notes](/nuget/release-notes/nuget-2.8.7) | [NuGet 3.0 Preview Release Notes](/nuget/release-notes/nuget-3.0-preview)
-
-NuGet 2.9 was released September 10, 2015 as an update to the 2.8.7 VSIX for Visual Studio 2012 and 2013.
-
-### Updates in this release
-
-* Now skipping processing packages if their contained *.nuspec document is malformed - [PR8](https://github.com/NuGet/NuGet2/pull/8)
-* Corrected multipartwebrequest handling of \r\n for Unix/Linux scenarios - [776](https://github.com/NuGet/Home/issues/776)
-* Corrected integration with build events in Visual Studio 2013 Community edition - [1180](https://github.com/NuGet/Home/issues/1180)
-
-
-The complete list of fixes in this release can be found on GitHub in the [2.8.8 milestone](https://github.com/NuGet/Home/issues?q=milestone%3A2.8.8+is%3Aclosed)
-
-Download the extension for:
-
-* [Visual Studio 2012](https://dist.nuget.org/visualstudio-2012-vsix/v2.9-rc/NuGet.Tools.vsix)
-* [Visual Studio 2013](https://dist.nuget.org/visualstudio-2013-vsix/v2.9-rc/NuGet.Tools.vsix)
-
-
diff --git a/docs/Release-Notes/NuGet-3.1.1.md b/docs/Release-Notes/NuGet-3.1.1.md
deleted file mode 100644
index b1a005303..000000000
--- a/docs/Release-Notes/NuGet-3.1.1.md
+++ /dev/null
@@ -1,7 +0,0 @@
-
-# NuGet 3.1.1 Release Notes
-
-[NuGet 3.1 Release Notes](/nuget/release-notes/nuget-3.1) | [NuGet 3.2-RC Release Notes](/nuget/release-notes/nuget-3.2-RC)
-
-NuGet 3.1.1 was released July 27, 2015 as a patch update to the 3.1 VSIX with fix specific to a bug that effected Powershell policy implementation.
-[https://github.com/NuGet/Home/issues/974](https://github.com/NuGet/Home/issues/974)
\ No newline at end of file
diff --git a/docs/Release-Notes/NuGet-3.5-Beta.md b/docs/Release-Notes/NuGet-3.5-Beta.md
deleted file mode 100644
index b823a91d2..000000000
--- a/docs/Release-Notes/NuGet-3.5-Beta.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# NuGet 3.5 Beta Release Notes
-
-NuGet 3.5 Beta was released on May 16, 2016 as part tof the ASP.NET Core Preview Tooling wave. This release adds support .NET Core RC2 and ASP.NET Core RC2. For more information about this release please refer to http://dot.net
-
-You can download both the VSIX and NuGet.exe [here](https://dist.nuget.org/index.html).
-
-NuGet 3.5 Beta is a superset of the changes introduced in the 3.4.3 release. For a complete set of changes, please refer to the 3.4.3 release notes [here](https://github.com/NuGet/Home/issues?q=is%3Aissue+milestone%3A3.4.3+is%3Aclosed) and the notes for the 3.5 Beta below.
-
-## Updates and Improvements
-
-* Adds support for ASP.NET Core RC2 and .NET Core RC2
-
-## Fixes
-
-* The list of fixes and improvements in this release, is given [here](https://github.com/NuGet/Home/issues?q=is%3Aissue+milestone%3A%223.5+Beta%22+is%3Aclosed).
diff --git a/docs/Release-Notes/_metadata b/docs/Release-Notes/_metadata
deleted file mode 100644
index 7f71f507d..000000000
--- a/docs/Release-Notes/_metadata
+++ /dev/null
@@ -1,49 +0,0 @@
-Known Issues
-NuGet 3.5 RC
-NuGet 3.5 Beta2
-NuGet 2.12
-NuGet 2.12-RC
-NuGet 3.4.4
-NuGet 3.5-Beta
-NuGet 3.4.3
-NuGet 3.4.2
-NuGet 3.4.1
-NuGet 3.4
-NuGet 3.4-RC
-NuGet 3.3
-NuGet 3.2.1
-NuGet 3.2
-NuGet 3.2-RC
-NuGet 3.1.1
-NuGet 3.1
-NuGet 3.0.0
-NuGet 3.0 RC2
-NuGet 3.0 RC
-NuGet 3.0 Beta
-NuGet 3.0 Preview
-NuGet 2.9-RC
-NuGet 2.8.7
-NuGet 2.8.6
-NuGet 2.8.5
-NuGet 2.8.3
-NuGet 2.8.2
-NuGet 2.8.1
-NuGet 2.6.1 for WebMatrix
-NuGet 2.8
-NuGet 2.7.2
-NuGet 2.7.1
-NuGet 2.7
-NuGet 2.6
-NuGet 2.5
-NuGet 2.2.1
-NuGet 2.2
-NuGet 2.1
-NuGet 2.0
-NuGet 1.8
-NuGet 1.7
-NuGet 1.6
-NuGet 1.5
-NuGet 1.4
-NuGet 1.3
-NuGet 1.2
-NuGet 1.1
diff --git a/docs/Schema/Analyzers-Conventions.md b/docs/Schema/Analyzers-Conventions.md
deleted file mode 100644
index b0721778e..000000000
--- a/docs/Schema/Analyzers-Conventions.md
+++ /dev/null
@@ -1,153 +0,0 @@
-# Analyzer NuGet Formats
-
-The .NET Compiler Platform (also known as "Roslyn") allow developers to create [analyzers] (https://github.com/dotnet/roslyn/wiki/How-To-Write-a-C%23-Analyzer-and-Code-Fix)that examine the syntax tree and semantics of code as it's being written. This provides developers with a way to create and domain-specific analysis tools, such as those that would help guide the use of a particular API or library. You can find more information on the [.NET/Roslyn](https://github.com/dotnet/roslyn/wiki) GitHub wiki. Also see the article, [Use Roslyn to Write a Live Code Analyzer for your API](https://msdn.microsoft.com/magazine/dn879356.aspx) in MSDN Magazine.
-
-Analyzers themselves are typically packaged and distributed as part of the NuGet packages that implement the API or library in question.
-
-For a good example, see the [System.Runtime.Analyzers](https://www.nuget.org/packages/System.Runtime.Analyzers) package, which has the following contents:
-
-- analyzers\dotnet\System.Runtime.Analyzers.dll
-- analyzers\dotnet\cs\System.Runtime.CSharp.Analyzers.dll
-- analyzers\dotnet\vb\System.Runtime.VisualBasic.Analyzers.dll
-- build\System.Runtime.Analyzers.Common.props
-- build\System.Runtime.Analyzers.props
-- build\System.Runtime.CSharp.Analyzers.props
-- build\System.Runtime.VisualBasic.Analyzers.props
-- tools\install.ps1
-- tools\uninstall.ps1
-
-As you can see, you place the analyzer DLLs into an `analyzers` folder in the package.
-
-Props files, which are included to disable legacy FxCop rules in favor of the analyzer implementation, are placed in the `build` folder.
-
-Install and uninstall scripts that support projects using `packages.config` are placed in `tools`.
-
-Also note that because this package has no platform-specific requirements, the `platform` folder is omitted.
-
-
-## Analyzers path format
-
-The use of the `analyzers` folder is similar to that used for [target frameworks](/ndocs/create-packages/supporting-multiple-target-frameworks), except the specifiers in the path describe development host dependencies instead of build-time. The general format is as follows:
-
- $/analyzers/{framework_name}{version}/{supported_architecture}/{supported_language}}/{analyzer_name}.dll
-
-- **framework_name**: the *optional* API surface area of the .NET Framework that the contained DLLs need to run. `dotnet` is presently the only valid value because Roslyn is the only host that can run analyzers. If no target is specified, DLLs are assumed to apply to *all* targets.
-- **supported_language**: the language for which the DLL applies, one of `cs` (C#) and `vb` (Visual Basic), and `fs` (F#). The language indicates that the analyzer should be loaded only for a project using that language. If no language is specified then DLL is assumed to apply to *all* languages that support analyzers.
-- **analyzer_name**: specifies the DLLs of the analyzer. If you need additional files beyond DLLs, they must be included through a targets or properties files.
-
-
-## Install and uninstall scripts
-
-If the user's project is using `packages.config`, the MSBuild script that picks up the analyzer does not come into play, so you should `install.ps1` and `uninstall.ps1` in the `tools` folder with the contents that are described below.
-
-**install.ps1 file contents**
-
- param($installPath, $toolsPath, $package, $project)
-
- $analyzersPaths = Join-Path (Join-Path (Split-Path -Path $toolsPath -Parent) "analyzers" ) * -Resolve
-
- foreach($analyzersPath in $analyzersPaths)
- {
- # Install the language agnostic analyzers.
- if (Test-Path $analyzersPath)
- {
- foreach ($analyzerFilePath in Get-ChildItem $analyzersPath -Filter *.dll)
- {
- if($project.Object.AnalyzerReferences)
- {
- $project.Object.AnalyzerReferences.Add($analyzerFilePath.FullName)
- }
- }
- }
- }
-
- $project.Type # gives the language name like (C# or VB.NET)
- $languageFolder = ""
- if($project.Type -eq "C#")
- {
- $languageFolder = "cs"
- }
- if($project.Type -eq "VB.NET")
- {
- $languageFolder = "vb"
- }
- if($languageFolder -eq "")
- {
- return
- }
-
- foreach($analyzersPath in $analyzersPaths)
- {
- # Install language specific analyzers.
- $languageAnalyzersPath = join-path $analyzersPath $languageFolder
- if (Test-Path $languageAnalyzersPath)
- {
- foreach ($analyzerFilePath in Get-ChildItem $languageAnalyzersPath -Filter *.dll)
- {
- if($project.Object.AnalyzerReferences)
- {
- $project.Object.AnalyzerReferences.Add($analyzerFilePath.FullName)
- }
- }
- }
- }
-
-
-**uninstall.ps1 file contents**
-
- param($installPath, $toolsPath, $package, $project)
-
- $analyzersPaths = Join-Path (Join-Path (Split-Path -Path $toolsPath -Parent) "analyzers" ) * -Resolve
-
- foreach($analyzersPath in $analyzersPaths)
- {
- # Uninstall the language agnostic analyzers.
- if (Test-Path $analyzersPath)
- {
- foreach ($analyzerFilePath in Get-ChildItem $analyzersPath -Filter *.dll)
- {
- if($project.Object.AnalyzerReferences)
- {
- $project.Object.AnalyzerReferences.Remove($analyzerFilePath.FullName)
- }
- }
- }
- }
-
- $project.Type # gives the language name like (C# or VB.NET)
- $languageFolder = ""
- if($project.Type -eq "C#")
- {
- $languageFolder = "cs"
- }
- if($project.Type -eq "VB.NET")
- {
- $languageFolder = "vb"
- }
- if($languageFolder -eq "")
- {
- return
- }
-
- foreach($analyzersPath in $analyzersPaths)
- {
- # Uninstall language specific analyzers.
- $languageAnalyzersPath = join-path $analyzersPath $languageFolder
- if (Test-Path $languageAnalyzersPath)
- {
- foreach ($analyzerFilePath in Get-ChildItem $languageAnalyzersPath -Filter *.dll)
- {
- if($project.Object.AnalyzerReferences)
- {
- try
- {
- $project.Object.AnalyzerReferences.Remove($analyzerFilePath.FullName)
- }
- catch
- {
-
- }
- }
- }
- }
- }
\ No newline at end of file
diff --git a/docs/Schema/Target-Frameworks.md b/docs/Schema/Target-Frameworks.md
deleted file mode 100644
index 172bf5bc3..000000000
--- a/docs/Schema/Target-Frameworks.md
+++ /dev/null
@@ -1,704 +0,0 @@
-# Target Frameworks
-
-NuGet uses target framework references in a variety of places to specifically identify and isolate framework-dependent components of a package:
-
-- [nuspec manifest](/ndocs/schema/nuspec): A package can indicate distinct packages to be included in a project depending on the project's target framework.
-- [nupkg folder name](/ndocs/create-packages/creating-a-package#from-a-convention-based-working-directory): The folders inside a package's `lib` folder can be named according to the target framework, each of which contains the DLLs and other content appropriate to that framework.
-- [project.json](/ndocs/schema/project.json): The `frameworks` node specifies the framework versions that the project can be compiled against.
-
-
- Note
- The NuGet client source code that calculates the tables below is found in the following locations:
-
-
-
-## Supported Frameworks
-
-A framework is typically referenced by a short target framework moniker or TFM. In .NET Standard this is also is generalized to *TxM* to allow a single reference to multiple frameworks.
-
-The NuGet clients support the following frameworks. Equivalents are shown within brackets [].
-
-
-
-## Deprecated Frameworks
-The following frameworks are deprecated. Packages targeting these frameworks should migrate to the indicated replacements.
-
-
-
-## Precedence
-
-A number of frameworks are related to and compatible with one another, but not necessarily equivalent:
-
-
-
-
Framework
-
Can use
-
-
-
- uap (Universal Windows Platform)
-
-
- win81
- wpa81
- netcore50
-
-
-
-
- win (Windows Store)
-
-
- winrt
- winrt45
-
-
-
-
-
-## NET Platform Standard
-
-The [.NET Platform Standard](https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md) simplifies references between binary-compatible frameworks, allowing a single target framework to reference a combination of others. (For background, see the [.NET Primer](https://docs.microsoft.com/en-us/dotnet/articles/standard/index).)
-
-The [NuGet Get Nearest Framework Tool](https://aka.ms/s2m3th) simulates what NuGet uses to select one framework from many available framework assets in a package based on the project's framework.
-
-The `dotnet` series of monikers should be used in NuGet 3.3 an earlier; the `netstandard` moniker syntax should be used in v3.4 and later.
-
-
-## Portable Class Libraries
-
-
- Not Recommended
- ALthough PCLs are supported, package authors should support netstandard instead. The .NET Platform Standard is an evolution of PCLs and represents binary portability across platforms using a single moniker that isn't tied to a static like like portable-a+b+c monikers.
-
-
-To define a target framework that refers to multiple child-target-frameworks, the `portable` keyword use used to prefix the list of referenced frameworks. Avoid artificially including extra frameworks that are not directly compiled against because it can lead to unintended side-effects in those frameworks.
-
-Additional frameworks defined by third parties provide compatibility with other environments that are accessible in this manner. Additionally, there are shorthand profile numbers that are available to reference these combinations of related frameworks as `Profile#`, but this is not a recommended practice to use these numbers as it reduces the readability of the folders and nuspec.
-
-
-
-Additionally, NuGet packages targeting Xamarin can use additional Xamarin-defined frameworks. See [Creating NuGet packages for Xamarin](https://developer.xamarin.com/guides/cross-platform/advanced/nuget/).
-
-
-
-
Name
-
Description
-
.NET Standard
-
-
-
monoandroid
-
Mono Support for Android OS
-
netstandard1.4
-
-
-
monotouch
-
Mono Support for iOS
-
netstandard1.4
-
-
-
monomac
-
Mono Support for OSX
-
netstandard1.4
-
-
-
xamarinios
-
Support for Xamarin for iOS
-
netstandard1.4
-
-
-
xamarinmac
-
Supports for Xamarin for Mac
-
netstandard1.4
-
-
-
xamarinpsthree
-
Support for Xamarin on Playstation 3
-
netstandard1.4
-
-
-
xamarinpsfour
-
Support for Xamarin on Playstation 4
-
netstandard1.4
-
-
-
xamarinpsvita
-
Support for Xamarin on PS Vita
-
netstandard1.4
-
-
-
xamarinwatchos
-
Xamarin for Watch OS
-
netstandard1.4
-
-
-
xamarintvos
-
Xamarin for TV OS
-
netstandard1.4
-
-
-
xamarinxboxthreesixty
-
Xamarin for XBox 360
-
netstandard1.4
-
-
-
xamarinxboxone
-
Xamarin for XBox One
-
netstandard1.4
-
-
-
-
- Note
- Stephen Cleary has created a tool that lists the supported PCLs, which you can find on his post, Framework profiles in .NET.
-
-
-
-
diff --git a/docs/Schema/_metadata b/docs/Schema/_metadata
deleted file mode 100644
index a4c9a13c0..000000000
--- a/docs/Schema/_metadata
+++ /dev/null
@@ -1,5 +0,0 @@
-nuspec
-project.json
-nuget.config-file
-Target-Frameworks
-Analyzers-Conventions
\ No newline at end of file
diff --git a/docs/Schema/media/SchemaExplorer.png b/docs/Schema/media/SchemaExplorer.png
deleted file mode 100644
index f45665245..000000000
Binary files a/docs/Schema/media/SchemaExplorer.png and /dev/null differ
diff --git a/docs/Schema/nuget.config-file.md b/docs/Schema/nuget.config-file.md
deleted file mode 100644
index 58bdb02f5..000000000
--- a/docs/Schema/nuget.config-file.md
+++ /dev/null
@@ -1,355 +0,0 @@
-# NuGet.Config Reference
-
-NuGet behavior is controlled by settings in `NuGet.Config` files as described in [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior). Setting names are case-insensitive.
-
-`NuGet.Config` is an XML file containing a top-level <configuration> node, which then contains the section elements described in this topic. Each section then contains zero or more <add> elements with `key` and `value` attributes. See the [examples config file](#example-config-file) at the end of this topic.
-
-Note that with NuGet 3.4+ you can use environment variables in `NuGet.Config` values to apply machine-specific settings at run time. For example, if the `HOME` environment variable is set to `c:\users\username`, then the value of `%HOME%\NuGetRepository` in the configuration file will resolve to `c:\users\username\NuGetRepository`. If an environment variable is not found, NuGet will leave the value unmodified.
-
-In this topic:
-
-- [config section](#config-section)
-- [bindingRedirects section](#bindingredirects-section)
-- [packageRestore section](#packagerestore-section)
-- [solution section](#solution-section)
-- [Package source sections](#package-source-sections):
- - [packageSources](#packagesources)
- - [packageSourceCredentials](#packagesourcecredentials)
- - [apikeys](#apikeys)
- - [disabledPackageSources](#disabledpackagesources)
- - [activePackageSource](#activepackagesource)
-- [Example config file](#example-config-file)
-
-
-
-## config section
-
-
-
-
-
-Contains miscellaneous configuration settings, which can be set using the [`nuget config` command](/ndocs/tools/nuget.exe-cli-reference#config).
-
-Note: `dependencyVersion` and `repositoryPath` apply only to projects using `packages.config`. `globalPackagesFolder` applies only to projects using `project.json`.
-
-
-
-
Key
-
Value
-
-
-
dependencyVersion (package.config only)
-
The default DependencyVersion value for package install, restore, and update, when the `-DependencyVersion` switch is not specified directly. This value is also used by the NuGet Package Manager UI. Values are Lowest, HighestPatch, HighestMinor, Highest.
-
-
-
globalPackagesFolder (project.json only)
-
The location of the default global packages folder. The default is %userprofile%\.nuget\packages. A relative path can be used in project-specific nuget.config files.
-
-
-
repositoryPath (packages.config only)
-
The location in which to install NuGet packages instead of the default $(Solutiondir)\packages folder. A relative path can be used in project-specific nuget.config files.
-
-
-
defaultPushSource
-
Identifies the URL or path of the package source that should be used as the default if no other package sources are found for an operation.
Proxy settings to use when connecting to package sources; http_proxy should be in the format http://<username>:<password>@<domain>. Passwords are encrypted and cannot be added manually. For no_proxy, the value is a comma-separated list of domains the bypass the proxy server. You can alternately use the HTTP_PROXY and NO_PROXY environment variables for those values. For additional details, see NuGet proxy settings (skolima.blogspot.com).
-
-
-
-**Example**:
-
-
-
-
-
-
-
-
-
-## bindingRedirects section
-
-Configures whether NuGet does automatic binding redirects when a package is installed.
-
-
-
-
Key
-
Value
-
-
-
skip
-
A Boolean indicating whether to skip automatic binding redirects. The default is false.
A Boolean indicating whether NuGet can perform automatic restore. You can also set the EnableNuGetPackageRestore environment variable with a value of True instead of setting this key in the config file.
-
-
-
automatic
-
A Boolean indicating whether NuGet shoudl check for missing packages during a build.
-
-
-
-
-**Example**:
-
-
-
-
-
-
-## solution section
-
-Controls whether the `packages` folder of a solution is included in source control. This section works only in `nuget.config` files in a solution folder.
-
-
-
-
Key
-
Value
-
-
-
disableSourceControlIntegration
-
A Boolean indicating whether to ignore the packages folder when working with source control. The default value is true.
-
-
-
-
-**Example**:
-
-
-
-
-
-
-## Package source sections
-
-The `packageSources`, `packageSourceCredentials`, `apikeys`, `activePackageSource`, and `disabledPackageSources` all work together to configure how NuGet works with package repositories during install, restore, and update operations.
-
-The [`nuget sources` command](/ndocs/tools/nuget.exe-cli-reference#sources) is generally used to manage these settings, except for `apikeys` which is managed using the [`nuget setapikey` command](/ndocs/tools/nuget.exe-cli-reference#setapikey).
-
-### packageSources
-
-Lists all known package sources. Sources can be added using the
-
-
-
-
Key
-
Value
-
-
-
(name to assign to the package source)
-
The path or URL of the package source.
-
-
-
-**Example**:
-
-
-
-
-
-
-
-
-### packageSourceCredentials
-
-Stores usernames and passwords for sources, typically specified with the `-username` and `-password` switches with `nuget sources`. Passwords are encrypted by default unless the `-storepasswordincleartext` option is also used.
-
-
-
-
Key
-
Value
-
-
-
username
-
The user name for the source in plain text.
-
-
-
password
-
The encrypted password for the source.
-
-
-
cleartextpassword
-
The unencrypted password for the source.
-
-
-
-**Example:**
-
-In the config file, the <packageSourceCredentials> element will contain child nodes for each applicable source name. That is, for a source named "Contoso", the config file will contain the following when using an encrypted password:
-
-
-
-
-
-
-
-
-When using an unencrypted password:
-
-
-
-
-
-
-
-
-### apikeys
-
-Stores keys for sources that use API key authentication, as set with the [`nuget -setapikey` command](/ndocs/tools/nuget.exe-cli-reference#setapikey).
-
-
-
-
Key
-
Value
-
-
-
(source URL)
-
The encrypted API key.
-
-
-
-**Example**:
-
-
-
-
-
-
-### disabledPackageSources
-
-Identified currently disabled sources. May be empty.
-
-
-
-
Key
-
Value
-
-
-
(name of source)
-
A Boolean indicating whether the source is disabled.
-
-
-
-
-**Example:**
-
-
-
-
-
-
-
-
-### activePackageSource
-
-*(2.x only; deprecated in 3.x+)*
-
-Identifies to the currently active source or indicates the aggregate of all sources.
-
-
-
-
Key
-
Value
-
-
-
(name of source) or `All`
-
If key is the name of a source, the value is the source path or URL. If `All`, value should be `(Aggregate source)` to combine all package sources that are not otherwise disabled.
-
-
-
-**Example**:
-
-
-
-
-
-
-
-
-
-
-## Example config file
-
-Below is an example `NuGet.Config` file that illustrates a number of settings:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/Schema/nuspec.md b/docs/Schema/nuspec.md
deleted file mode 100644
index a562664ba..000000000
--- a/docs/Schema/nuspec.md
+++ /dev/null
@@ -1,817 +0,0 @@
-# .nuspec Reference
-
-A `.nuspec` file is an XML manifest that contains package metadata. This is used both to build the package and to provide information to consumers. The manifest is always included in a package.
-
-In this topic:
-
-- [General form and schema](#general-form-and-schema)
-- [Replacement tokens](#replacement-tokens) (when used with a Visual Studio project)
-- [Dependencies](#dependencies)
-- [Explicit assembly references](#explicit-assembly-references)
-- [Framework assembly references](#framework-assembly-references)
-- [Including assembly files](#including-assembly-files)
-- [Including content files](#including-content-files)
-- [Examples](#examples)
-
-## General form and schema
-
-The current `nuspec.xsd` schema file can be found in the [NuGet GitHub repository](https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Packaging/compiler/resources/nuspec.xsd).
-
-
- Note
- On nuget.org you can find a NuGet.Manifest.Schema 2.0.4 package. However, the schema files contained within it are older versions applicable to NuGet 2.0 and earlier. The most up-to-date schema file is best obtained from the GitHub repository.
-
-
-Within this schema, a `.nuspec` file has the following general form:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-For a clear visual representation of the schema, open the schema file in Visual Studio in Design mode and click on the **XML Schema Explorer** link, or open the file as code, right-click in the editor, and select **Show XML Schema Explorer**. Either way you'll get a view like the one below (when mostly expanded):
-
-
-
-
-### Required metadata elements
-
-Although the following elements are the minimum requirements for a package, you should consider adding the [optional metadata elements](#optional-metadata-elements) to improve the overall experience developers have with your package.
-
-These elements must appear within a <metadata> element.
-
-
-
-
-
Element
-
Description
-
-
-
id
-
-
- The case-insensitive package identifier, which must be unique across nuget.org or whatever gallery the package will reside in. IDs may not contain spaces or characters that are not valid for a URL, and generally follow .NET namespace rules. See Choosing a unique package identifier for guidance.
-
-
-
-
version
-
The version of the package, following the major.minor.patch pattern. Version numbers may include a pre-release suffix as described in Prerelease Packages
-
-
-
description
-
- A long description of the package for UI display.
-
-
-
-
authors
-
A comma-separated list of packages authors, matching the profile names on nuget.org. These are displayed in the NuGet Gallery on nuget.org and are used to cross-reference packages by the same authors.
-
-
-
-
-### Optional metadata elements
-
-These elements must appear within a <metadata> element.
-
-#### Single elements
-
-
-
-
-
Element
-
Description
-
-
-
title
-
- A human-friendly title of the package, typically used in UI displays as on nuget.org and the Package Manager in Visual Studio. If not specified, the package ID is used instead.
-
-
-
-
owners
-
- A comma-separated list of the package creators using profile names on nuget.org. This is often the same list as in authors, and is ignored when uploading the package to nuget.org. See Managing package owners on nuget.org
-
-
-
-
projectUrl
-
A URL for the package's home page, often shown in UI displays as well as nuget.org.
-
-
-
licenseUrl
-
A URL for the package's license, often shown in UI displays as well as nuget.org.
-
-
-
iconUrl
-
A URL for a 64x64 image with transparenty background to use as the icon for the package in UI display.
-
-
-
requireLicenseAcceptance
-
A Boolean value specifying whether the client must prompt the consumer to accept the package license before installing the package.
-
-
-
developmentDependency
-
(2.8+) A Boolean value specifying whether the package will be marked as a development-only-dependency, which prevents the package from being included as a dependency in other packages.
-
-
-
summary
-
- A short description of the package for UI display. If omitted, a truncated version of the description is used.
-
-
-
-
releaseNotes
-
- (1.5+) A description of the changes made in this release of the package, often used in UI like the Updates tab of the Visual Studio Package Manager in place of the package description.
-
-
-
-
copyright
-
(1.5+) Copyright details for the package.
-
-
-
language
-
The locale ID for the package. See [Creating localized packages](/ndocs/create-packages/creating-localized-packages).
-
-
-
tags
-
A space-delimited list of tags and keywords that describe the package and aid discoverability of packages through search and filtering mechanisms.
-
-
-
servicable
-
(3.3+)For internal NuGet use only
-
-
-
minClientVersion
-
(2.5+) Specifies the minimum version of the NuGet client that can install this package, enfoced by nuget.exe and the Visual Studio Package Manager.
-
-
-
-#### Collection elements
-
-
-
-
packageTypes
-
(3.3+) A collection of zero or more <packageType> elements specifying the type of the package if other than a traditional dependency package. Each packageType has attributes of name and verion. See Setting a package type.
-
-
-
-
dependencies
-
A collection of zero or more <dependency> elements specifying the dependencies for the package. Each dependency has attributes of id, version, include (3.x+), and exclude (3.x+). See Dependencies below.
-
-
-
frameworkAssemblies
-
(1.2+) A collection of zero or more <frameworkAssembly> elements identifying .NET Framework assembly references that this package requires, which ensures that references are added to projects consuming the package. Each frameworkAssembly has assemblyName and targetFramework attributes. See Specifying framework assembly references GAC below.
-
-
-
references
-
(1.5+) A collection of zero or more <reference> elements naming assemblies in the package's lib folder that are added as project references. Each reference has a file attribute. <references> can also contain a <group< element with a targetFramework attribute, that then contains <reference> elements. If omitted, all references in lib are included. See Specifying explicit assembly references. below.
-
-
-
-
contentFiles
-
(3.3+) A collection of <files> elements that identify content files that should be include in the consuming project. These files are specified with a set of attributes that describe how they should be used within the project system. See Specifying files to include in the package below.
-
-
-
-
-
-
-### Files element
-
-The <package> node may also contain a <files> and/or <contentFiles> nodes as siblings to <metadata> to specify whcih assembly and content files to include in the package. See Including assembly files and Including content files later in this topic for details.
-
-
-## Replacement tokens
-
-When creating a package, the [`nuget pack` command](/ndocs/tools/nuget.exe-cli-reference#pack) will replace $-delimited tokens in the `.nuspec` file's <metadata> node with values that come from either a project file or the `pack` command's `-properties` switch.
-
-On the command line, you specify token values with `nuget pack -properties =;=`. For example, you can use a token such as `$owners$` and `$desc$` in the `.nuspec` and provide the values at packing time as follows:
-
- nuget pack MyProject.csproj -properties
- owners=janedoe,harikm,kimo,xiaop;desc="Awesome app logger utility"
-
-To use values from a project, specify the tokens described in the table below (AssemblyInfo refers to the file in `Properties` such as `AssemblyInfo.cs` or `AssemblyInfo.vb`).
-
-To use these tokens, you must run `nuget pack` with the project file rather than just the `.nuspec`. For example, when using the following command, the `$id$` and `$version$` tokens in a `.nuspec` file will be replaced with the project's `AssemblyName` and `AssemblyVersion` values:
-
- nuget pack MyProject.csproj
-
-Typically, when you have a project you'll create the `.nuspec` initially using `nuget spec MyProject.csproj` which will automatically include some of these standard tokens. Note, however, that if a project lacks values for required `.nuspec` elements, then `nuget pack` will fail. Furthermore, if you change project values, be sure to rebuild before creating the package; this can be done conveniently with the pack command's `build` switch.
-
-With the exception of `$configuration$`, values in the project will be used in preference to any assigned to the same token on the command line.
-
-
-
-
Token
-
Value source
-
Value
-
-
$id$
-
Project file
-
AssemblyName from the project file
-
-
-
$version$
-
AssemblyInfo
-
AssemblyInformationalVersion if present, otherwise AssemblyVersion
-
-
-
$author$
-
AssemblyInfo
-
AssemblyCompany
-
-
-
$description$
-
AssemblyInfo
-
AssemblyDescription
-
-
-
$copyright$
-
AssemblyInfo
-
AssemblyCopyright
-
-
-
$configuration$
-
Assembly DLL
-
Configuration used to build the assembly, defaulting to Debug. Note that to create a package using a Release configuration, you always use -properties Configuration=Release on the command line.
-
-
-
-Tokens can also be used to resolve paths when you include [assembly files](#including-assembly-files) and [content files](#including-content-files). The tokens have the same names as the MSBuild properties, making it possible to select files to be included depending on the current build configuration. For example, if you use the following tokens in the `.nuspec` file:
-
-
-
-
-
-And you build an assembly whose `AssemblyName` is `LoggingLibrary` with the `Release` configuration in MSBuild, the resulting lines in the `.nuspec` file in the package will be as follows:
-
-
-
-
-
-
-## Dependencies
-
-The <dependencies> element within <metadata> contains any number of <dependency> elements that identify other packages upon which the top-level package depends. The attributes for each <dependency> are as follows:
-
-
-
Attribute
Description
-
-
id
-
(Required) The package ID of the dependency.
-
-
-
version
-
(Required) The range of versions acceptable as a dependency. See Dependency versions for exact syntax.
-
-
-
-For example, the following lines indicate dependencies on `PackageA` version 1.1.0 or higher, and `PackageB` version 1.x.
-
-
-
-
-
-
-When creating a `.nuspec` from a project using `nuget spec`, dependencies that exist in that project will be automatically included in the resulting `.nuspec` file.
-
-### Dependency groups
-
-*Version 2.0+*
-
-As an alternative to a single flat list, dependencies can also be specified according to the framework profile of the target project using <group> elements within <dependencies>.
-
-Each group has an attribute named `targetFramework` and contains zero or more <dependency> elements. Those dependencies will be installed together when the target framework is compatible with the project's framework profile.
-
-The <group> element without a `targetFramework` attribute is used as the default or fallback list of dependencies. See [Target frameworks](/ndocs/schema/target-frameworks) for the exact framework identifiers.
-
-
- Note
- The group format cannot be intermixed with a flat list.
-
-
-The following example shows different variations of the <group> element:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Explicit assembly references
-
-
-The <references> element explicitly specifies the assemblies that the target project should reference when using the package. When this element is present, NuGet will add references to only the listed assemblies; it will not add references for any other assemblies in the package's `lib` folder.
-
-For example, the following <references> element instructs NuGet to add references to only `xunit.dll` and `xunit.extensions.dll` even if there are additional assemblies in the package:
-
-
-
-
-
-
-Explicit reference are typically used for design-time only assemblies. When using [Code Contracts](https://msdn.microsoft.com/library/dd264808.aspx), for example, contract assemblies need to be next to the runtime assemblies that they augment so that Visual Studio can find them, but the contract assemblies need not be referenced by the project or copied into the project's `bin` folder.
-
-Similarly, explicit references can be used for unit test frameworks, such as XUnit, which needs its tools assemblies located next to the runtime assemblies, but does not need them included as project references.
-
-### Reference groups
-
-*Version 2.5+*
-
-As an alternative to a single flat list, references can also be specified according to the framework profile of the target project using <group> elements within <references>.
-
-Each group has an attribute named `targetFramework` and contains zero or more <reference> elements. Those references will be added to a project when the target framework is compatible with the project's framework profile.
-
-The <group> element without a `targetFramework` attribute is used as the default or fallback list of references. See [Target frameworks](/ndocs/schema/target-frameworks) for the exact framework identifiers.
-
-
- Note
- The group format cannot be intermixed with a flat list.
-
-
-The following example shows different variations of the <group> element:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Framework assembly references
-
-
-Framework assemblies are those that are part of the .NET framework and should already be in the global assembly cache (GAC) for any given machine. By identifying those assemblies within the <frameworkAssemblies> element, a package can ensure that required references are added to a project in the event that the project doesn't have such references already. Such assemblies, of course, are not included in a package directly.
-
-The <frameworkAssemblies> element contains zero or more <frameworkAssembly> elements, each of which specifies the following attributes:
-
-
-
-
Attribute
-
Description
-
-
-
assemblyName
-
- (Required) The fully qualified assembly name.
-
-
-
-
targetFramework
-
- (Optional) Specifies the target framework to which this reference applies. If omitted, indicates that the reference applies to all frameworks. See Target frameworks for the exact framework identifiers.
-
-
-
-
-The following example shows a reference to `System.Net` for all target frameworks, and a reference to `System.ServiceModel` for .NET Framework 4.0 only:
-
-
-
-
-
-
-
-
-
-## Including assembly files
-
-
-If you follow the conventions described in [Creating a Package](/ndocs/create-packages/creating-a-package), you do not have to explicitly specify a list of files in the `.nuspec` file. The `nuget pack` command will automatically pick up the necessary files.
-
-
- Note
- When a package is installed into a project, NuGet automatically adds assembly references to the package's DLLs, excluding those that are named .resources.dll because they are assumed to be localized satellite assemblies. For this reason, avoid using ".resources.dll" for files that otherwise contain essential package code.
-
-
-To bypass this automatic behavior and explicitly control which files are included in a package, place a <files> element as a child of <package> (and a sibling of <metadata>), identifying each file with a separate <file> element. For example:
-
-
-
-
-
-
-
-
-With NuGet 2.x and earlier, and projects using `packages.config`, the <files> element is also used to include immutable content files when a package is installed. With NuGet 3.3+ and projects using `project.json`, the <contentFiles> element is used instead. See [Including content files](#including-content-files) below for details.
-
-### File element attributes
-
-Each <file> element specifies the following attributes:
-
-
-
-
Attriute
-
Description
-
-
-
src
-
- The location of the file or files to include, subject to exclusions specified by the exclude attribute. The path is relative to the .nuspec file unless an absolute path is specified. The wildcard character * is allowed, and the double
- wildcard ** implies a recursive folder search.
-
-
-
-
target
-
- The relative path to the folder within the package
- where the source files will be placed, which must begin with lib, content, or tools.
-
-
-
-
exclude
-
- A semicolon-delimited list of files or file patterns to exclude from the src location. The wildcard character * is allowed, and the double wildcard ** implies a recursive folder search.
-
-
-
-
-### Examples
-
-**Single assembly**
-
- Source file:
- library.dll
-
- .nuspec entry:
-
-
- Packaged result:
- lib\library.dll
-
-**Single assembly specific to a target framework**
-
- Source file:
- library.dll
-
- .nuspec entry:
-
-
- Packaged result:
- lib\net40\library.dll
-
-**Set of DLLs using a wildcard**
-
- Source files:
- bin\release\libraryA.dll
- bin\release\libraryB.dll
-
- .nuspec entry:
-
-
- Packaged result:
- lib\libraryA.dll
- lib\libraryB.dll
-
-**DLLs for different frameworks**
-
- Source files:
- lib\net40\library.dll
- lib\net20\library.dll
-
- .nuspec entry (using ** recursive search):
-
-
- Packaged result:
- lib\net40\library.dll
- lib\net20\library.dll
-
-**Excluding files**
-
- Source files:
- \tools\*.bak
- \tools\*.log
- \tools\build\*.log
-
- .nuspec entries:
-
-
-
- Package result:
- (no files)
-
-## Including content files
-
-Content files are files that a package needs to include in a project, but are considered immutable, that is, they are not intended to be modified by the consuming project. Example content files include:
-
-- Images that are embedded as resources
-- Source files that are already compiled
-- Scripts that need to be included with the build output of the project
-- Configuration files for the package that need to be included in the project but don't need any project-specific changes.
-
-Content files are included in a package using the <files< element, specifying the `content` folder in the `target` attribute. However, such files are ignored when the package is installed in a project using the `project.json` system in NuGet 3.3+, which instead uses the &;lt;contentFiles> element.
-
-For maximum compatibility with consuming projects, a package ideally specifies content files in both locations.
-
-### Using the files element for content files
-
-For content files, simply use the same format as for assembly files, but specify `content` as the base folder in the `target` attribute as shown in the following examples.
-
-**Basic content files**
-
- Source files:
- css\mobile\style1.css
- css\mobile\style2.css
-
- .nuspec entry:
-
-
- Packaged result:
- content\css\mobile\style1.css
- content\css\mobile\style2.css
-
-**Content files with directory structure**
-
- Source files:
- css\mobile\style.css
- css\mobile\wp7\style.css
- css\browser\style.css
-
- .nuspec entry:
-
-
- Packaged result:
- content\css\mobile\style.css
- content\css\mobile\wp7\style.css
- content\css\browser\style.css
-
-**Content file specific to a target framework**
-
- Source file:
- css\cool\style.css
-
- .nuspec entry
-
-
- Packaged result:
- content\style.css
-
-** Content file copied to a folder with dot in name**
-
-In this case, NuGet sees that the extension in `target` does not match the extension in `src` and thus treats that part of the name in `target` as a folder:
-
- Source file:
- images\picture.png
-
- .nuspec entry:
-
-
- Packaged result:
- content\images\package.icons\picture.png
-
-**Content files without extensions**
-
-To include files without an extension, use the * or ** wildcards:
-
- Source file:
- flags\installed
-
- .nuspec entry:
-
-
- Packaged result:
- flags\installed
-
-**Content files with deep path and deep target**
-
-In this case, because the file extensions of the source and target match, NuGet assumes that the target is a file name and not a folder:
-
- Source file:
- css\cool\style.css
-
- .nuspec entry:
-
- or:
-
-
- Packaged result:
- content\css\cool\style.css
-
-**Renaming a content file in the package**
-
- Source file:
- ie\css\style.css
-
- .nuspec entry:
-
-
- Packaged result:
- content\css\ie.css
-
-**Excluding files**
-
- Source file:
- docs\*.txt (multiple files)
-
- .nuspec entry:
-
- or
-
-
- Packaged result:
- All .txt files from docs except admin.txt (first example)
- All .txt files from docs except admin.txt and log.txt (second example)
-
-
-### Using the contentFiles element for content files
-
-*Verion 3.3+ with project.json only*
-
-By default, a package places content in a `contentFiles` folder (see below) and `nuget pack` will include all files in that folder using default attributes. In this case it's not necessary to include a `contentFiles` node in the `.nuspec` at all.
-
-To control which files are included, the <contentFiles> element specifies is a collection of <files> elements that identify the exact files include.
-These files are specified with a set of attributes that describe how they should be used within the project system:
-
-
-
-
Attribute
-
Description
-
-
-
include
-
- (Required) The location of the file or files to include, subject to exclusions specified by the exclude attribute. The path is relative to the .nuspec file unless an absolute path is specified. The wildcard character * is allowed, and the double wildcard ** implies a recursive folder search.
-
-
-
-
exclude
-
- A semicolon-delimited list of files or file patterns to exclude from the src location. The wildcard character * is allowed, and the double wildcard ** implies a recursive folder search.
-
-
-
-
buildAction
-
- The build action to assign to the contnet item for MSBuild, such as Content, None, Embedded Resource, Compile, etc. The default is Compile.
-
-
-
-
copyToOutput
-
- A Boolean indicating whether to copy content items to the build output folder. The default is false.
-
-
-
-
flatten
-
- A Boolean indicating whether to copy content items to a single folder in the build output (true), or to preserve the folder structure in the package (false). The default is false.
-
-
-
-
-When installing a package, NuGet applies the child elements of <contentFiles> from top to bottom. If multiple entries match the same file then all entries will be applied. The top-most entry will override the lower entries if there is a conflict for the same attribute.
-
-#### Package folder structure
-
-The package project should structure content using the following pattern:
-
- /contentFiles/{codeLanguage}/{TxM}/{any?}
-
-- `codeLanguages` may be `cs`, `vb`, `fs`, `any`, or the lowercase equivalent of a given `$(ProjectLanguage)`
-* `TxM` is any legal target framework moniker that NuGet supports (see [Target frameworks](/ndocs/schema/target-frameworks)).
-* Any folder structure may be appended to the end of this syntax.
-
-For example:
-
- Language- and framework-agnostic:
- /contentFiles/any/any/config.xml
-
- net45 content for all lanugages
- /contentFiles/any/net45/config.xml
-
- C#-specific content for net45 and up
- /contentFiles/cs/net45/sample.cs
-
-Empty folders can use `.` to opt out of providing content for certain combinations of language and TxM, for example:
-
- /contentFiles/vb/any/code.vb
- /contentFiles/cs/any/.
-
-
-#### Example contentFiles section
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Example .nuspec files
-
-**A simple .nuspec that does not specify dependencies or files**
-
-
-
-
- sample
- 1.2.3
- Kim Abercrombie, Franck Halmaert
- Sample exists only to show a sample .nuspec file.
- en-US
- http://xunit.codeplex.com/
- http://xunit.codeplex.com/license
-
-
-
-**A .nuspec with dependencies**
-
-
-
-
- sample
- 1.0.0
- Microsoft
-
-
-
-
-
-
-
-**A .nuspec with files**
-
-
-
-
- routedebugger
- 1.0.0
- Jay Hamlin
- false
- Route Debugger is a little utility I wrote...
-
-
-
-
-
-
-**A .nuspec with framework assemblies**
-
-
-
-
- PackageWithGacReferences
- 1.0
- Author here
- false
-
- A package that has framework assemblyReferences depending
- on the target framework.
-
-
-
-
-
-
-
-
-
-
-In this example, the following will be installed for specific project targets:
-
-* .NET4 -> `System.Web`, `System.Net`
-* .NET4 Client Profile -> `System.Net`
-* Silverlight 3 -> `System.Json`
-* Silverlight 4 -> `System.Windows.Controls.DomainServices`
-* WindowsPhone -> `Microsoft.Devices.Sensors`
diff --git a/docs/Schema/project.json.md b/docs/Schema/project.json.md
deleted file mode 100644
index 388f8ff33..000000000
--- a/docs/Schema/project.json.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# Project.json Reference
-
-*NuGet 3.x+; also see the end of this topic for project.lock.json*
-
-The `project.json` file replaces `packages.config` in UWP, ASP.NET 5, and .NET desktop projects (WPF and WinForms) as a means to maintain the list of packages used in a project. (For .NET Core, refer to [NET Core Tools - project.json](https://docs.microsoft.com/dotnet/articles/core/tools/project-json)).
-
-The [`project.lock.json`](#project-lock-json) file (described below) is also used in projects with a `project.json` file.
-
-
- Note
- When tooling for .NET Core and ASP.NET Core is complete, the function of project.json will be incorporated directly into project files (.csproj, .vsproj, etc.). NuGet clients will continue to support project.json for existing scenarios.
-
-
-A project.json file has the following basic structure, where each of the four top-level objects can have any number of child objects:
-
- {
- "dependencies": {
- "PackageID" : "{version_constraint}"
- },
- "frameworks" : {
- "TxM" : {}
- },
- "runtimes" : {
- "RID": {}
- },
- "supports" : {
- "CompatibilityProfile" : {}
- }
- }
-
-## Dependencies
-
-Lists the nuget package dependencies of your project in the form of:
-
- "PackageID" : "version_constraint"
-
-For example:
-
- "dependencies": {
- "Microsoft.NETCore": "5.0.0",
- "System.Runtime.Serialization.Primitives": "4.0.10"
- }
-
-The dependencies section is where the NuGet Package Manager dialog will add package dependencies to your project.
-
-The Package id corresponds to the id of the package on nuget.org , the same as the id used in the package manager console: `Install-Package Microsoft.NETCore`
-
-The version constraint of **"5.0.0"** corresponds to the **>= 5.0.0** constraint. This means that if for some reason 5.0.0 is not available on the server and 5.0.1 is, the restore will pick 5.0.1 and warn you about the upgrade. Otherwise restore will pick the lowest possible version on the server matching the constraint which will be 5.0.0.
-
-See [dependency resolution document]() for more details on resolution rules.
-
-## Frameworks
-
-This lists the frameworks that your project will run on. E.g. net45, netcoreapp, netstandard.
-
- "frameworks": {
- "netcore50": {}
- }
-
-Unlike the project.json used by ASP.NET Core a project.json that is being used with other project types can only have a single entry in the frameworks section. This is because the build system, MSBuild, only ever builds for a single target in contrast to DNX where the build is run once for each of the targets.
-
-## Runtimes
-
-The Operating System and Architectures that your application will be running on. For example, win7-x64, win8-x64, win8-x86.
-
-If you are a portable class library that can run on any runtime, you don't need to specify a runtime. Of course any dependencies of your package have to run on any runtime as well.
-
- "runtimes": {
- "win10-arm": { },
- "win10-arm-aot": { },
- "win10-x86": { },
- "win10-x86-aot": { },
- "win10-x64": { },
- "win10-x64-aot": { }
- }
-
-
-## Supports
-
-Defines a set of checks for package dependencies. You can define where you expect the portable library/application to run, it is not restrictive, you may be able to run elsewhere but specifying things here will make NuGet check that all dependencies are able to be satisfied on the listed TxMs. Examples of the values for this are: net46.app,uwp.10.0.app etc...
-
-This section should be populated automatically when you select an entry in the Portable Class Library targets dialog.
-
- supports": {
- "net46.app": {},
- "uwp.10.0.app": {}
- }
-
-## Imports
-
-Imports are designed to allow packages that use the dotnet TxM to operate with packages that don't declare a dotnet TxM. If your project is using the dotnet TxM then all the packages you depend on must also have a dotnet TxM, unless you add the following to your project.json in order to allow non dotnet platforms to be compatible with dotnet. If you are using the dotnet TxM then the PCL project system will add the appropriate imports statement based on the supported targets.
-
- "frameworks": {
- "dotnet": { "imports" : "portable-net45+win81" }
- }
-
-
-
-## Differences from Portable Apps and Web Projects
-
-The project.json file used by NuGet is a subset of that found in ASP.NET Core projects. In ASP.NET Core the project.json file is used for project metadata, compilation information, and dependencies. When used in other project systems those three things are split into separate files so the project.json specifies less information. Notable differences include:
-
-There can only be one framework in the frameworks section
-
-The framework should be empty, as shown above. No dependencies, compilation options, etc that you can see in DNX project.json files. Given that there can only be a single framework it doesn't make sense to enter framework specific dependencies.
-
-Compilation is handled by MSBuild so compilation options, preprocessor defines, etc are all part of the MSBuild project file and not your project.json.
-
-In NuGet 3 unlike in ASP.NET Core projects the user is not expected to manually edit the file, the UI is responsible for manipulating the content. we're working on unifying the experiences across the project systems for project.json, its not unified yet for this release.
-
-Note that it is possible to edit the file, the user is responsible to build the project to kick off a package restore.
-
-
-# project.lock.json
-
-The `project.lock.json` file is generated in the process of restoring the NuGet packages in projects that use `project.json`. It holds a snapshot of all the information that is generated as NuGet walks the graph of packages and includes the version, contents, and dependencies of all the packages in your project. The build system uses this to choose packages from a global location that are relevant when building the project instead of depending on a local packages folder in the project itself. This results in faster build performance because it's necessary to read only `project.lock.json` instead of many separate `.nuspec` files.
-
-The `project.lock.json` is automatically generated on package restore, so it can be omitted from source control by adding it to `.gitignore` and `.tfignore` files. However, if you include it in source control, the change history will show changes in dependencies resolved over time.
-
\ No newline at end of file
diff --git a/docs/TOC.md b/docs/TOC.md
index 06913f7ae..a49bb6178 100644
--- a/docs/TOC.md
+++ b/docs/TOC.md
@@ -1 +1,447 @@
-# [Index](index.md)
\ No newline at end of file
+# [What is NuGet?](what-is-nuget.md)
+# Get started
+## [Install NuGet client tools](install-nuget-client-tools.md)
+## [Install and use a package (dotnet CLI)](quickstart/install-and-use-a-package-using-the-dotnet-cli.md)
+## [Install and use a package (Visual Studio)](quickstart/install-and-use-a-package-in-visual-studio.md)
+## [Install and use a package (Visual Studio for Mac)](quickstart/install-and-use-a-package-in-visual-studio-mac.md)
+## [Create and publish a NET Standard package (dotnet CLI)](quickstart/create-and-publish-a-package-using-the-dotnet-cli.md)
+## [Create and publish a NET NuGet package (Visual Studio)](quickstart/create-and-publish-a-package-using-visual-studio.md)
+## [Create and publish a NET Framework package (Visual Studio)](quickstart/create-and-publish-a-package-using-visual-studio-net-framework.md)
+# Consume packages
+## [Overview and workflow](consume-packages/overview-and-workflow.md)
+## [Find and choose packages](consume-packages/finding-and-choosing-packages.md)
+## Install and manage packages
+### [Visual Studio](consume-packages/install-use-packages-visual-studio.md)
+### [Visual Studio for Mac](/visualstudio/mac/nuget-walkthrough?toc=/nuget/toc.json)
+### [dotnet CLI](consume-packages/install-use-packages-dotnet-cli.md)
+### [nuget.exe CLI](consume-packages/install-use-packages-nuget-cli.md)
+### [Package Manager Console (PowerShell)](consume-packages/install-use-packages-powershell.md)
+## Configure NuGet
+### [Visual Studio options](consume-packages/nuget-visual-studio-options.md)
+### [NuGet HTTPS Everywhere](consume-packages/nuget-https-everywhere.md)
+### Package restore options
+#### [Restore packages](consume-packages/package-restore.md)
+#### [Troubleshooting](consume-packages/package-restore-troubleshooting.md)
+### [Package source mapping](consume-packages/package-source-mapping.md)
+### [Reinstall and update packages](consume-packages/reinstalling-and-updating-packages.md)
+### [Manage global packages and cache folders](consume-packages/managing-the-global-packages-and-cache-folders.md)
+### [Manage package trust boundaries](consume-packages/installing-signed-packages.md)
+### [Work with authenticated Feeds](consume-packages/consuming-packages-authenticated-feeds.md)
+### [Work with source control systems](consume-packages/packages-and-source-control.md)
+### [Common NuGet configurations](consume-packages/configuring-nuget-behavior.md)
+### [PackageDownload functionality](consume-packages/packagedownload-functionality.md)
+## Reference packages in your project
+### [PackageReference in project files](consume-packages/package-references-in-project-files.md)
+### [Migrate packages.config to PackageReference](consume-packages/migrate-packages-config-to-package-reference.md)
+### [packages.config](reference/packages-config.md)
+### [Central Package Management](consume-packages/Central-Package-Management.md)
+# Create packages
+## [Overview and workflow](create-packages/overview-and-workflow.md)
+## [Create a package (dotnet CLI)](create-packages/creating-a-package-dotnet-cli.md)
+## [Create a package (nuget.exe CLI)](create-packages/creating-a-package.md)
+## [Create a package (MSBuild)](create-packages/creating-a-package-msbuild.md)
+## [Package authoring best practices](create-packages/Package-authoring-best-practices.md)
+## [Build a prerelease package](create-packages/prerelease-packages.md)
+## [Create a symbol package](create-packages/symbol-packages-snupkg.md)
+## [Support multiple target frameworks in your project file](create-packages/multiple-target-frameworks-project-file.md)
+## Advanced tasks
+### [Support multiple target frameworks](create-packages/supporting-multiple-target-frameworks.md)
+### [Modify source code and config files](create-packages/source-and-config-file-transformations.md)
+### [Select assemblies referenced by projects](create-packages/select-assemblies-referenced-by-projects.md)
+### [Set package type](create-packages/set-package-type.md)
+### [Create a localized package](create-packages/creating-localized-packages.md)
+### [.NET Packages containing native libraries](create-packages/native-files-in-net-packages.md)
+## Guides for specific content
+### [Create a UWP package (C++)](guides/create-uwp-packages.md)
+### [Create a UWP package (C#)](guides/create-uwp-packages-CS.md)
+### [Create a native package](guides/native-packages.md)
+### [Create UI controls as a NuGet package](guides/create-UI-controls.md)
+### [Create an analyzer as a NuGet package](guides/analyzers-conventions.md)
+### [Create a package with COM interop assemblies](create-packages/author-packages-with-COM-interop-assemblies.md)
+## Sign packages
+### [Sign a package](create-packages/sign-a-package.md)
+### [Signed-package signatures and requirements](reference/signed-packages-reference.md)
+### [Signed-package verification options](reference/Signed-Package-Verification-Options.md)
+# Publish packages
+## Publish to NuGet.org
+### [Publish a package](nuget-org/publish-a-package.md)
+### [API keys](nuget-org/scoped-api-keys.md)
+## Publish to a private feed
+### [Overview](hosting-packages/overview.md)
+### [Azure artifacts](/azure/devops/artifacts/nuget/publish)
+### [NuGet.Server](hosting-packages/nuget-server.md)
+### [Local feeds](hosting-packages/local-feeds.md)
+# Concepts
+## [Package installation process](concepts/package-installation-process.md)
+## [Package versioning](concepts/package-versioning.md)
+## [Dependency resolution](concepts/dependency-resolution.md)
+## [Auditing package dependencies for security vulnerabilities](concepts/Auditing-Packages.md)
+## [Best practices for a secure software supply chain](concepts/Security-Best-Practices.md)
+## [MSBuild .props and .targets](concepts/MSBuild-props-and-targets.md)
+## [Troubleshooting Installed Packages](concepts/troubleshooting-installed-packages.md)
+## [MCP servers in NuGet packages](concepts/nuget-mcp.md)
+## [Configuring the NuGet MCP Server](concepts/NuGet-MCP-Server.md)
+# Reference
+## [.nuspec](reference/nuspec.md)
+## [nuget.config file](reference/nuget-config-file.md)
+## [Target frameworks](reference/target-frameworks.md)
+## [pack and restore as MSBuild targets](reference/msbuild-targets.md)
+## [dotnet CLI](reference/dotnet-Commands.md)
+## [nuget.exe CLI reference](reference/nuget-exe-cli-reference.md)
+### [add](reference/cli-reference/cli-ref-add.md)
+### [config](reference/cli-reference/cli-ref-config.md)
+### [delete](reference/cli-reference/cli-ref-delete.md)
+### [help or ?](reference/cli-reference/cli-ref-help.md)
+### [init](reference/cli-reference/cli-ref-init.md)
+### [install](reference/cli-reference/cli-ref-install.md)
+### [list](reference/cli-reference/cli-ref-list.md)
+### [locals](reference/cli-reference/cli-ref-locals.md)
+### [mirror](reference/cli-reference/cli-ref-mirror.md)
+### [pack](reference/cli-reference/cli-ref-pack.md)
+### [push](reference/cli-reference/cli-ref-push.md)
+### [restore](reference/cli-reference/cli-ref-restore.md)
+### [search](reference/cli-reference/cli-ref-search.md)
+### [setapikey](reference/cli-reference/cli-ref-setapikey.md)
+### [sign](reference/cli-reference/cli-ref-sign.md)
+### [sources](reference/cli-reference/cli-ref-sources.md)
+### [spec](reference/cli-reference/cli-ref-spec.md)
+### [update](reference/cli-reference/cli-ref-update.md)
+### [verify](reference/cli-reference/cli-ref-verify.md)
+### [trusted-signers](reference/cli-reference/cli-ref-trusted-signers.md)
+### [Environment variables](reference/cli-reference/cli-ref-environment-variables.md)
+### [Long path support](reference/cli-reference/cli-ref-long-path.md)
+## [PowerShell reference](reference/powershell-reference.md)
+### [Add-BindingRedirect](reference/ps-reference/ps-ref-add-bindingredirect.md)
+### [Find-Package](reference/ps-reference/ps-ref-find-package.md)
+### [Get-Package](reference/ps-reference/ps-ref-get-package.md)
+### [Get-Project](reference/ps-reference/ps-ref-get-project.md)
+### [Install-Package](reference/ps-reference/ps-ref-install-package.md)
+### [Open-PackagePage](reference/ps-reference/ps-ref-open-packagepage.md)
+### [Sync-Package](reference/ps-reference/ps-ref-sync-package.md)
+### [Uninstall-Package](reference/ps-reference/ps-ref-uninstall-package.md)
+### [Update-Package](reference/ps-reference/ps-ref-update-package.md)
+## NuGet Server API
+### [Overview](api/overview.md)
+### [Server Implementation Guide](api/implementation-guide.md)
+### Resources
+#### [Autocomplete](api/search-autocomplete-service-resource.md)
+#### [Catalog](api/catalog-resource.md)
+#### [Package content](api/package-base-address-resource.md)
+#### [Package details URL](api/package-details-template-resource.md)
+#### [Package metadata](api/registration-base-url-resource.md)
+#### [Push and delete](api/package-publish-resource.md)
+#### [Push symbol packages](api/symbol-package-publish-resource.md)
+#### [README URI](api/readme-template-resource.md)
+#### [Report abuse URL](api/report-abuse-resource.md)
+#### [Repository signatures](api/repository-signatures-resource.md)
+#### [Search](api/search-query-service-resource.md)
+#### [Service index](api/service-index.md)
+#### [Vulnerability info](api/vulnerability-info.md)
+### [How-to: query for all packages using the API](guides/api/query-for-all-published-packages.md)
+### [Rate limits](api/rate-limits.md)
+### [nuget.org protocols](api/nuget-protocols.md)
+### [tools.json](api/tools-json.md)
+## [NuGet Client SDK](reference/nuget-client-sdk.md)
+## [Errors and Warnings](reference/Errors-and-Warnings.md)
+### [NU1000](reference/errors-and-warnings/NU1000.md)
+### [NU1001](reference/errors-and-warnings/NU1001.md)
+### [NU1002](reference/errors-and-warnings/NU1002.md)
+### [NU1003](reference/errors-and-warnings/NU1003.md)
+### [NU1004](reference/errors-and-warnings/NU1004.md)
+### [NU1005](reference/errors-and-warnings/NU1005.md)
+### [NU1006](reference/errors-and-warnings/NU1006.md)
+### [NU1007](reference/errors-and-warnings/NU1007.md)
+### [NU1008](reference/errors-and-warnings/NU1008.md)
+### [NU1009](reference/errors-and-warnings/NU1009.md)
+### [NU1010](reference/errors-and-warnings/NU1010.md)
+### [NU1011](reference/errors-and-warnings/NU1011.md)
+### [NU1012](reference/errors-and-warnings/NU1012.md)
+### [NU1014](reference/errors-and-warnings/NU1014.md)
+### [NU1015](reference/errors-and-warnings/NU1015.md)
+### [NU1100](reference/errors-and-warnings/NU1100.md)
+### [NU1101](reference/errors-and-warnings/NU1101.md)
+### [NU1102](reference/errors-and-warnings/NU1102.md)
+### [NU1103](reference/errors-and-warnings/NU1103.md)
+### [NU1104](reference/errors-and-warnings/NU1104.md)
+### [NU1105](reference/errors-and-warnings/NU1105.md)
+### [NU1106](reference/errors-and-warnings/NU1106.md)
+### [NU1107](reference/errors-and-warnings/NU1107.md)
+### [NU1108](reference/errors-and-warnings/NU1108.md)
+### [NU1109](reference/errors-and-warnings/NU1109.md)
+### [NU1110](reference/errors-and-warnings/NU1110.md)
+### [NU1201](reference/errors-and-warnings/NU1201.md)
+### [NU1202](reference/errors-and-warnings/NU1202.md)
+### [NU1203](reference/errors-and-warnings/NU1203.md)
+### [NU1204](reference/errors-and-warnings/NU1204.md)
+### [NU1211](reference/errors-and-warnings/NU1211.md)
+### [NU1212](reference/errors-and-warnings/NU1212.md)
+### [NU1213](reference/errors-and-warnings/NU1213.md)
+### [NU1301](reference/errors-and-warnings/NU1301.md)
+### [NU1302](reference/errors-and-warnings/NU1302.md)
+### [NU1401](reference/errors-and-warnings/NU1401.md)
+### [NU1402](reference/errors-and-warnings/NU1402.md)
+### [NU1403](reference/errors-and-warnings/NU1403.md)
+### [NU1500](reference/errors-and-warnings/NU1500.md)
+### [NU1501](reference/errors-and-warnings/NU1501.md)
+### [NU1502](reference/errors-and-warnings/NU1502.md)
+### [NU1503](reference/errors-and-warnings/NU1503.md)
+### [NU1504](reference/errors-and-warnings/NU1504.md)
+### [NU1505](reference/errors-and-warnings/NU1505.md)
+### [NU1506](reference/errors-and-warnings/NU1506.md)
+### [NU1507](reference/errors-and-warnings/NU1507.md)
+### [NU1508](reference/errors-and-warnings/NU1508.md)
+### [NU1509](reference/errors-and-warnings/NU1509.md)
+### [NU1510](reference/errors-and-warnings/NU1510.md)
+### [NU1511](reference/errors-and-warnings/NU1511.md)
+### [NU1601](reference/errors-and-warnings/NU1601.md)
+### [NU1602](reference/errors-and-warnings/NU1602.md)
+### [NU1603](reference/errors-and-warnings/NU1603.md)
+### [NU1604](reference/errors-and-warnings/NU1604.md)
+### [NU1605](reference/errors-and-warnings/NU1605.md)
+### [NU1608](reference/errors-and-warnings/NU1608.md)
+### [NU1701](reference/errors-and-warnings/NU1701.md)
+### [NU1702](reference/errors-and-warnings/NU1702.md)
+### [NU1703](reference/errors-and-warnings/NU1703.md)
+### [NU1900](reference/errors-and-warnings/NU1900.md)
+### [NU1901](reference/errors-and-warnings/NU1901-NU1904.md)
+### [NU1902](reference/errors-and-warnings/NU1901-NU1904.md)
+### [NU1903](reference/errors-and-warnings/NU1901-NU1904.md)
+### [NU1904](reference/errors-and-warnings/NU1901-NU1904.md)
+### [NU1905](reference/errors-and-warnings/NU1905.md)
+### [NU1801](reference/errors-and-warnings/NU1801.md)
+### [NU1802](reference/errors-and-warnings/NU1802.md)
+### [NU1803](reference/errors-and-warnings/NU1803.md)
+### [NU3000](reference/errors-and-warnings/NU3000.md)
+### [NU3001](reference/errors-and-warnings/NU3001.md)
+### [NU3002](reference/errors-and-warnings/NU3002.md)
+### [NU3003](reference/errors-and-warnings/NU3003.md)
+### [NU3004](reference/errors-and-warnings/NU3004.md)
+### [NU3005](reference/errors-and-warnings/NU3005.md)
+### [NU3006](reference/errors-and-warnings/NU3006.md)
+### [NU3007](reference/errors-and-warnings/NU3007.md)
+### [NU3008](reference/errors-and-warnings/NU3008.md)
+### [NU3009](reference/errors-and-warnings/NU3009.md)
+### [NU3010](reference/errors-and-warnings/NU3010.md)
+### [NU3011](reference/errors-and-warnings/NU3011.md)
+### [NU3012](reference/errors-and-warnings/NU3012.md)
+### [NU3013](reference/errors-and-warnings/NU3013.md)
+### [NU3014](reference/errors-and-warnings/NU3014.md)
+### [NU3015](reference/errors-and-warnings/NU3015.md)
+### [NU3016](reference/errors-and-warnings/NU3016.md)
+### [NU3017](reference/errors-and-warnings/NU3017.md)
+### [NU3018](reference/errors-and-warnings/NU3018.md)
+### [NU3019](reference/errors-and-warnings/NU3019.md)
+### [NU3020](reference/errors-and-warnings/NU3020.md)
+### [NU3021](reference/errors-and-warnings/NU3021.md)
+### [NU3022](reference/errors-and-warnings/NU3022.md)
+### [NU3023](reference/errors-and-warnings/NU3023.md)
+### [NU3024](reference/errors-and-warnings/NU3024.md)
+### [NU3025](reference/errors-and-warnings/NU3025.md)
+### [NU3026](reference/errors-and-warnings/NU3026.md)
+### [NU3027](reference/errors-and-warnings/NU3027.md)
+### [NU3028](reference/errors-and-warnings/NU3028.md)
+### [NU3029](reference/errors-and-warnings/NU3029.md)
+### [NU3030](reference/errors-and-warnings/NU3030.md)
+### [NU3031](reference/errors-and-warnings/NU3031.md)
+### [NU3032](reference/errors-and-warnings/NU3032.md)
+### [NU3033](reference/errors-and-warnings/NU3033.md)
+### [NU3034](reference/errors-and-warnings/NU3034.md)
+### [NU3035](reference/errors-and-warnings/NU3035.md)
+### [NU3036](reference/errors-and-warnings/NU3036.md)
+### [NU3037](reference/errors-and-warnings/NU3037.md)
+### [NU3038](reference/errors-and-warnings/NU3038.md)
+### [NU3040](reference/errors-and-warnings/NU3040.md)
+### [NU3042](reference/errors-and-warnings/NU3042.md)
+### [NU3043](reference/errors-and-warnings/NU3043.md)
+### [NU5000](reference/errors-and-warnings/NU5000.md)
+### [NU5001](reference/errors-and-warnings/NU5001.md)
+### [NU5002](reference/errors-and-warnings/NU5002.md)
+### [NU5003](reference/errors-and-warnings/NU5003.md)
+### [NU5004](reference/errors-and-warnings/NU5004.md)
+### [NU5005](reference/errors-and-warnings/NU5005.md)
+### [NU5007](reference/errors-and-warnings/NU5007.md)
+### [NU5008](reference/errors-and-warnings/NU5008.md)
+### [NU5009](reference/errors-and-warnings/NU5009.md)
+### [NU5010](reference/errors-and-warnings/NU5010.md)
+### [NU5011](reference/errors-and-warnings/NU5011.md)
+### [NU5012](reference/errors-and-warnings/NU5012.md)
+### [NU5013](reference/errors-and-warnings/NU5013.md)
+### [NU5014](reference/errors-and-warnings/NU5014.md)
+### [NU5015](reference/errors-and-warnings/NU5015.md)
+### [NU5016](reference/errors-and-warnings/NU5016.md)
+### [NU5017](reference/errors-and-warnings/NU5017.md)
+### [NU5018](reference/errors-and-warnings/NU5018.md)
+### [NU5019](reference/errors-and-warnings/NU5019.md)
+### [NU5020](reference/errors-and-warnings/NU5020.md)
+### [NU5021](reference/errors-and-warnings/NU5021.md)
+### [NU5022](reference/errors-and-warnings/NU5022.md)
+### [NU5023](reference/errors-and-warnings/NU5023.md)
+### [NU5024](reference/errors-and-warnings/NU5024.md)
+### [NU5025](reference/errors-and-warnings/NU5025.md)
+### [NU5026](reference/errors-and-warnings/NU5026.md)
+### [NU5027](reference/errors-and-warnings/NU5027.md)
+### [NU5028](reference/errors-and-warnings/NU5028.md)
+### [NU5029](reference/errors-and-warnings/NU5029.md)
+### [NU5030](reference/errors-and-warnings/NU5030.md)
+### [NU5031](reference/errors-and-warnings/NU5031.md)
+### [NU5032](reference/errors-and-warnings/NU5032.md)
+### [NU5033](reference/errors-and-warnings/NU5033.md)
+### [NU5034](reference/errors-and-warnings/NU5034.md)
+### [NU5035](reference/errors-and-warnings/NU5035.md)
+### [NU5036](reference/errors-and-warnings/NU5036.md)
+### [NU5037](reference/errors-and-warnings/NU5037.md)
+### [NU5042](reference/errors-and-warnings/NU5042.md)
+### [NU5045](reference/errors-and-warnings/NU5045.md)
+### [NU5046](reference/errors-and-warnings/NU5046.md)
+### [NU5047](reference/errors-and-warnings/NU5047.md)
+### [NU5048](reference/errors-and-warnings/NU5048.md)
+### [NU5049](reference/errors-and-warnings/NU5049.md)
+### [NU5100](reference/errors-and-warnings/NU5100.md)
+### [NU5101](reference/errors-and-warnings/NU5101.md)
+### [NU5102](reference/errors-and-warnings/NU5102.md)
+### [NU5103](reference/errors-and-warnings/NU5103.md)
+### [NU5104](reference/errors-and-warnings/NU5104.md)
+### [NU5105](reference/errors-and-warnings/NU5105.md)
+### [NU5106](reference/errors-and-warnings/NU5106.md)
+### [NU5107](reference/errors-and-warnings/NU5107.md)
+### [NU5108](reference/errors-and-warnings/NU5108.md)
+### [NU5109](reference/errors-and-warnings/NU5109.md)
+### [NU5110](reference/errors-and-warnings/NU5110.md)
+### [NU5111](reference/errors-and-warnings/NU5111.md)
+### [NU5112](reference/errors-and-warnings/NU5112.md)
+### [NU5114](reference/errors-and-warnings/NU5114.md)
+### [NU5115](reference/errors-and-warnings/NU5115.md)
+### [NU5116](reference/errors-and-warnings/NU5116.md)
+### [NU5117](reference/errors-and-warnings/NU5117.md)
+### [NU5118](reference/errors-and-warnings/NU5118.md)
+### [NU5119](reference/errors-and-warnings/NU5119.md)
+### [NU5120](reference/errors-and-warnings/NU5120.md)
+### [NU5121](reference/errors-and-warnings/NU5121.md)
+### [NU5122](reference/errors-and-warnings/NU5122.md)
+### [NU5123](reference/errors-and-warnings/NU5123.md)
+### [NU5124](reference/errors-and-warnings/NU5124.md)
+### [NU5125](reference/errors-and-warnings/NU5125.md)
+### [NU5126](reference/errors-and-warnings/NU5126.md)
+### [NU5127](reference/errors-and-warnings/NU5127.md)
+### [NU5128](reference/errors-and-warnings/NU5128.md)
+### [NU5129](reference/errors-and-warnings/NU5129.md)
+### [NU5130](reference/errors-and-warnings/NU5130.md)
+### [NU5131](reference/errors-and-warnings/NU5131.md)
+### [NU5500](reference/errors-and-warnings/NU5500.md)
+### [NU5501](reference/errors-and-warnings/NU5501.md)
+## Archived content
+### [project.json management format](archive/project-json.md)
+### [project.json and UWP](archive/project-json-and-uwp.md)
+### [project.json impact](archive/project-json-impact.md)
+# Extensibility
+## Extensibility - NuGet plugins
+### [NuGet Cross Platform Plugins](reference/extensibility/NuGet-Cross-Platform-Plugins.md)
+### [NuGet cross platform authentication plugin](reference/extensibility/nuget-cross-platform-authentication-plugin.md)
+### [NuGet credential providers for Visual Studio](reference/extensibility/nuget-credential-providers-for-visual-studio.md)
+### [nuget.exe credential providers](reference/extensibility/nuget-exe-credential-providers.md)
+## Visual Studio extensibility
+### [NuGet API in Visual Studio](visual-studio-extensibility/nuget-api-in-visual-studio.md)
+### [Project system support](visual-studio-extensibility/project-system-support.md)
+### [Visual Studio templates](visual-studio-extensibility/visual-studio-templates.md)
+# Resources
+## Policies
+### [Governance](policies/governance.md)
+### [Ecosystem](policies/ecosystem.md)
+### [NuGet.org policies](nuget-org/policies/data-requests.md)
+## Release notes
+### [Known Issues](release-notes/known-issues.md)
+
+### NuGet 6.x
+#### [NuGet 6.14](release-notes/NuGet-6.14.md)
+#### [NuGet 6.13](release-notes/NuGet-6.13.md)
+#### [NuGet 6.12](release-notes/NuGet-6.12.md)
+#### [NuGet 6.11](release-notes/NuGet-6.11.md)
+#### [NuGet 6.10](release-notes/NuGet-6.10.md)
+#### [NuGet 6.9](release-notes/NuGet-6.9.md)
+#### [NuGet 6.8](release-notes/NuGet-6.8.md)
+#### [NuGet 6.7](release-notes/NuGet-6.7.md)
+#### [NuGet 6.6](release-notes/NuGet-6.6.md)
+#### [NuGet 6.5](release-notes/NuGet-6.5.md)
+#### [NuGet 6.4](release-notes/NuGet-6.4.md)
+#### [NuGet 6.3](release-notes/NuGet-6.3.md)
+#### [NuGet 6.2](release-notes/NuGet-6.2.md)
+#### [NuGet 6.1](release-notes/NuGet-6.1.md)
+#### [NuGet 6.0](release-notes/NuGet-6.0.md)
+### NuGet 5.x
+#### [NuGet 5.11](release-notes/NuGet-5.11.md)
+#### [NuGet 5.10](release-notes/NuGet-5.10.md)
+#### [NuGet 5.9](release-notes/NuGet-5.9.md)
+#### [NuGet 5.8](release-notes/NuGet-5.8.md)
+#### [NuGet 5.7](release-notes/NuGet-5.7.md)
+#### [NuGet 5.6](release-notes/NuGet-5.6.md)
+#### [NuGet 5.5](release-notes/NuGet-5.5.md)
+#### [NuGet 5.4](release-notes/NuGet-5.4.md)
+#### [NuGet 5.3](release-notes/NuGet-5.3.md)
+#### [NuGet 5.2](release-notes/NuGet-5.2-RTM.md)
+#### [NuGet 5.1](release-notes/NuGet-5.1-RTM.md)
+#### [NuGet 5.0](release-notes/NuGet-5.0-RTM.md)
+### NuGet 4.x
+#### [NuGet 4.9 RTM](release-notes/NuGet-4.9-RTM.md)
+#### [NuGet 4.8 RTM](release-notes/NuGet-4.8-RTM.md)
+#### [NuGet 4.7 RTM](release-notes/NuGet-4.7-RTM.md)
+#### [NuGet 4.6 RTM](release-notes/NuGet-4.6-RTM.md)
+#### [NuGet 4.5 RTM](release-notes/NuGet-4.5-RTM.md)
+#### [NuGet 4.4 RTM](release-notes/NuGet-4.4-RTM.md)
+#### [NuGet 4.3 RTM](release-notes/NuGet-4.3-RTM.md)
+#### [NuGet 4.0 RTM](release-notes/NuGet-4.0-RTM.md)
+#### [NuGet 4.0 RC](release-notes/NuGet-4.0-RC.md)
+### NuGet 3.x
+#### [NuGet 3.5 RTM](release-notes/NuGet-3.5-RTM.md)
+#### [NuGet 3.5 RC](release-notes/NuGet-3.5-RC.md)
+#### [NuGet 3.5 Beta2](release-notes/NuGet-3.5-Beta2.md)
+#### [NuGet 3.5 Beta](release-notes/NuGet-3.5-Beta.md)
+#### [NuGet 3.4.4](release-notes/NuGet-3.4.4.md)
+#### [NuGet 3.4.3](release-notes/NuGet-3.4.3.md)
+#### [NuGet 3.4.2](release-notes/NuGet-3.4.2.md)
+#### [NuGet 3.4.1](release-notes/NuGet-3.4.1.md)
+#### [NuGet 3.4](release-notes/NuGet-3.4.md)
+#### [NuGet 3.4 RC](release-notes/NuGet-3.4-RC.md)
+#### [NuGet 3.3](release-notes/NuGet-3.3.md)
+#### [NuGet 3.2.1](release-notes/NuGet-3.2.1.md)
+#### [NuGet 3.2](release-notes/NuGet-3.2.md)
+#### [NuGet 3.2 RC](release-notes/NuGet-3.2-RC.md)
+#### [NuGet 3.1.1](release-notes/NuGet-3.1.1.md)
+#### [NuGet 3.1](release-notes/NuGet-3.1.md)
+#### [NuGet 3.0.0](release-notes/NuGet-3.0.0.md)
+#### [NuGet 3.0 RC2](release-notes/NuGet-3.0-RC2.md)
+#### [NuGet 3.0 RC](release-notes/NuGet-3.0-RC.md)
+#### [NuGet 3.0 Beta](release-notes/NuGet-3.0-Beta.md)
+#### [NuGet 3.0 Preview](release-notes/NuGet-3.0-Preview.md)
+### NuGet 2.x
+#### [NuGet 2.12](release-notes/NuGet-2.12.md)
+#### [NuGet 2.12 RC](release-notes/NuGet-2.12-RC.md)
+#### [NuGet 2.9 RC](release-notes/NuGet-2.9-RC.md)
+#### [NuGet 2.8.7](release-notes/NuGet-2.8.7.md)
+#### [NuGet 2.8.6](release-notes/NuGet-2.8.6.md)
+#### [NuGet 2.8.5](release-notes/NuGet-2.8.5.md)
+#### [NuGet 2.8.3](release-notes/NuGet-2.8.3.md)
+#### [NuGet 2.8.2](release-notes/NuGet-2.8.2.md)
+#### [NuGet 2.8.1](release-notes/NuGet-2.8.1.md)
+#### [NuGet 2.8](release-notes/NuGet-2.8.md)
+#### [NuGet 2.7.2](release-notes/NuGet-2.7.2.md)
+#### [NuGet 2.7.1](release-notes/NuGet-2.7.1.md)
+#### [NuGet 2.7](release-notes/NuGet-2.7.md)
+#### [NuGet 2.6.1-for-WebMatrix](release-notes/NuGet-2.6.1-for-WebMatrix.md)
+#### [NuGet 2.6](release-notes/NuGet-2.6.md)
+#### [NuGet 2.5](release-notes/NuGet-2.5.md)
+#### [NuGet 2.2.1](release-notes/NuGet-2.2.1.md)
+#### [NuGet 2.2](release-notes/NuGet-2.2.md)
+#### [NuGet 2.1](release-notes/NuGet-2.1.md)
+#### [NuGet 2.0](release-notes/NuGet-2.0.md)
+### NuGet 1.x
+#### [NuGet 1.8](release-notes/NuGet-1.8.md)
+#### [NuGet 1.7](release-notes/NuGet-1.7.md)
+#### [NuGet 1.6](release-notes/NuGet-1.6.md)
+#### [NuGet 1.5](release-notes/NuGet-1.5.md)
+#### [NuGet 1.4](release-notes/NuGet-1.4.md)
+#### [NuGet 1.3](release-notes/NuGet-1.3.md)
+#### [NuGet 1.2](release-notes/NuGet-1.2.md)
+#### [NuGet 1.1](release-notes/NuGet-1.1.md)
+## [FAQs](resources/nuget-faq.yml)
+## [Project format](resources/check-project-format.md)
+# [NuGet.org](nuget-org/overview-nuget-org.md)
diff --git a/docs/Tools/NuGet.exe-CLI-Reference.md b/docs/Tools/NuGet.exe-CLI-Reference.md
deleted file mode 100644
index 5cb6ceabd..000000000
--- a/docs/Tools/NuGet.exe-CLI-Reference.md
+++ /dev/null
@@ -1,1105 +0,0 @@
-# NuGet CLI Reference
-
-The NuGet Command Line Interface (CLI) provides the full extent of NuGet functionality to install, create, publish, and manage packages. Refer to the [Install Guide](/ndocs/guides/install-nuget) for installation instructions.
-
-Available commands:
-
-
Updates a project's packages to the latest available versions.
-
All
-
-
-
-
-## add
-*Version 3.3+*
-
-Adds a specified package to a non-HTTP package source (a folder or UNC path) in a hierarchical layout, wherein folders are created for the package ID and version number. For example:
-
- \\myserver\packages
- └─
- └─
- ├─..nupkg
- ├─..nupkg.sha512
- └─.nuspec
-
-When restoring or updating against the package source, hierarchical layout provides significantly better performance.
-
-To expand all the files in the package to the destination package source, use the `-expand` switch. This typically results in additional subfolders appearing in the destination, such as `tools` and `lib`.
-
-### Usage
- nuget add -source [options]
-
-where is the pathname to the package to add, and specifies the folder-based package source to which the package will be added. HTTP sources are not supported.
-
-### Options
-
-
-
expand
-
If provided, all the files in the package are added to your package source.
-
-
-
help
-
Displays help information for the command.
-
-
-
fileconflictaction
-
(2.5+) Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Values are overwrite, ignore, none.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed.
-
-
-
-### Examples
-
- nuget add foo.nupkg -source c:\bar\
-
- nuget add foo.nupkg -source \\bar\packages\
-
-
-## config
-
-Gets or sets NuGet config values. For additional usage, see [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior). For details on allowable key names, refer to the [NuGet config file reference](/ndocs/schema/nuget.config-file).
-
-### Usage
- nuget config -set = [= ...] [options]
-
-where <name> and <value> specify a key-value pair to be set in the configuration. You can specify as many pairs as desired.
-
-In NuGet 3.4+, <value> can be use environment variables.
-
-
-### Options
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget config -set repositoryPath=c:\packages -configfile c:\my.config
-
- nuget config -set repositoryPath=%PACKAGE_REPO% -configfile %ProgramData%\NuGet\NuGetDefaults.Config
-
- nuget config -set HTTP_PROXY=http://127.0.0.1 -set HTTP_PROXY.USER=domain\user
-
-
-## delete
-
-Deletes or unlists a package from a package source. For nuget.org, the action is to [unlist the package](/ndocs/policies/Deleting-Packages).
-
-### Usage
- nuget delete [options]
-
-where <packageID> and <packageVersion> identify the exact package to delete or unlist. The exact behavior depends on the source. For local folders, for instance, the package is deleted; for nuget.org the package is unlisted.
-
-### Options
-
-
-
apikey
-
The API key for the target repository. If not present, the one specified in %AppData%\NuGet\NuGet.config is used.
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
source
-
Specifies the server URL. Supported URLs for nuget.org include https://www.nuget.org, https://www.nuget.org/api/v3, https://www.nuget.org/api/v2/package. For private feeds, substitute the host name, for example, %hostname%/api/v3.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget delete MyPackage 1.0
-
- nuget delete MyPackage 1.0 -source http://package.contoso.com/source -apikey A1B2C3
-
-
-## help
-
-Displays general help information and help information about specific commands.
-
-### Usage
- nuget help [command] [options]
- nuget ? [command] [options]
-
-where [command] identifies a specific command for which to display help.
-
-
- Note
- With some commands, be mindful to specify help first, as with nuget help install, because there is a package named "help" on nuget.org. If you give the command nuget install help, you'll not get help on the install command but will instead install the help package.
-
-
-### Options
-
-
-
all
-
Print detailed help for all available commands; ignored if a specific command is given.
-
-
-
help
-
Displays help information for the help command iself.
-
-
-
markdown
-
Print detailed help in markdown format when used with -all. Ignored otherwise.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget help
- nuget help push
- nuget ?
- nuget push -?
- nuget help -all -markdown
-
-
-## init
-*Version 3.3+*
-
-Copies all the packages from a flat folder to a destination folder using a hierarchical layout as described for the [add command](#add) above. That is, using `init` is equivalent to using the `add` command on each package in the folder.
-
-As with `add`, the destination must be either a local folder or a UNC path; HTTP package repositories such as nuget.org or private servers are not supported.
-
-
-### Usage
- nuget init [options]
-
-where <source> is the folder containing packages and <destination> is the local folder or UNC pathname to which the packages will be copied.
-
-### Options
-
-
-
expand
-
Adds the files in the package(s) to destination package source.
-
-
-
help
-
Displays help information for the command.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget init c:\foo c:\bar
- nuget init \\foo\packages \\bar\packages -expand
-
-
-## install
-
-Downloads and installs a package into a project using the specified package sources. If no sources are specified, those listed in the global configuration file, `%APPDATA%\NuGet\NuGet.Config`, will be used. See [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior) for additional details.
-
-If no specific packages are specified, `install` installs all packages listed in the project's `packages.config` file, making it similar to [`restore`](#restore). In this case, `install` does not work with projects that use `project.json`.
-
-The `install` command does not modify a project file or `packages.config`; in this way it's similar to `restore` in that it only adds packages to disk but does not change a project's dependencies.
-
-To add a dependency, either add a project through the Package Manager UI or Console in Visual Studio, or modify `packages.config` and then run either `install` or `restore`. For projects using `project.json`, you can modify that file and then run `restore`.
-
-
-### Usage
-
- nuget install [options]
-
-where <packageID> names the package to install (using the latest version), or <configFilePath> identifies the `packages.config` file that lists the packages to install. You can indicate a specific version with the `-version` option.
-
-
-### Options
-
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
excludeversion
-
Excludes the version number from the installation folder.
-
-
-
fileconflictaction
-
(2.5+) Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Values are overwrite, ignore, none.
-
-
-
help
-
Displays help information for the command.
-
-
-
nocache
-
Prevents NuGet from using packages from local machine caches.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
outputdirectory
-
Specifies the folder in which packages are installed. If no folder is specified, the current folder is used.
-
-
-
prerelease
-
Allows prerelease packages to be installed. This flag is not required when restoring packages with packages.config.
-
-
-
requireconsent
-
Verifies that restoring packages is enabled before downloading and installing the packages. For details, see Package Restore.
-
-
-
solutiondirectory
-
Specifies root folder of the solution for which to restore packages.
-
-
-
source
-
Specifies a list of package sources to use.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
version
-
Specifies the version of the package to install.
-
-
-
-### Examples
-
- nuget install elmah
-
- nuget install packages.config
-
- nuget install ninject -outputdirectory c:\proj
-
-
-## list
-
-Displays a list of packages from a given source. If no sources are specified, all sources defined in the global configuration file, `%AppData%\NuGet\NuGet.config`, are used. If `NuGet.config` specifies no sources, then `list` uses the default feed (nuget.org).
-
-### Usage
- nuget list [search terms] [options]
-
-where the optional search terms will filter the displayed list. Search terms are applied to the names of packages, tags, and package descriptions.
-
-### Options
-
-
-
allversions
-
List all versions of a package. By default, only the latest package version is displayed.
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
prerelease
-
Includes prerelease packages in the list.
-
-
-
source
-
Specifies a list of packages sources to search.
-
-
-
verbose
-
Displays a detailed list of information for each package.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget list
-
- nuget list -verbose -allversions
-
-## locals
-*Version 3.3+*
-
-Clears or lists local NuGet resources such as the http-request cache, packages cache, and the machine-wide global packages folder. The `locals` command can also be used to display a list of those locations. For more information, see [Managing the NuGet Cache](/ndocs/consume-packages/managing-the-nuget-cache).
-
-### Usage
-
- nuget locals [options]
-
-where <cache> is one of `all`, `http-cache`, `packages-cache`, `global-packages`, and `temp` *(3.4+)*.
-
-
-### Options
-
-
-
-
clear
-
Clear the specified cache.
-
-
-
help
-
Displays help information for the command.
-
-
-
list
-
List the location of the specifid cache, or the locations of all caches when used with all.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed.
-
-
-
-### Examples
-
- nuget locals all -list
- nuget locals http-cache -clear
-
-
-## mirror
-
-*Deprecated in 3.2+*
-
-Mirrors a package and its dependencies from the specified source repositories to the target repository.
-
-
- Note
- To enable this command for NuGet versions before 3.2, go to https://nuget.codeplex.com/releases, select the newest stable release, download NuGet.ServerExtensions.dll and Nuget-Signed.exe to your local disk and rename the Nuget-Signed.Exe to nuget.exe..
-
-
-### Usage
- nuget mirror [options]
-
-where <packageID> is the package to mirror, or <configFilePath> identifies the `packages.config` file that lists the packages to mirror.
-
-The <listUrlTarget> specifies the source repository, and <publishUrlTarget> specifies the target repository.
-
-If your target repository is on https://machine/repo that's running [NuGet.Server](/ndocs/hosting-packages/nuget.server), the list and push urls will be *https://machine/repo/nuget* and *https://machine/repo/api/v2/packag*e, respectively.
-
-### Options
-
-
-
apikey
-
The API key for the target repository. If not present, the one specified in %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
nocache
-
Prevents NuGet from using packages from local machine caches.
-
-
-
noop
-
Logs what would be done but does not perform the actions; assumes success for push operations.
-
-
-
prerelease
-
Includes prerelease packages in the mirroring operation.
-
-
-
source
-
A list of package sources to mirror. If no sources are specified, the ones defined in %AppData%\NuGet\NuGet.config are used, defaulting to nuget.org if none are specified.
-
-
-
timeout
-
Specifies the timeout, in seconds, for pushing to a server. The default is 300 seconds (5 mintues).
-
-
-
version
-
The version of the package to install. If not specified, the latest version is mirrored.
-
-
-
-### Examples
-
- nuget mirror packages.config https://MyRepo/nuget https://MyRepo/api/v2/package -source https://nuget.org/api/v2 -apikey myApiKey -nocache
-
- nuget mirror Microsoft.AspNet.Mvc https://MyRepo/nuget https://MyRepo/api/v2/package -version 4.0.20505.0
-
- nuget mirror Microsoft.Net.Http https://MyRepo/nuget https://MyRepo/api/v2/package -prerelease
-
-
-## pack
-*Version 2.7+*
-
-Creates a NuGet package based on the specified nuspec or project file.
-
-### Usage
- nuget pack [options]
-
-where <nuspecPath> and <projectPath> specify the `.nuspec` or project file, respectively.
-
-### Options
-
-
-
-
-
basepath
-
Sets the base path of the files defined in the nuspec file.
-
-
-
build
-
Specifies that the project should be built before building the package.
-
-
-
exclude
-
Specifies one or more wildcard patterns to exclude when creating a package.
-
-
-
excludeemptydirectories
-
Prevent inclusion of empty directories when building the package.
-
-
-
help
-
Displays help information for the command.
-
-
-
includereferencedprojects
-
Indicates that the built package should include referenced projects either as dependencies or as part of the package. If a referenced project has a corresponding nuspec file that has the same name as the project, then that
- referenced project is added as a dependency. Otherwise, the referenced project is added as part of the package.
-
-
-
minclientversion
-
Set the minClientVersion attribute for the created package. This value will override the value of the existing minClientVersion attribute (if any) in the .nuspec file.
-
-
-
msbuildversion
-
Specifies the version of MSBuild to be used with this command. Supported values are 4, 12, 14. By default the MSBuild in your path is picked, otherwise it defaults to the highest installed version of MSBuild.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
nodefaultexcludes
-
Prevents default exclusion of NuGet package files and files and folders starting with a dot, such as .svn.
-
-
-
nopackageanalysis
-
Specifies that pack should not run package analysis after building the package.
-
-
-
outputdirectory
-
Specifies the folder in which the created package is stored. If no folder is specified, the current folder is used.
-
-
-
properties
-
Specifies a list of token=value pairs, separated by semicolons, where each occurrence of $token$ in the nuspec file will be replaced with the given value. Values can be strings in quotation marks.
-
-
-
symbols
-
Specifies that the package contains sources and symbols. When used with a with a nuspec file, this creates a regular NuGet package file and the corresponding symbols package.
-
-
-
tool
-
Specifies that the output files of the project should be placed in the tool folder.
-
-
-
verbose
-
Shows verbose output for package building.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed.
-
-
-
version
-
Overrides the version number from the nuspec file.
-
-
-
-### Excluding development dependencies
-
-Some NuGet packages are useful as development dependencies, which help you author your own library, but aren't necessarily needed as actual package dependencies.
-
-The `pack` command will ignore `package` entries in `packages.config`
-that have the `developmentDependency` attribute set to `true`. These entries will not be include as a dependencies in the created package.
-
-For example, consider the following `packages.config` file in the source project:
-
-
-
-
-
-
-
-
-For this project, the package created by `nuget pack` will have a dependency on `jQuery` and `microsoft-web-helpers` but not `netfx-Guard`.
-
-### Examples
-
- nuget pack
-
- nuget pack foo.nuspec
-
- nuget pack foo.csproj
-
- nuget pack foo.csproj -Build -symbols -properties owners=janedoe,xiaop;version="1.0.5"
-
- # create a package from project foo.csproj, using msbuild version 12 to build the project
- nuget pack foo.csproj -Build -symbols -properties owners=janedoe,xiaop;version="1.0.5" -MSBuildVersion 12
-
- nuget pack foo.nuspec -version 2.1.0
-
- nuget pack foo.nuspec -version 1.0.0 -minclientversion 2.5
-
-
-## push
-
-Pushes a package to a package source and publishes it.
-
-NuGet's default configuration is obtained by loading `%AppData%\NuGet\NuGet.config`, then loading any `nuget.config` or `.nuget\nuget.config` files starting from root of drive and ending in current directory (see [Configuring NuGet Behavior](/ndocs/consume-packages/configuring-nuget-behavior))
-
-### Usage
- nuget push [options]
-
-where <packagePath> identifies the package to push to the server.
-
-### Options
-
-
-
apikey
-
The API key for the target repository. If not present, the one specified in %AppData%\NuGet\NuGet.config is used.
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
source
-
Specifies the server URL. With NuGet 2.5+, NuGet will identify a UNC or local folder source and simply copy the file there instead of pushing it using HTTP. Also, starting with NuGet 3.4.2, this is a mandatory parameter unless the NuGet.config file specifies a DefaultPushSource value.
-
-
-
timeout
-
Specifies the timeout, in seconds, for pushing to a server. The default is 300 seconds (5 mintues).
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget push foo.nupkg
-
- nuget push foo.symbols.nupkg
-
- nuget push foo.nupkg -Timeout 360
-
- nuget push *.nupkg
-
- nuget.exe push -source \\mycompany\repo\ mypackage.1.0.0.nupkg
-
- nuget push foo.nupkg 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a -Source https://www.nuget.org/api/v2/package
-
- nuget push foo.nupkg 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a
-
- nuget push foo.nupkg 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a -s https://customsource/
-
-
-
-## restore
-*Version 2.7+*
-
-NuGet 2.7+: Downloads and installs any packages missing from the `packages` folder.
-
-NuGet 3.3+ with projects using `project.json`: Generates a `project.lock.json` file.
-
-### Usage
- nuget restore [options]
-
-where <projectPath> specifies the location of a solution, a `packages.config` file, or a `project.json` file. See [Remarks](#remarks) below for behavioral details.
-
-### Options
-
-
-
configfile
-
The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
disableparallelprocessing
-
Disables parallel NuGet project restores and package downloads.
-
-
-
help
-
Displays help information for the command.
-
-
-
msbuildversion
-
Specifies the version of MSBuild to be used with this command. Supported values are 4, 12, 14, 15. By default the MSBuild in your path is picked, otherwise it defaults to the highest installed version of MSBuild.
-
-
-
nocache
-
Prevents NuGet from using packages from local machine caches.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
outputdirectory or -packagesdirectory
-
Specifies the folder in which packages are installed. If no folder is specified, the current folder is used.
-
-
-
requireconsent
-
Verifies that restoring packages is enabled before downloading and installing the packages. For details, see Package Restore.
-
-
-
solutiondirectory
-
Specifies the solution folder. Not valid when restoring
- packages for a solution.
-
-
-
source
-
Specifies list of package sources to use for the restore.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Remarks
-The restore command is executed in the following steps:
-
-1. Determine the operation mode of the restore command.
-
-
-
-
projectPath file type
-
Behavior
-
-
-
Solution (folder)
-
NuGet looks for a .sln file and uses that if found; otherwise gives an error. $(SolutionDir)\.nuget is used as the starting folder.
-
-
-
.sln file
-
Restore packages identified by the solution; gives an error if -solutiondirectory is used. $(SolutionDir)\.nuget is used as the starting folder.
-
-
-
packages.config
-
Restore packages listed in this file.
-
-
-
project.json
-
Restore packages listed in this file, resolving and installing dependencies.
-
-
-
Other file type
-
File is assumed to be a .sln file as above; if it's not a solution, NuGet gives an error.
-
-
-
(projectPath not specified)
-
-
-
NuGet looks for solution files in the current folder. If a single file is found, that one is used to restore packages; if multiple solutions are found, NuGet gives an error.
-
If there are no solution files, NuGet looks for a packages.config or project.json and uses that to restore packages.
-
If no solution file, packages.config, or project.json is found, NuGet gives an error.
-
-
-
-
-
-
-2. Determine the packages folder using the following priority order (NuGet gives an error if none of these folders are found):
-
- * The `%userprofile%\.nuget\packages` value in `project.json`.
- * The folder specified with `-packagesdirectory`.
- * The `repositoryPath` vale in `nuget.config`
- * The folder specified with `-solutiondirectory`
- * `$(SolutionDir)\packages`
-
-
-3. When restoring packages for a solution, NuGet does the following:
- * Loads the solution file.
- * Restores solution level packages listed in `$(SolutionDir)\.nuget\packages.config` into the `packages` folder.
- * Restore packages listed in `$(ProjectDir)\packages.config` into the `packages` folder. For each package specified, restore the package in parallel unless `-disableparallelprocessing` is specified.
-
-### Examples
-
- # Restore packages for a solution file
- nuget restore a.sln
-
- # Restore packages for a solution file, using msbuild version 14.0 to load the solution and its project(s)
- nuget restore a.sln -MSBuildVersion 14
-
- # Restore packages for a project's packages.config file, with the packages folder at the parent
- nuget restore proj1\packages.config -PackagesDirectory ..\packages
-
- # Restore packages for the solution in the current folder, specifying package sources
- nuget restore -source "https://www.nuget.org/api/v2;https://www.myget.org/F/nuget"
-
-
-## setapikey
-
-Saves an API key for a given server URL into `NuGet.Config` so that it doesn't need to be entered for subsequent commands.
-
-### Usage
- nuget setapikey -source [options]
-
-where <source> identifies the server and <key> is the key or password to save. If <source> is omitted, nuget.org is assumed.
-
-### Options
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget setapikey 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a
-
- nuget setapikey 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a -source https://example.com/nugetfeed
-
-
-## sources
-
-Manages the list of sources located in `%AppData%\NuGet\NuGet.config` or the specified configiration file.
-
-### Usage
- nuget sources -Name -Source
-
-where is one of *List, Add, Remove, Enable, Disable,* or *Update*, <name> is the name of the source, and <source> is the source's URL.
-
-
-### Options
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
password
-
Specifies the password for authenticating with the source.
-
-
-
storepasswordincleartext
-
Indicates to store the password in unencrypted text instead of
- the default behavior of storing an encrypted form.
-
-
-
username
-
Specifies the user name for authenticating with the source.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-
-### Examples
-
- nuget sources Add "MyServer" \\myserver\packages
-
- nuget sources Disable "MyServer"
-
- nuget source Enable "nuget.org"
-
-
-## spec
-
-Generates a `.nuspec` file for a new package. If run in the same folder as a project file (`.csproj`, `.vbproj`, `.fsproj`), `spec` creates a tokenized `.nuspec` file. For additional information, see [Creating a Package](/ndocs/create-packages/creating-a-package).
-
-### Usage
- nuget spec [] [options]
-
-where <packageID> is an optional package identifier to save in the `.nuspec` file.
-
-### Options
-
-
-
assemblypath
-
Specifies the path to the assembly to use for metadata.
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
force
-
Overwrites any existing .nuspec file.
-
-
-
help
-
Displays help information for the command.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
-### Examples
-
- nuget spec
-
- nuget spec MyPackage
-
- nuget spec -a MyAssembly.dll
-
-
-## update
-
-Updates all packages in a project the latest available versions. It is recommended to run ['restore'](#restore) before running the `update`.
-
-Note: `update` does not with with projects using `project.json`.
-
-The `update` command will also update assembly references in the project file, provded those references already exist. If an updated package has an added assembly, a new reference will *not* be added. New package dependencies will also not have their assembly references added. To include these operations as part of an update, update the package in Visual Studio using the Package Manager UI or the Package Manager Console.
-
-This command can also be used to update nuget.exe itself using the *-self* flag.
-
-### Usage
- nuget update [options]
-
-where <configPath> identifies either a `packages.config` or solution file that lists the project's dependencies.
-
-### Options
-
-
-
configfile
-
(2.5+) The NuGet configuration file to modify. If not specified,
- %AppData%\NuGet\NuGet.config is used.
-
-
-
fileconflictaction
-
(2.5+) Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Values are overwrite, ignore, none.
-
-
-
help
-
Displays help information for the command.
-
-
-
id
-
Specifies a list of package IDs to update.
-
-
-
msbuildversion
-
Specifies the version of MSBuild to be used with this command. Supported values are 4, 12, 14, 15. By default the MSBuild in your path is picked, otherwise it defaults to the highest installed version of MSBuild.
-
-
-
noninteractive
-
Suppresses prompts for user input or confirmations.
-
-
-
prerelease
-
Allows updating to prerelease versions. This flag is not required when updating prerelease packages that are already installed.
-
-
-
repositorypath
-
Specifies the local folder where packages are installed.
-
-
-
safe
-
Specifies that only updates with the highest version available within the same major and minor version as the installed package will be installed.
-
-
-
self
-
(1.4+) Updates nuget.exe to the latest version; all other arguments are ignored.
-
-
-
source
-
Specifies a list of package sources to use for the updates.
-
-
-
verbose
-
Shows verbose output while updating.
-
-
-
verbosity
-
Specifies the amount of details displayed in the output: normal, quiet, detailed (2.5+).
-
-
-
version
-
When used with one package ID, specifies the version of the package to update.
-
-
-
-### Examples
-
- nuget update
-
- # update packages installed in solution.sln, using msbuild version 14.0 to load the solution and its project(s).
- nuget update solution.sln -MSBuildVersion 14
-
- nuget update -safe
-
- nuget update -self
-
-
-
-
diff --git a/docs/Tools/Package-Manager-Console.md b/docs/Tools/Package-Manager-Console.md
deleted file mode 100644
index 3bf963694..000000000
--- a/docs/Tools/Package-Manager-Console.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Package Manager Console
-
-The Package Manager Console in Visual Studio lets you use [NuGet PowerShell commands](/ndocs/tools/powershell-reference) to find, install, uninstall, and update NuGet packages. Using the Console is necessary if you want to work with packages without having a solution open, and is required in cases where the Package Manager UI does not provide a way to perform an operation. Note, however, that all operations can be done with the [NuGet CLI](/ndocs/tools/nuget.exe-cli-reference).
-
-In all cases, you open the Console in Visual Studio through the **Tools > NuGet Package Manager > Package Manager Console** command.
-
-At the top of the pane you can select the desired package source, manage sources (by clicking the gear icon), and select the default project to which commands will be applied:
-
-
-
-You can override these settings with most commands by using the `-Source` and `-ProjectName` options.
-
-In this topic:
-
-- [Finding a package](#finding-a-package)
-- [Installing a package](#installing-a-package)
-- [Uninstalling a package](#uninstalling-a-package)
-- [Updating a package](#updating-a-package)
-- [Extending the Package Manager Console](#extending-the-package-manager-console)
-- [Setting up a NuGet PowerShell profile](#setting-up-a-nuget-powershell-profile)
-
-
-## Finding a package
-
-In the console, [`Get-Package -ListAvailable`](/ndocs/tools/powershell-reference#get-package) see all the packages available from the selected source. For nuget.org, the list will contain thousands of packages, so it's helpful to use the `-Filter` switch along with `-PageSize`. In NuGet 3.0 and later, you can instead use the [`Find-Package`](/ndocs/tools/powershell-reference#find-package) command that is better suited to this operation.
-
-Examples:
-
- # All versions of NuGet
- Get-Package -ListAvailable -Filter elmah
- Get-Package -ListAvailable -Filter Logging
-
- # List all versions of packages matching the filter "jquery"
- Get-Package -ListAvailable -Filter jquery -AllVersions
-
-
- # NuGet 3.0+
- Find-Package elmah
- Find-Package Logging
-
- # List packages with the keyword EntityFramework and version 6.1.1
- Find-Package EntityFramework -version 6.1.1
-
- # List all versions of the package with the ID of "jquery"
- Find-Package jquery -AllVersions -ExactMatch
-
-
-## Installing a package
-
-Once you know the identifier of the package you want to install use [`Install-Package`](/ndocs/tools/powershell-reference#install-package), such as `Install-Package elmah`.
-
-NuGet retrieves the package from the specified package source and installs it in the default project of the solution, unless you specify another project using the `-ProjectName` switch.
-
-Installing a package performs the following actions:
-
-- Display applicable license terms in the Console window with implied agreement. If you do not agree to the terms, you should uninstall the package immediately.
-- Creates a `packages` folder (if needed) and copies package files into a subfolder within it.
-- Adds references to the project, which subsequently appear in Solution Explorer
-- Updates `app.config` and/or `web.config` if the package uses [source and config file transformations](/ndocs/create-packages/source-and-config-file-transformations).
-- Installs any dependencies if not already present in the project. This might update package versions in the process, as described in [Dependency Resolution](/ndocs/consume-packages/dependency-resolution).
-
-
-## Uninstalling a package
-
-If you do not already know the name of the package you want to remove, use the [`Get-Package`](/ndocs/tools/powershell-reference#get-package) command with no parameters to see all of the currently-installed packages.
-
-To uninstall a package, use [`Uninstall-Package`](/ndocs/tools/powershell-reference#uninstall-package) with the package ID, such as `Update-Package jQuery`.
-
-Uninstalling a package performs the following actions:
-
-- References to the package no longer appear in the **Reference** or **Bin** folders in Solution Explorer. (You might need to rebuild the project to see it removed from the **Bin** folder.)
-- The folder for the package is removed from the `packages` folder; the `packages` folder itself is deleted if no packages remain.
-- Any changes made to `app.config` or `web.config` when the package was installed are removed.
-- If other packages were installed because they were dependencies of the package that was removed, and if no remaining packages use those dependencies, the dependency packages are also removed.
-
-
-## Updating a package
-
-The [`Get-Package -updates`](/ndocs/tools/powershell-reference#get-package) command checks if there are newer versions available for any installed packages.
-
-To update a package, use [`Update-Package`](/ndocs/tools/powershell-reference#update-package) with the package ID, such as `Update-Package jQuery`.
-
-
-## Extending the Package Manager Console
-
-Some packages install new commands for the Console. For example, `MvcScaffolding`, creates commands, such as `Scaffold` shown below, to generate ASP.NET MVC controllers and views:
-
-
-
-
-## Setting up a NuGet PowerShell Profile
-
-A PowerShell profile lets you make commonly-used commands available wherever you use PoewrShell. NuGet supports a NuGet specific profile typically located at:
-
- %UserProfile%\Documents\WindowsPowerShell\NuGet_profile.ps1
-
-To find the profile file, type `$profile` in the Console:
-
- $profile
- C:\Users\\Documents\WindowsPowerShell\NuGet_profile.ps1
-
-For more details, refer to [Windows PowerShell Profiles](https://technet.microsoft.com/library/bb613488.aspx).
diff --git a/docs/Tools/Package-Manager-UI.md b/docs/Tools/Package-Manager-UI.md
deleted file mode 100644
index 9442f5df8..000000000
--- a/docs/Tools/Package-Manager-UI.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# NuGet Package Manager UI
-
-The NuGet Package Manager UI in Visual Studio allows you to easily install, uninstall, and update NuGet packages in projects and solutions.
-
-In this topic:
-
-- [Finding and installing a package](#finding-and-installing-a-package)
-- [Uninstalling a package](#uninstalling-a-package)
-- [Updating a package](#updating-a-package)
-- [Managing packages for the solution](#managing-packages-for-the-solution) (working with multiple projects at the same time).
-- [Package sources](#package-sources)
-- [Package manager Options control](#package-manager-options-control)
-
-
-## Finding and installing a package
-
-1. In **Solution Explorer**, right-click **References** (or **Bin** in a Website project), or the desired project, and select **Manage NuGet Packages...**.
-
- 
-
-2. On the **Browse** tab, browse the list or search for a specific package using the search box on the top right. Selecting a package displays the package information on the right and enables the **Install** button along with a version-selection drop-down.
-
- 
-
-3. Select the desired version from the drop-down and click **Install**. This installs the package and its dependencies; you may be asked to accept license terms in the process. When installation is complete, the new packages appear on the **Installed** tab. **Solution Explorer** also shows the added packages, which you can now use in your project.
-
- 
-
-## Uninstalling a package
-
-1. In **Solution Explorer**, right-click **References** (or **Bin** in a Website project), or the desired project, and select **Manage NuGet Packages...**.
-2. Click on the **Installed** tab.
-3. Select the package to uninstall and click **Uninstall**.
-
- 
-
-## Updating a package
-
-1. In **Solution Explorer**, right-click **References** (or **Bin** in a Website project), or the desired project, and select **Manage NuGet Packages...**.
-2. Click on the **Updates** tab to see packages that have available updates.
-3. Select the package to update, select the desired version from the drop-down on the right, and click **Update**.
-
- 
-
-## Managing packages for the solution
-*NuGet 1.4+*
-
-1. Select the **Tools > NuGet Package Manager > Manage NuGet Packages for Solution...** menu command, or right-click the solution and select **Manage NuGet Packages...**:
-
- 
-
-2. When managing packages for the solution, the UI lets you select which projects will be affected:
-
- 
-
-## Package Sources
-
-The NuGet Package Manager UI allows you to easily switch between package sources using the package source selector:
-
-
-
-To manage package sources:
-
-1. Click on the **Settings** icon in the Package Manager UI outlined below or use the **Tools > Options** command. and scroll to **NuGet Package Manager**.
-
- 
-
-2. Select the **Package Sources** node:
-
- 
-
-3. To add a source, click the **+** button, edit the name, enter the URL or path in the **Source** control, and click **Update**. This will make it appear in the selector drop-down.
-4. To change a package source, select it, make edits in the **Name** and **Source** boxes, and click **Update**.
-5. To disable a package source, uncheck the box to the left of the name in the list.
-6. To remove a package source, select it and click the **X** button.
-7. Use the up and down arrow buttons to change the priority order of the package sources.
-
-## Package manager Options control
-
-In the Package Manager UI there is a small, expandable **Options** control (shown here both collapsed and expanded):
-
-
-
-The following sections explain these options.
-
-### Show preview window
-
-When checked, a modal window displays which dependent packages will be loaded with the package you have chosen.
-
-
-
-### Install and Update Options
-
-
-
-**Dependency behavior** configures how NuGet decide which versions of dependent packages to installed:
-
-- *Ignore dependencies* skips installing any dependencies, which typically breaks the package being installed.
-- *Lowest* installs the dependency with the minimal version number that meets the requirements of the primary chosen package.
-- *Highest Patch* installs the version with the same major and minor version numbers, but the highest patch number. For example, if version 1.2.2 is specified then the highest version that starts with 1.2 will be installed
-- *Highest Minor* installs the version with the same major version number but the highest minor number and patch number. If version 1.2.2 is specified, then the highest version that starts with 1 will be installed
-- *Highest* installs the highest available version of the package.
-
-**File conflict action** specifies how NuGet should handle packages that already exist in the project or local machine:
-
-- *Prompt* instructs NuGet to ask whether to keep or overwrite existing packages.
-- *Ignore All* instructs NuGet to skip overwriting any existing packages.
-- *Overwrite All* instructs NuGet to overwrite any existing packages.
-
-### Uninstall Options
-
-
-
-
-**Remove dependencies**: when checked, removes any dependent packages if they are not referenced elsewhere in the project.
-
-**Force uninstall even if there are dependencies on it**: when checked, uninstalls a package even if it's still being referenced in the project. This is typically used in combination with **Remove dependencies** to remove a package and whatever dependencies it installed. Using this option may, however, lead to a broken references in the project, in which case you may need to [reinstall those other packages](/ndocs/consume-packages/reinstalling-and-updating-packages).
diff --git a/docs/Tools/PowerShell-Reference.md b/docs/Tools/PowerShell-Reference.md
deleted file mode 100644
index 1dd57fd4e..000000000
--- a/docs/Tools/PowerShell-Reference.md
+++ /dev/null
@@ -1,621 +0,0 @@
-# PowerShell Reference
-
-The Package Manager Console provides a PowerShell interface within Visual Studio to interact with NuGet. This topic is the reference for those commands; for a guide to using the console, see the [Package Manager Console](/ndocs/tools/package-manager-console) topic.
-
-
Updates a package and its dependencies, or all packages in a project.
-
All
-
-
-
-For detailed help on any of these commands within the console, just run the following with the command name in question:
-
- Get-Help
-
-
-Note that all Package Manager Console commands support the following common PowerShell parameters:
-
-- Debug
-- ErrorAction
-- ErrorVariable
-- OutBuffer
-- OutVariable
-- PiplineVariable
-- Verbose
-- WarningAction
-- WarningVariable
-
-For details, refer to [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216) in the PowerShell documentation.
-
-
-## Add-BindingRedirect
-
-Examines all assemblies within the output path for a project and adds binding redirects to the appropriate configuration files. For additional details on what this means, see [Redirecting Assembly Versions](https://msdn.microsoft.com/library/7wd6ex19.aspx) on MSDN.
-
-
- Note
- NuGet 1.2+ automatically runs this command when installing a package.
-
Specifies the project to which to add binding redirects, defaulting to the default project. The -ProjectName switch itself is optional.
-
-
-
-### Examples
-
- Add-BindingRedirect MyProjectName
-
-
-## Find-Package
-*Version 3.0+*
-
-Searches a package source using a package ID or keywords.
-
-### Usage
-
- Find-Package [] [-Source ] [-First ] [-Skip ] [-AllVersions] [-IncludePrerelease] [-ExactMatch]
-
-### Parameters
-
-
-
-
<keywords>
-
Searches the package source for packages with the keywords. Use the `-ExactMatch` switch to return only those packages whose package ID matches the keywords. If no keywords are given, Find-Package returns a list of the top 20 packages by downloads.
-
-
-
Source
-
Specifies the URL or path for the package source to search. If omitted, searched the currently selected package source.
-
-
-
First
-
Specifies the number of packages to return from the beginning of the list. If not specified, Find-Package lists 20 packages.
-
-
-
Skip
-
Skips the specified number of packages, counting from the beginning of the list
-
-
-
AllVersions
-
Displays all available versions of each package instead of only the latest version.
-
-
-
IncludePrerelease
-
Indicates whether to include prerelease packages in the list.
-
-
-
ExactMatch
-
Specified to use the keywords as a case-sensitive package ID.
-
-
-
-### Examples
-
- # List packages with the keyword Elmah available
- Find-Package Elmah
-
- # List all versions of the jquery package
- Find-Package jquery -AllVersions -ExactMatch
-
- # List packages with the keyword EntityFramework and version 6.1.1
- Find-Package EntityFramework -version 6.1.1
-
-
-## Get-Package
-
-Retrieves the list of packages installed in the local repository, or lists packages available from a package source when used with the `-ListAvailable` switch.
-
-### Usage
-
- Get-Package [-Source ] [-ListAvailable] [-Updates] [-ProjectName ] [-Filter ] [-First ] [-Skip ] [-AllVersions] [-IncludePrerelease] [-PageSize ]
-
-With no parameters, `Get-Package` displays the list of packages installed in the default project.
-
-### Parameters
-
-
-
-
Source
-
Specifies the URL or path of a package source. When used with -ListAvailable, defaults to nuget.org.
-
-
-
ListAvailable
-
Lists packages available from a package source, defaulting to nuget.org. If -PageSize and/or -First are not specified, this will show 50 packages.
-
-
-
Updates
-
Lists packages that have an update available from the package source.
-
-
-
ProjectName
-
Specifies the project from which to get installed packages.
-
-
-
Filter
-
Specifies a filter string used to narrow down the list of packages returned. The filter is searched for in the package ID, the description and tags.
-
-
-
IncludePrerelease
-
Indicates that prerelease packages should be included in the list.
-
-
-
First
-
Specifies the number of packages to return from the beginning of the list. If not specified, defaults to 50.
-
-
-
Skip
-
Skips the specified number of packages, counting from the beginning of the list.
-
-
-
AllVersions
-
Displays all available versions of each package instead of only the latest version.
-
-
-
PageSize
-
*(3.0+)* When used with -ListAvailable, specifies the number of packages to list before giving a prompt to continue. The command will continue listing packages as long as there are more to return. Without -PageSize, at most 50 packages are listed by default.
-
-
-
-### Examples
-
- # Lists the packages installed in the current solution
- Get-Package
-
- # Lists packages available in the current package source
- Get-Package -ListAvailable
-
- # Lists all packages in the current source in pages of 20
- Get-Package -ListAvailable -PageSize 20
-
- # Lists packages with the Ninject keyword in the current source, up to 50
- Get-Package -ListAvailable -Filter Ninject
-
- # Lists packages installed in the solution that have available updates
- Get-Package -Updates
-
-
-## Get-Project
-
-Displays information about the default or specified project.
-
-### Usage
-
- Get-Project [-Name ] [-All]
-
-### Parameters
-
-
-
-
Name
-
Specifies the project to display, defaulting to the default project. The -Name switch is itself optional.
-
-
-
All
-
Displays information for every project in the solution.
-
-
-
-### Examples
-
- # Displays information for the default project
- Get-Project
-
- # Displays information for MyProjectName
- Get-Project MyProjectName
-
- # Displays information for all projects in the solution
- Get-Project -All
-
-
-## Install-Package
-
-Installs a package and its dependencies into the project.
-
-### Usage
-
- Install-Package [-Id] [-Version ] [-IgnoreDependencies] [-ProjectName ] [-Source ] [-IncludePrerelease] [-FileConflictAction] [-DependencyVersion ] [-WhatIf]
-
-In NuGet 2.8+, `Install-Package` can downgrade an existing package in your project. For example, if you have Microsoft.AspNet.MVC 5.1.0-rc1 installed, the following command would downgrade it to 5.0.0:
-
- Install-Package Microsoft.AspNet.MVC -Version 5.0.0.
-
-NuGet 2.7 and earlier will give an error saying that a newer version is already installed.
-
-### Parameters
-
-
-
-
Id
-
Specifies the package ID of the package to install. With NuGet 3.0+, the ID can be a path or URL of a packages.config file or a .nupkg file. The -Id switch itself is optional.
-
-
-
Version
-
Specifies the version of the package to install, defaulting to the latest version.
-
-
-
IgnoreDependencies
-
Installs only this package and not its dependencies.
-
-
-
ProjectName
-
Specifies the project into which to install the package, defaulting to the default project.
-
-
-
Source
-
Specifies the URL or path to a package source. If omitted, defaults to the currently selected package source.
-
-
-
IncludePrerelease
-
Indicates that prerelease packages can be installed.
-
-
-
FileConflictAction
-
Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Possible values are Overwrite, Ignore, None, OverwriteAll, and IgnoreAll (3.0+).
-
-
-
DependencyVersion
-
Specifies the version of the dependency packages to use, which can be one of the following:
-
-
Lowest (default): the lowest version
-
HighestPatch: the version with the lowest major, lowest minor, highest patch
-
HighestMinor: the version with the lowest major, highest minor, highest patch
-
Highest: the highest version
-
- You can set the default value using the dependencyVersion setting in the nuget.config file.
-
-
-
-
WhatIf
-
Shows what would happen when running the command without actually performing the install.
-
-
-
-### Examples
-
- Install-package https://raw.githubusercontent.com/json-ld.net/master/src/JsonLD/packages.config
-
- Install-package c:\temp\packages.config
-
- Install-package https://az320820.vo.msecnd.net/packages/microsoft.aspnet.mvc.5.2.3.nupkg
-
- Install-package c:\temp\packages\jQuery.1.10.2.nupkg
-
- # Installs the latest version of Elmah from the current source
- Install-Package Elmah
-
- # Installs Glimpse 1.0.0 into the MvcApplication1 project
- Install-Package Glimpse -Version 1.0.0 -Project MvcApplication1
-
- # Installs Ninject.Mvc3 but not its dependencies from c:\temp\packages
- Install-Package Ninject.Mvc3 -IgnoreDependencies -Source c:\temp\packages
-
-
-## Open-PackagePage
-*Deprecated in 3.0+*
-
-Launches the default browser with the project, license, or report abuse URL for the specified package.
-
-### Usage
-
- Open-PackagePage [-Id] [-Version ] [-Source ] [-License ] [-ReportAbuse] [-PassThru]
-
-### Parameters
-
-
-
-
Id
-
Specifies the package ID of the desired package. The -Id switch itself is optional.
-
-
-
Version
-
Specifies the version of the package, defaulting to the latest version.
-
-
-
Source
-
Specifies the packiage source, defaulting to the default source.
-
-
-
License
-
Opens the browser to the package's License URL. If neither -License nor -ReportAbuse is specified, the browser opens the package's Project URL.
-
-
-
ReportAbuse
-
Opens the browser to the package's Report Abuse URL. If neither -License nor -ReportAbuse is specified, the browser opens the package's Project URL.
-
-
-
PassThru
-
Displays the selected URL but does not open it in the browser.
-
-
-
-### Examples
-
- # Opens a browser with the Ninject's package's project page
- Open-PackagePage Ninject
-
- # Opens a browser with the Ninject's package's license page
- Open-PackagePage Ninject -License
-
- # Opens a browser with the Ninject's package's report abuse page
- Open-PackagePage Ninject -ReportAbuse
-
- # Assigns the license URL to the variable, $url, without launching the browser
- $url = Open-PackagePage Ninject -License -WhatIf -PassThru
-
-
-## Sync-Package
-*Version 3.0+*
-
-Get the version of installed package from specified project and syncs the version to the rest of projects in the solution.
-
-### Usage
-
- Sync-Package [-Id] [-Version ] [-IgnoreDependencies] [-ProjectName ] [-Source ] [-IncludePrerelease] [-FileConflictAction] [-DependencyVersion ] [-WhatIf]
-
-### Parameters
-
-
-
-
Id
-
Specifies the identifier of the package to sync. The -Id switch itself is optional.
-
-
-
Version
-
Specifies the version of the package to sync, defaulting to the currently installed version.
-
-
-
ProjectName
-
Specifies the project to sync the package from, defaulting to the default project.
-
-
-
Source
-
Specifies the URL or path of a package source, defualting to the current package source.
-
-
-
IncludePrerelease
-
Includes prerelease packages in the sync.
-
-
-
FileConflictAction
-
Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Possible values are Overwrite, Ignore, None, OverwriteAll, and IgnoreAll (3.0+).
-
-
-
DependencyVersion
-
Specifies the version of the dependency packages to use, which can be one of the following:
-
-
Lowest (default): the lowest version
-
HighestPatch: the version with the lowest major, lowest minor, highest patch
-
HighestMinor: the version with the lowest major, highest minor, highest patch
-
Highest: the highest version
-
- You can set the default value using the dependencyVersion setting in the nuget.config file.
-
-
-
-
WhatIf
-
Shows what would happen when running the command without actually performing the sync.
-
-
-
-
-### Examples
-
- # Syncs the Ninject package installed in the default project into the other projects in the solution
- Sync-Package Ninject
-
- # Syncs only Microsoft.Aspnet.package to the rest of the projects, but not its dependencies
- Sync-Package Microsoft.Aspnet.Mvc -IgnoreDependencies
-
- # Syncs jQuery.Validation and installs the highest version of jQuery (a dependency) from the package source
- Sync-Package jQuery.Validation -DependencyVersion highest
-
-
-## Uninstall-Package
-
-Removes a package from a project, optionally removing its dependencies.
-
-### Usage
-
- Uninstall-Package [-Id] [-Version ] [-RemoveDependencies] [-ProjectName ] [-Force] [-WhatIf]
-
-If other packages depend on this package, the command will fail unless the –Force option is specified.
-
-
-### Parameters
-
-
-
-
Id
-
Specifies the identifier of the package to uninstall. The -Id switch itself is optional.
-
-
-
Version
-
Specifies the version of the package to uninstall, defaulting to the currently installed version.
-
-
-
RemoveDependencies
-
Uninstalls the package and its unused dependencies. That is, if any dependency has another package that depends on it, it is skipped.
-
-
-
ProjectName
-
Specifies the project from which to uninstall the package, defaulting to the default project.
-
-
-
Force
-
Forces a package to be uninstalled, even if there are dependencies on it.
-
-
-
WhatIf
-
Shows what would happen when running the command without actually performing the uninstall.
-
-
-
-### Examples
-
- # Uninstalls the Elmah package from the default project
- Uninstall-Package Elmah
-
- # Uninstalls the Elmah package and all its unused dependencies
- Uninstall-Package Elmah -RemoveDependencies
-
- # Uninstalls the Elmah package even if another package depends on it.
- Uninstall-Package Elmah -Force
-
-
-## Update-Package
-
-Updates a package and its dependencies, or all packages in a project.
-
-### Usage
-
- Update-Package [-Id ] [-Source ] [-IgnoreDependencies] [-ProjectName ] [-Version ] [-Safe] [-IncludePrerelease] [-Reinstall] [-FileConflictAction] [-DependencyVersion] [-WhatIf]
-
-In NuGet 2.8+, `Update-Package` can be used to downgrade an existing package in your project. For example, if you have Microsoft.AspNet.MVC 5.1.0-rc1 installed, the following command would downgrade it to 5.0.0:
-
- Update-Package Microsoft.AspNet.MVC -Version 5.0.0.
-
-NuGet 2.7 and earlier will give an error saying that a newer version is already installed.
-
-### Parameters
-
-
-
-
Id
-
Specifies the package ID of the package to update. If omitted, updates all packages. The -Id switch itself is optional.
-
-
-
Source
-
Specifies the URL or path for a package source.
-
-
-
IgnoreDependencies
-
Skips updating any of the package's dependencies.
-
-
-
ProjectName
-
Specifies the project containing the packages to update, defaulting to all projects.
-
-
-
Safe
-
Constrains upgrades to only versions with the same Major and Minor version as the currently installed package.
-
-
-
ToHighestMinor
-
Constrains upgrades to only versions with the same Major version as the currently installed package
-
-
-
Version
-
Specifies the version to use for the upgrade, defaulting to the latest version. In NuGet 3.0+, the version value must be one of Lowest, Highest, HighestMinor, or HighestPatch (equivalent to -Safe).
-
-
-
IncludePrerelease
-
Indicates that prerelease packages can be used for the update.
Specifies the action to take when asked to overwrite or ignore existing files referenced by the project. Possible values are Overwrite, Ignore, None, OverwriteAll, and IgnoreAll (3.0+).
-
-
-
DependencyVersion
-
Specifies the version of the dependency packages to use, which can be one of the following:
-
-
Lowest (default): the lowest version
-
HighestPatch: the version with the lowest major, lowest minor, highest patch
-
HighestMinor: the version with the lowest major, highest minor, highest patch
-
Highest (default for Update-Package with no parameters): the highest version
-
- You can set the default value using the dependencyVersion setting in the nuget.config file.
-
-
-
-
WhatIf
-
Shows what would happen when running the command without actually performing the update.
-
-
-
-### Examples
-
- # Updates all packages in every project.
- Update-Package
-
- # Updates every package in the MvcApplication1 project
- Update-Package -Project MvcApplication1
-
- # Updates the Elmah package in every project to the latest version
- Update-Package Elmah
-
- # Updates the Elmah package to version 1.1.0 in every project.
- Update-Package Elmah -Version 1.1.0
-
- # Updates the Elmah package within the MvcApplication1 project only
- Update-Package Elmah -Project MvcApplication1
-
- # Updates Elmah to the highest "safe" version. For example, if Elmah version 1.0.0 of a package is installed, and versions 1.0.1, 1.0.2, and 1.1 are available in the feed, the -Safe parameter updates the package to 1.0.2 instead of 1.1 as it would otherwise.
- Update-Package Elmah -Safe
-
-
-
-
-
-
-
diff --git a/docs/Tools/_metadata b/docs/Tools/_metadata
deleted file mode 100644
index bbb22b544..000000000
--- a/docs/Tools/_metadata
+++ /dev/null
@@ -1,4 +0,0 @@
-NuGet.exe-CLI-Reference
-Package-Manager-UI
-Package-Manager-Console
-PowerShell-Reference
\ No newline at end of file
diff --git a/docs/Tools/media/Options.png b/docs/Tools/media/Options.png
deleted file mode 100644
index 20d91f19e..000000000
Binary files a/docs/Tools/media/Options.png and /dev/null differ
diff --git a/docs/Tools/media/PackageManagerConsoleControls.png b/docs/Tools/media/PackageManagerConsoleControls.png
deleted file mode 100644
index aed369a18..000000000
Binary files a/docs/Tools/media/PackageManagerConsoleControls.png and /dev/null differ
diff --git a/docs/Tools/media/PackageManagerConsoleInstall.png b/docs/Tools/media/PackageManagerConsoleInstall.png
deleted file mode 100644
index 716e941e0..000000000
Binary files a/docs/Tools/media/PackageManagerConsoleInstall.png and /dev/null differ
diff --git a/docs/Visual-Studio-Extensibility/NuGet-API-in-Visual-Studio.md b/docs/Visual-Studio-Extensibility/NuGet-API-in-Visual-Studio.md
deleted file mode 100644
index 56c48cd8a..000000000
--- a/docs/Visual-Studio-Extensibility/NuGet-API-in-Visual-Studio.md
+++ /dev/null
@@ -1,487 +0,0 @@
-# NuGet API in Visual Studio
-
-In addition to the Package Manager UI and Console in Visual Studio, NuGet also exports some useful services through the [Managed Extensibility Framework (MEF)](http://msdn.microsoft.com/library/dd460648.aspx). This interface allows other components in Visual Studio to interact with NuGet, which can be used to install and uninstall packages, and to obtain information about installed packages.
-
-As of NuGet 3.3+, NuGet exports the following services all of which reside in the `NuGet.VisualStudio` namespace in the `NuGet.VisualStudio.dll` assembly:
-
-- [`IRegistryKey`](#iregistrykey-interface): Method to retrieve a value from a registry subkey.
-- [`IConsoleInitializer`](#iconsoleinitializer-interface): Triggers eager initialization of the NuGet Package Manager Console.
-- [`IVsPackageInstaller`](#ivspackageinstaller-interface): Methods to install NuGet packages into projects.
-- [`IVsPackageInstallerEvents`](#ivspackageinstallerevents-interface): Events for package install/uninstall.
-- [`IVsPackageInstallerServices`](#ivspackageinstallerservices-interface): Methods to retrieve installed packages in the current solution and to check whether a given package is installed in a project.
-- [`IVsPackageManagerProvider`](#-ibspackagemanagerprovider-interface): Methods to provide alternative Package Manager suggestions for a NuGet package.
-- [`IVsPackageMetadata`](#ivspackagemetadata-interface); Methods to retrieve information about an installed package.
-- [`IVsPackageRestorer`](#ivspackagerestorer-interface): Methods to restore packages installed in a project.
-- [`IVsPackageSourceProvider`](#ivspackagesourceprovider-interface): Methods to retrieve a list of NuGet package sources.
-- [`IVsPackageUninstaller`](#ivspackageuninstaller-interface): Methods to uninstall NuGet packages from projects.
-- [`IVsTemplateWizard`](#ivstemplatewizard-interface): Designed for project/item templates to include pre-installed packages; this interface is *not* meant to be invoked from code and has no public methods.
-
-
-## Using NuGet Services
-
-1. Install the [`NuGet.VisualStudio`](https://www.nuget.org/packages/NuGet.VisualStudio) package into your project, which contains the `NuGet.VisualStudio.dll` assembly.
-
- When installed, the package automatically sets the **Embed Interop Types** property of the assembly reference to **True**. This makes your code resilient against version changes when users update to newer versions of NuGet.
-
-
- Note
- Do not use any other types besides the public interfaces in your code, and do not reference any other NuGet assemblies, including NuGet.Core.dll.
-
-
-2. To use the a service, import it through the [MEF Import attribute](https://msdn.microsoft.com/library/dd460648.aspx#Imports%20and%20Exports%20with%20Attributes), or through the [IComponentModel service](http://msdn.microsoft.comlibrary/microsoft.visualstudio.componentmodelhost.icomponentmodel.aspx).
-
- //Using the Import attribute
- [Import(typeof(IVsPackageInstaller))]
- public IVsPackageInstaller packageInstaller;
- packageInstaller.InstallPackage("nuget.org", currentProject,
- "Newtonsoft.Json", "9.0.1", false);
-
- //Using the IComponentModel service
- var componentModel = (IComponentModel)GetService(typeof(SComponentModel));
- IVsPackageInstallerServices installerServices =
- componentModel.GetService();
-
- var installedPackages = installerServices.GetInstalledPackages();
-
-
-For reference, the source code for NuGet.VisualStudio is contained within the [NuGet.Clients repository](https://github.com/NuGet/NuGet.Client/tree/dev/src/NuGet.Clients/NuGet.VisualStudio).
-
-## IRegistryKey interface
-
- ///
- /// Specifies methods for manipulating a key in the Windows registry.
- ///
- public interface IRegistryKey
- {
- ///
- /// Retrieves the specified subkey for read or read/write access.
- ///
- /// The name or path of the subkey to create or open.
- /// The subkey requested, or null if the operation failed.
- IRegistryKey OpenSubKey(string name);
-
-
- ///
- /// Retrieves the value associated with the specified name.
- ///
- /// The name of the value to retrieve. This string is not case-sensitive.
- /// The value associated with name, or null if name is not found.
- object GetValue(string name);
-
-
- ///
- /// Closes the key and flushes it to disk if its contents have been modified.
- ///
- void Close();
- }
-
-
-## IVsPackageInstaller interface
-
- public interface IVsPackageInstaller
- {
- ///
- /// Installs a single package from the specified package source.
- ///
- ///
- /// The package source to install the package from. This value can be null
- /// to indicate that the user's configured sources should be used. Otherwise,
- /// this should be the source path as a string. If the user has credentials
- /// configured for a source, this value must exactly match the configured source
- /// value.
- ///
- /// The target project for package installation.
- /// The package ID of the package to install.
- ///
- /// The version of the package to install. null can be provided to
- /// install the latest version of the package.
- ///
- ///
- /// A boolean indicating whether or not to ignore the package's dependencies
- /// during installation.
- ///
- void InstallPackage(string source, Project project, string packageId, Version version, bool ignoreDependencies);
-
- ///
- /// Installs a single package from the specified package source.
- ///
- ///
- /// The package source to install the package from. This value can be null
- /// to indicate that the user's configured sources should be used. Otherwise,
- /// this should be the source path as a string. If the user has credentials
- /// configured for a source, this value must exactly match the configured source
- /// value.
- ///
- /// The target project for package installation.
- /// The package ID of the package to install.
- ///
- /// The version of the package to install. null can be provided to
- /// install the latest version of the package.
- ///
- ///
- /// A boolean indicating whether or not to ignore the package's dependencies
- /// during installation.
- ///
- void InstallPackage(string source, Project project, string packageId, string version, bool ignoreDependencies);
-
- ///
- /// Installs a single package from the specified package source.
- ///
- /// The package repository to install the package from.
- /// The target project for package installation.
- /// The package id of the package to install.
- ///
- /// The version of the package to install. null can be provided to
- /// install the latest version of the package.
- ///
- ///
- /// A boolean indicating whether or not to ignore the package's dependencies
- /// during installation.
- ///
- ///
- /// A boolean indicating if assembly references from the package should be
- /// skipped.
- ///
- void InstallPackage(IPackageRepository repository, Project project, string packageId, string version, bool ignoreDependencies, bool skipAssemblyReferences);
-
- ///
- /// Installs one or more packages that exist on disk in a folder defined in the registry.
- ///
- ///
- /// The registry key name (under NuGet's repository key) that defines the folder on disk
- /// containing the packages.
- ///
- ///
- /// A boolean indicating whether the folder contains packages that are
- /// pre-unzipped.
- ///
- ///
- /// A boolean indicating whether the assembly references from the packages
- /// should be skipped.
- ///
- /// The target project for package installation.
- ///
- /// A dictionary of packages/versions to install where the key is the package id
- /// and the value is the version.
- ///
- ///
- /// If any version of the package is already installed, no action will be taken.
- ///
- /// Dependencies are always ignored.
- ///
- ///
- void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary packageVersions);
-
- ///
- /// Installs one or more packages that exist on disk in a folder defined in the registry.
- ///
- ///
- /// The registry key name (under NuGet's repository key) that defines the folder on disk
- /// containing the packages.
- ///
- ///
- /// A boolean indicating whether the folder contains packages that are
- /// pre-unzipped.
- ///
- ///
- /// A boolean indicating whether the assembly references from the packages
- /// should be skipped.
- ///
- /// A boolean indicating whether the package's dependencies should be ignored
- /// The target project for package installation.
- ///
- /// A dictionary of packages/versions to install where the key is the package id
- /// and the value is the version.
- ///
- ///
- /// If any version of the package is already installed, no action will be taken.
- ///
- void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, bool ignoreDependencies, Project project, IDictionary packageVersions);
-
- ///
- /// Installs one or more packages that are embedded in a Visual Studio Extension Package.
- ///
- /// The Id of the Visual Studio Extension Package.
- ///
- /// A boolean indicating whether the folder contains packages that are
- /// pre-unzipped.
- ///
- ///
- /// A boolean indicating whether the assembly references from the packages
- /// should be skipped.
- ///
- /// The target project for package installation
- ///
- /// A dictionary of packages/versions to install where the key is the package id
- /// and the value is the version.
- ///
- ///
- /// If any version of the package is already installed, no action will be taken.
- ///
- /// Dependencies are always ignored.
- ///
- ///
- void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary packageVersions);
-
- ///
- /// Installs one or more packages that are embedded in a Visual Studio Extension Package.
- ///
- /// The Id of the Visual Studio Extension Package.
- ///
- /// A boolean indicating whether the folder contains packages that are
- /// pre-unzipped.
- ///
- ///
- /// A boolean indicating whether the assembly references from the packages
- /// should be skipped.
- ///
- /// A boolean indicating whether the package's dependencies should be ignored
- /// The target project for package installation
- ///
- /// A dictionary of packages/versions to install where the key is the package id
- /// and the value is the version.
- ///
- ///
- /// If any version of the package is already installed, no action will be taken.
- ///
- void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, bool ignoreDependencies, Project project, IDictionary packageVersions);
- }
-
-
-## IVsPackageInstallerEvents interface
-
- public interface IVsPackageInstallerEvents
- {
- ///
- /// Raised when a package is about to be installed into the current solution.
- ///
- event VsPackageEventHandler PackageInstalling;
-
- ///
- /// Raised after a package has been installed into the current solution.
- ///
- event VsPackageEventHandler PackageInstalled;
-
- ///
- /// Raised when a package is about to be uninstalled from the current solution.
- ///
- event VsPackageEventHandler PackageUninstalling;
-
- ///
- /// Raised after a package has been uninstalled from the current solution.
- ///
- event VsPackageEventHandler PackageUninstalled;
-
- ///
- /// Raised after a package has been installed into a project within the current solution.
- ///
- event VsPackageEventHandler PackageReferenceAdded;
-
- ///
- /// Raised after a package has been uninstalled from a project within the current solution.
- ///
- event VsPackageEventHandler PackageReferenceRemoved;
- }
-
-
-## IVsPackageInstallerServices interface
-
- public interface IVsPackageInstallerServices
- {
- // IMPORTANT: do NOT rearrange the methods here. The order is important to maintain
- // backwards compatibility with clients that were compiled against old versions of NuGet.
-
- ///
- /// Get the list of NuGet packages installed in the current solution.
- ///
- IEnumerable GetInstalledPackages();
-
- ///
- /// Checks if a NuGet package with the specified Id is installed in the specified project.
- ///
- /// The project to check for NuGet package.
- /// The id of the package to check.
- /// true if the package is install. false otherwise.
- bool IsPackageInstalled(Project project, string id);
-
- ///
- /// Checks if a NuGet package with the specified Id and version is installed in the specified project.
- ///
- /// The project to check for NuGet package.
- /// The id of the package to check.
- /// The version of the package to check.
- /// true if the package is install. false otherwise.
- bool IsPackageInstalled(Project project, string id, SemanticVersion version);
-
- ///
- /// Checks if a NuGet package with the specified Id and version is installed in the specified project.
- ///
- /// The project to check for NuGet package.
- /// The id of the package to check.
- /// The version of the package to check.
- /// true if the package is install. false otherwise.
- ///
- /// The reason this method is named IsPackageInstalledEx, instead of IsPackageInstalled, is that
- /// when client project compiles against this assembly, the compiler would attempt to bind against
- /// the other overload which accepts SemanticVersion and would require client project to reference NuGet.Core.
- ///
- bool IsPackageInstalledEx(Project project, string id, string versionString);
-
- ///
- /// Get the list of NuGet packages installed in the specified project.
- ///
- /// The project to get NuGet packages from.
- IEnumerable GetInstalledPackages(Project project);
- }
-
-## IVsPackageManagerProvider interface
-
- public interface IVsPackageManagerProvider
- {
- ///
- /// Localized display package manager name.
- ///
- string PackageManagerName { get; }
-
- ///
- /// Package manager unique id.
- ///
- string PackageManagerId { get; }
-
- ///
- /// The tool tip description for the package
- ///
- string Description { get; }
-
- ///
- /// Check if a recommendation should be surfaced for an alternate package manager.
- /// This code should not rely on slow network calls, and should return rapidly.
- ///
- /// Current package id
- /// Unique project name for finding the project through VS dte
- /// Cancellation Token
- /// return true if need to direct to integrated package manager for this package
- Task CheckForPackageAsync(string packageId, string projectName, CancellationToken token);
-
- ///
- /// This Action should take the user to the other package manager.
- ///
- /// Current package id
- /// Unique project name for finding the project through VS dte
- void GoToPackage(string packageId, string projectName);
- }
-
-## IVsPackageMetadata interface
-
- public interface IVsPackageMetadata
- {
- ///
- /// Id of the package.
- ///
- string Id { get; }
-
- ///
- /// Version of the package.
- ///
- ///
- /// Do not use this property because it will require referencing NuGet.Core.dll assembly. Use the VersionString
- /// property instead.
- ///
- [Obsolete("Do not use this property because it will require referencing NuGet.Core.dll assembly. Use the VersionString property instead.")]
- NuGet.SemanticVersion Version { get; }
-
- ///
- /// Title of the package.
- ///
- string Title { get; }
-
- ///
- /// Description of the package.
- ///
- string Description { get; }
-
- ///
- /// The authors of the package.
- ///
- IEnumerable Authors { get; }
-
- ///
- /// The location where the package is installed on disk.
- ///
- string InstallPath { get; }
-
- // IMPORTANT: This property must come LAST, because it was added in 2.5. Having it declared
- // LAST will avoid breaking components that compiled against earlier versions which doesn't
- // have this property.
- ///
- /// The version of the package.
- ///
- ///
- /// Use this property instead of the Version property becase with the type string,
- /// it doesn't require referencing NuGet.Core.dll assembly.
- ///
- string VersionString { get; }
- }
-
-## IVsPackageRestorer interface
-
- public interface IVsPackageRestorer
- {
- ///
- /// Returns a value indicating whether the user consent to download NuGet packages
- /// has been granted.
- ///
- /// true if the user consent has been granted; otherwise, false.
- bool IsUserConsentGranted();
-
- ///
- /// Restores NuGet packages installed in the given project within the current solution.
- ///
- /// The project whose NuGet packages to restore.
- void RestorePackages(Project project);
- }
-
-## IVsPackageSourceProvider interface
-
- public interface IVsPackageSourceProvider
- {
- ///
- /// Provides the list of package sources.
- ///
- /// Unofficial sources will be included in the results
- /// Disabled sources will be included in the results
- /// Key: source name Value: source URI
- IEnumerable> GetSources(bool includeUnOfficial, bool includeDisabled);
-
- ///
- /// Raised when sources are added, removed, disabled, or modified.
- ///
- event EventHandler SourcesChanged;
- }
-
-## IVsPackageUninstaller interface
-
- public interface IVsPackageUninstaller
- {
- ///
- /// Uninstall the specified package from a project and specify whether to uninstall its dependency packages
- /// too.
- ///
- /// The project from which the package is uninstalled.
- /// The package to be uninstalled
- ///
- /// A boolean to indicate whether the dependency packages should be
- /// uninstalled too.
- ///
- void UninstallPackage(Project project, string packageId, bool removeDependencies);
- }
-
-##IVsTemplateWizard interface
-
- ///
- /// Defines the logic for a template wizard extension.
- ///
-
- public interface IVsTemplateWizard : IWizard
- {
- }
\ No newline at end of file
diff --git a/docs/Visual-Studio-Extensibility/Project-System-Support.md b/docs/Visual-Studio-Extensibility/Project-System-Support.md
deleted file mode 100644
index b24fc5c81..000000000
--- a/docs/Visual-Studio-Extensibility/Project-System-Support.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# NuGet support for the Visual Studio project system
-
-To support third-party project types in Visual Studio, NuGet 3.x+ supports the [Common Project System (CPS)](https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/intro.md), and NuGet 3.2+ supports non-CPS project systems as well.
-
-To integrate with NuGet, a project system must advertise its own support for all the project capabilities described in this topic.
-
-
- Note
- Do not declare capabilities that your project does not actually have for the sake of enabling packages to install in your project. Many features of Visual Studio and other extensions depend on project capabilities besides the NuGet client. Falsely advertising capabilities of your project can lead these components to malfunction and your users' experience to degrade.
-
-
-## Advertise project capabilities
-
-The NuGet client determines which packages are compatible with your project type based on the [project's capabilities](https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/about_project_capabilities.md), as described in the following table.
-
-
-
-
Capability
-
Description
-
-
-
AssemblyReferences
-
Indicates that the project supports assembly references (distinct from WinRTReferences).
-
-
-
DeclaredSourceItems
-
Indicates that the project is a typical MSBuild project (not DNX) in that it declares source items in the project itself (rather than a project.json file that assumes all files in the directory are part of a compilation).
-
-
-
UserSourceItems
-
Indicates that the user is allowed to add arbitrary files to their project.
-
-
-
-
-For CPS-based project systems, the implementation details for project capabilities described in the rest of this section have been done for you. See [declaring project capabilities in CPS projects](https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/about_project_capabilities.md#how-to-declare-project-capabilities-in-your-project).
-
-## Implementing VsProjectCapabilitiesPresenceChecker
-
-The `VsProjectCapabilitiesPresenceChecker` class must implement the `IVsBooleanSymbolPresenceChecker` interface, which is defined as follows:
-
- public interface IVsBooleanSymbolPresenceChecker
- {
- ///
- /// Checks whether the symbols defined may have changed since the last time
- /// this method was called.
- ///
- ///
- /// The response version object assigned at the last call.
- /// May be null to get the initial version.
- /// At the conclusion of this method call, the reference may be changed so that on a subsequent call
- /// we know what version was last observed. The caller should treat this value as an opaque object,
- /// and should not assume any significance from whether the pointer changed or not.
- ///
- ///
- /// true if the symbols defined may have changed since the last call to this method
- /// or if was null upon entering this method.
- /// false if the responses would all be the same.
- ///
- bool HasChangedSince(ref object versionObject);
-
- ///
- /// Checks for the presence of a given symbol.
- ///
- /// The symbol to check for.
- /// true if the symbol is present; false otherwise.
- bool IsSymbolPresent(string symbol);
- }
-
-
-A sample implementation of this interface would then be:
-
-
- class VsProjectCapabilitiesPresenceChecker : IVsBooleanSymbolPresenceChecker
- {
- ///
- /// The set of capabilities this project system actually has.
- /// This should be kept current, and honestly reflect what the project can do.
- ///
- private static readonly HashSet ActualProjectCapabilities = new HashSet(StringComparer.OrdinalIgnoreCase)
- {
- "AssemblyReferences",
- "DeclaredSourceItems",
- "UserSourceItems",
- };
-
- public bool HasChangedSince(ref object versionObject)
- {
- // If your project capabilities do not change over time while the project is open,
- // you may simply `return false;` from your `HasChangedSince` method.
- return false;
- }
-
- public bool IsSymbolPresent(string symbol)
- {
- return ActualProjectCapabilities.Contains(symbol);
- }
- }
-
-Remember to add/remove capabilities from the `ActualProjectCapabilities` set based on what your project system actually supports. See the [project capabilities documentation](https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/project_capabilities.md) for full descriptions.
-
-## Responding to queries
-
-A project declares this capability by supporting the `VSHPROPID_ProjectCapabilitiesChecker` property through the `IVsHierarchy::GetProperty`. It should return an instance of
-`Microsoft.VisualStudio.Shell.Interop.IVsBooleanSymbolPresenceChecker`, which is defined in the `Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime.dll` assembly. Reference this assembly by installing the [its NuGet package](https://www.nuget.org/packages/Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime).
-
-For example, you might add the following `case` statement to your `IVsHierarchy::GetProperty` method's `switch` statement:
-
- case __VSHPROPID8.VSHPROPID_ProjectCapabilitiesChecker:
- propVal = new VsProjectCapabilitiesPresenceChecker();
- return VSConstants.S_OK;
-
-
-## DTE Support
-
-NuGet drives the project system to add references, content items, and MSBuild imports by calling into [DTE](https://msdn.microsoft.com/library/mt452175.aspx), which is the top-level Visual Studio automation interface. DTE is is a set of COM interfaces that you may already implement.
-
-If your project type is based on CPS, DTE is implemented for you.
diff --git a/docs/Visual-Studio-Extensibility/Visual-Studio-Templates.md b/docs/Visual-Studio-Extensibility/Visual-Studio-Templates.md
deleted file mode 100644
index e6cbf0654..000000000
--- a/docs/Visual-Studio-Extensibility/Visual-Studio-Templates.md
+++ /dev/null
@@ -1,147 +0,0 @@
-# Packages in Visual Studio templates
-
-Visual Studio project and item templates often need to ensure that certain packages are installed into when the project or item is created. For example, the ASP.NET MVC 3 template installs jQuery, Modernizr, and other packages.
-
-To support this, template authors can instruct NuGet to install the necessary packages, rather than individual libraries. Developers can then easily update those packages at any later time.
-
-To learn more about authoring templates themselves, refer to [Creating Project and Item Templates in Visual Studio](https://msdn.microsoft.com/library/s365byhx.aspx) pr [Creating Custom Project and Item Templates with the Visual Studio SDK](https://msdn.microsoft.com/library/ff527340.aspx).
-
-The remainder of this section describes the specific steps to take when authoring a template to properly include NuGet packages.
-
-- [Adding packages to a template](#adding-packages-to-a-template)
-- [Best practices](#best-practices)
-
-For an example, see the [NuGetInVsTemplates sample](https://bitbucket.org/marcind/nugetinvstemplates).
-
-
-## Adding packages to a template
-
-When a template is instantiated, a [template wizard](https://msdn.microsoft.com/library/ms185301.aspx) is invoked to load the list of packages to install along with information about where to find those packages. Packages can be embedded in the VSIX, embedded in the template, or located on the local hard drive in which case you use a registry key to reference the file path. Details on these locations are given later in this section.
-
-Preinstalled packages work using [template wizards](http://msdn.microsoft.com/en-us/library/ms185301.aspx). A special wizard gets invoked when the template gets instantiated. The wizard loads the list of packages that need to be installed and passes that information to the appropriate NuGet APIs.
-
-Steps to include packages in a template:
-
-1. In your `vstemplate` file, add a reference to the NuGet template wizard by
-adding a [`WizardExtension`](http://msdn.microsoft.com/library/ms171411.aspx) element:
-
-
- <WizardExtension>
- <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
- <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
- </WizardExtension>
-
-
- `NuGet.VisualStudio.Interop.dll` is an assembly that contains only the `TemplateWizard` class, which is a simple wrapper that calls into the actual implementation in `NuGet.VisualStudio.dll`. The assembly version will never change so that project/item templates continue to work with new versions of NuGet.
-
-2. Add the list of packages to install in the project:
-
-
- <WizardData>
- <packages>
- <package id="jQuery" version="1.6.2" />
- </packages>
- </WizardData>
-
-
- *(NuGet 2.2.1+)* The wizard supports multiple <package> elements to support multiple package sources. Both the `id` and `version` attributes are required, meaning that specific version of a package will be installed even if a newer version is available. This prevents package updates from breaking the template, leaving the choice to update the package to the developer using the template.
-
-
-3. Specify the repository where NuGet can find the packages as described in the following sections.
-
-### VSIX package repository
-
-The recommended deployment approach for Visual Studio project/item templates is a [VSIX extension](http://msdn.microsoft.com/library/ff363239.aspx) because it allows you to package multiple project/item templates together and allows developers to easily discover your templates using the VS Extension Manager or the Visual Studio Gallery. Updates to the extension are also easy to deploy using the [Visual Studio Extension Manager automatic update mechanism](http://msdn.microsoft.com/library/dd997169.aspx).
-
-The VSIX itself can serve as the source for packages required by the template:
-
-1. Modify the `` element in the `.vstemplate` file as follows:
-
-
- <packages repository="extension"
- repositoryId="MyTemplateContainerExtensionId">
-
- <!-- ... -->
- </packages>
-
-
- The `repository` attribute specifies the type of repository as `extension` while `repositoryId` is the unique identifier of the VSIX itself (This is the value of the [`ID` attribute](http://msdn.microsoft.com/library/dd393688.aspx) in the extension’s `vsixmanifest` file).
-
-2. Place your `nupkg` files in a folder called `Packages` within the VSIX.
-3. Add the necessary package files as [custom extension content](http://msdn.microsoft.com/library/dd393737.aspx) in your `source.extension.vsixmanifest` file. If you're using the 2.0 schema it should look like this:
-
-
- <Asset Type="Moq.4.0.10827.nupkg" d:Source="File"
- Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />
-
-
- If you're using the 1.0 schema it should look like this:
-
- <CustomExtension Type="Moq.4.0.10827.nupkg">
- packages/Moq.4.0.10827.nupkg</CustomExtension>
-
-
-
-4. Note that you can deliver packages in the same VSIX as your project templates or you can put them in a separate VSIX if that makes more sense for your scenario. However, do not reference any VSIX over which you do not have control, because changes to that extension could break your template.
-
-
-### Template package repository
-
-If you are distributing only a single project/item template and do not need to package multiple templates together, you can use a simpler but more limited approach that includes packages directly in the project/item template ZIP file:
-
-1. Modify the `` element in the `.vstemplate` file as follows:
-
-
- <packages repository="template"">
- <!-- ... -->
- </packages>
-
-
- The `repository` attribute has the value `template` and the `repositoryId` attribute is not required.
-
-2. Place packages in the root folder of the project/item template ZIP file.
-
-Note that using this approach in a VSIX that contains multiple templates leads to unnecessary bloat when one or more packages are common to the templates. In such cases, use the [VSIX as the repository](#vsix-package-repository) as described in the previous section.
-
-
-### Registry-specified folder path
-
-SDKs that are installed using an MSI can install NuGet packages directly on the developer's machine. This makes them immediately available when a project or item template is used, rather than having to extract them during that time. ASP.NET templates use this approach.
-
-1. Have the MSI install packages to the machine. You can install only the `.nupkg` files, or you can install those along with the expanded contents, which saves an additional step when the template is used. In this case, follow NuGet's standard folder structure whereing the `.nupkg` files are in the root folder, and then each package has a subfolder with the id/version pair as the subfolder name.
-
-2. Write a registry key to identify the package location:
-
- - Key location: `HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository`
- - Key name: use a name that's unique to you. For example, the ASP.NET MVC 4 templates for VS 2012 use `AspNetMvc4VS11`.
- - Values: the full path to the packages folder.
-
-3. In the `` element in the `.vstemplate` file, add the attribute `repository="registry"` and specify your registry key name in the `keyName` attribute.
-
- - If you have pre-unzipped your packages, use the `isPreunzipped="true"` attribute.
- - *(NuGet 3.2+)* If you want to force a design-time build at the end of package installation, add the `forceDesignTimeBuild="true"` attribute.
- - As an optimization, add `skipAssemblyReferences="true"` because the template itself already includes the necessary references.
-
-
- <packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true">
- <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" />
- <-- ... -->
- </packages>
-
-
-
-## Best Practices
-
-1. Declare a dependency on the NuGet VSIX by adding a reference to it in your VSIX manifest:
-
- <Reference Id="NuPackToolsVsix.Microsoft.67e54e40-0ae3-42c5-a949-fddf5739e7a5" MinVersion="1.7.30402.9028">
- <Name>NuGet Package Manager</Name>
- <MoreInfoUrl>http://docs.nuget.org/</MoreInfoUrl>
- </Reference>
- <-- ... -->
-
-
-2. Require project/item templates to be saved on creation by setting [``](http://msdn.microsoft.com/library/twfxayz5.aspx) in the `.vstemplate` file.
-
-3. Templates do not include a `packages.config` or `project.json` file, and do not include or any references or content that would be added when NuGet packages are installed.
-
diff --git a/docs/Visual-Studio-Extensibility/_metadata b/docs/Visual-Studio-Extensibility/_metadata
deleted file mode 100644
index de71d784c..000000000
--- a/docs/Visual-Studio-Extensibility/_metadata
+++ /dev/null
@@ -1,3 +0,0 @@
-NuGet-API-in-Visual-Studio
-Project-System-Support
-Visual-Studio-Templates
\ No newline at end of file
diff --git a/docs/_breadcrumb/toc.yml b/docs/_breadcrumb/toc.yml
new file mode 100644
index 000000000..b7cc5248c
--- /dev/null
+++ b/docs/_breadcrumb/toc.yml
@@ -0,0 +1,50 @@
+- name: Docs
+ tocHref: /
+ topicHref: /
+ items:
+ - name: NuGet
+ tocHref: /nuget/
+ topicHref: /nuget
+ items:
+ - name: Get started
+ tocHref: /nuget/quickstart/
+ topicHref: /nuget/quickstart/install-and-use-a-package-using-the-dotnet-cli
+ - name: Consume packages
+ tocHref: /nuget/consume-packages/
+ topicHref: /nuget/consume-packages/overview-and-workflow
+ - name: Create packages
+ tocHref: /nuget/create-packages/
+ topicHref: /nuget/create-packages/overview-and-workflow
+ - name: Guides
+ tocHref: /nuget/guides/
+ topicHref: /nuget/guides/create-net-standard-packages-vs2017
+ - name: Concepts
+ tocHref: /nuget/concepts/
+ topicHref: /nuget/concepts/package-installation-process
+ - name: Reference
+ tocHref: /nuget/reference/
+ topicHref: /nuget/reference/nuspec
+ - name: API
+ tocHref: /nuget/api/
+ topicHref: /nuget/api/overview
+ - name: Extensibility
+ tocHref: /nuget/reference/extensibility
+ topicHref: /nuget/reference/extensibility/nuget-cross-platform-plugins
+ - name: Visual Studio extensibility
+ tocHref: /nuget/visual-studio-extensibility/
+ topicHref: /nuget/visual-studio-extensibility/nuget-api-in-visual-studio
+ - name: Publish
+ tocHref: /nuget/hosting-packages/
+ topicHref: /nuget/hosting-packages/overview
+ - name: Policies
+ tocHref: /nuget/policies/
+ topicHref: /nuget/policies/governance
+ - name: Release notes
+ tocHref: /nuget/release-notes/
+ topicHref: /nuget/release-notes/known-issues
+ - name: Resources
+ tocHref: /nuget/resources/
+ topicHref: /nuget/resources/nuget-faq
+ - name: NuGet.org
+ tocHref: /nuget/nuget-org/
+ topicHref: /nuget/nuget-org/organizations-on-nuget-org
diff --git a/docs/api/NuGet-Protocols.md b/docs/api/NuGet-Protocols.md
new file mode 100644
index 000000000..ab00ae0cd
--- /dev/null
+++ b/docs/api/NuGet-Protocols.md
@@ -0,0 +1,103 @@
+---
+title: nuget.org Protocols
+description: The evolving nuget.org protocols to interact with NuGet clients.
+author: anangaur
+ms.author: anangaur
+ms.date: 01/21/2021
+ms.topic: article
+ms.reviewer: kraigb
+---
+
+# nuget.org protocols
+
+To interact with nuget.org, clients need to follow certain protocols. Because these protocols keep evolving, clients
+must identify the protocol version they use when calling specific nuget.org APIs. This allows nuget.org to introduce
+changes in a non-breaking way for the old clients.
+
+> [!Note]
+> The APIs documented on this page are specific to nuget.org and there is no expectation for other NuGet server
+> implementations to introduce these APIs.
+
+For information about the NuGet API implemented broadly across the NuGet ecosystem, see the
+[API overview](overview.md).
+
+This topic lists various protocols as and when they come to existence.
+
+## NuGet protocol version 4.1.0
+
+The 4.1.0 protocol specifies usage of verify-scope keys to interact with services other than nuget.org, to validate a
+package against a nuget.org account. Note that the `4.1.0` version number is an opaque string but happens to coincide
+with the first version of the official NuGet client that supported this protocol.
+
+Validation ensures that the user-created API keys are used only with nuget.org, and that other verification or
+validation from a third-party service is handled through a one-time use verify-scope keys. These verify-scope keys can
+be used to validate that the package belongs to a particular user (account) on nuget.org.
+
+### Client requirement
+
+Clients are required to pass the following header when they make API calls to **push** packages to nuget.org:
+
+```
+X-NuGet-Protocol-Version: 4.1.0
+```
+
+Note that the `X-NuGet-Client-Version` header has similar semantics but is reserved to only be used by the official
+NuGet client. Third party clients should use the `X-NuGet-Protocol-Version` header and value.
+
+The **push** protocol itself is described in the documentation for the
+[`PackagePublish` resource](package-publish-resource.md).
+
+If a client interacts with external services and needs to validate whether a package belongs to a particular user
+(account), it should use the following protocol and use the verify-scope keys and not the API keys from nuget.org.
+
+### API to request a verify-scope key
+
+This API is used to get a verify-scope key for a nuget.org author to validate a package owned by him/her.
+
+```
+POST api/v2/package/create-verification-key/{ID}/{VERSION}
+```
+
+#### Request parameters
+
+Name | In | Type | Required | Notes
+-------------- | ------ | ------ | -------- | -----
+ID | URL | string | yes | The package identidier for which the verify scope key is requested
+VERSION | URL | string | no | The package version
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {USER_API_KEY}`
+
+#### Response
+
+```json
+{
+ "Key": "{Verify scope key from nuget.org}",
+ "Expires": "{Date}"
+}
+```
+
+### API to verify the verify scope key
+
+This API is used to validate a verify-scope key for package owned by the nuget.org author.
+
+```
+GET api/v2/verifykey/{ID}/{VERSION}
+```
+
+#### Request parameters
+
+Name | In | Type | Required | Notes
+------------- | ------ | ------ | -------- | -----
+ID | URL | string | yes | The package identifier for which the verify scope key is requested
+VERSION | URL | string | no | The package version
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {VERIFY_SCOPE_KEY}`
+
+> [!Note]
+> This verify scope API key expires in a day's time or on first use, whichever occurs first.
+
+#### Response
+
+Status Code | Meaning
+----------- | -------
+200 | The API key is valid
+403 | The API key is invalid or not authorized to push against the package
+404 | The package referred to by `ID` and `VERSION` (optional) does not exist
diff --git a/docs/api/_data/autocomplete-id-result.json b/docs/api/_data/autocomplete-id-result.json
new file mode 100644
index 000000000..d13ddb8d9
--- /dev/null
+++ b/docs/api/_data/autocomplete-id-result.json
@@ -0,0 +1,25 @@
+{
+ "totalHits": 571,
+ "data": [
+ "WindowsAzure.Storage",
+ "Storage.Net",
+ "CK.Storage",
+ "NCL.Storage",
+ "DK.Storage",
+ "Nine.Storage.Test",
+ "Touch.Storage.Aws",
+ "StorageAPIClient",
+ "StorageAccess",
+ "Storage.Net.Microsoft.Azure.Storage",
+ "UnofficialAzure.StorageClient",
+ "StorageAccess12",
+ "AWSSDK.StorageGateway",
+ "StorageExtensions",
+ "Cloud.Storage",
+ "lighthouse.storage",
+ "ZU.Storage.Redis",
+ "Magicodes.Storage",
+ "Masticore.Storage",
+ "hq.storage"
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/autocomplete-version-result.json b/docs/api/_data/autocomplete-version-result.json
new file mode 100644
index 000000000..4663a254d
--- /dev/null
+++ b/docs/api/_data/autocomplete-version-result.json
@@ -0,0 +1,10 @@
+{
+ "data": [
+ "4.3.0-preview3-4168",
+ "4.3.0-preview4",
+ "4.3.0-rtm-4324",
+ "4.3.0",
+ "4.4.0-preview3-4475",
+ "4.4.0"
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/catalog-index.json b/docs/api/_data/catalog-index.json
new file mode 100644
index 000000000..2eab700eb
--- /dev/null
+++ b/docs/api/_data/catalog-index.json
@@ -0,0 +1,25 @@
+{
+ "commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
+ "commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
+ "count": 3,
+ "items": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/page0.json",
+ "commitId": "3a4df280-3d86-458e-a713-4c91ca261fef",
+ "commitTimeStamp": "2015-02-01T06:30:11.7477681Z",
+ "count": 540
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/page1.json",
+ "commitId": "8bcd3cbf-74f0-47a2-a7ae-b7ecc50005d3",
+ "commitTimeStamp": "2015-02-01T06:39:53.9553899Z",
+ "count": 540
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/page2.json",
+ "commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
+ "commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
+ "count": 47
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/catalog-package-delete.json b/docs/api/_data/catalog-package-delete.json
new file mode 100644
index 000000000..9addb5b05
--- /dev/null
+++ b/docs/api/_data/catalog-package-delete.json
@@ -0,0 +1,12 @@
+{
+ "@type": [
+ "PackageDelete",
+ "catalog:Permalink"
+ ],
+ "catalog:commitId": "19fec5b4-9335-4e4b-bd50-8d5d3f734597",
+ "catalog:commitTimeStamp": "2017-11-02T00:40:00.1969812Z",
+ "id": "netstandard1.4_lib",
+ "originalId": "netstandard1.4_lib",
+ "published": "2017-11-02T00:37:43.7181952Z",
+ "version": "1.0.0-test"
+}
\ No newline at end of file
diff --git a/docs/api/_data/catalog-package-details.json b/docs/api/_data/catalog-package-details.json
new file mode 100644
index 000000000..f5cdc865e
--- /dev/null
+++ b/docs/api/_data/catalog-package-details.json
@@ -0,0 +1,84 @@
+{
+ "@type": [
+ "PackageDetails",
+ "catalog:Permalink"
+ ],
+ "authors": "NuGet.org Team",
+ "catalog:commitId": "49fe04d8-5694-45a5-9822-3be61bda871b",
+ "catalog:commitTimeStamp": "2015-02-01T11:18:40.8589193Z",
+ "created": "2011-12-02T20:21:23.74Z",
+ "description": "This package is an example for the V3 protocol.",
+ "deprecation": {
+ "reasons": [
+ "Legacy",
+ "HasCriticalBugs",
+ "Other"
+ ],
+ "message": "This package is an example--it should not be used!",
+ "alternatePackage": {
+ "id": "Newtonsoft.JSON",
+ "range": "12.0.2"
+ }
+ },
+ "iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
+ "id": "NuGet.Protocol.V3.Example",
+ "isPrerelease": false,
+ "language": "en-US",
+ "licenseUrl": "http://www.opensource.org/licenses/ms-pl",
+ "packageHash": "2edCwKLcbcgFJpsAwa883BLtOy8bZpWwbQpiIb71E74k5t2f2WzXEGWbPwntRleUEgSrcxJrh9Orm/TAmgO4NQ==",
+ "packageHashAlgorithm": "SHA512",
+ "packageSize": 118348,
+ "packageTypes": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#packagetypes/DotnetTool",
+ "@type": "PackageType",
+ "name": "DotnetTool"
+ }
+ ],
+ "projectUrl": "https://github.com/NuGet/NuGetGallery",
+ "published": "1900-01-01T00:00:00Z",
+ "requireLicenseAcceptance": false,
+ "title": "NuGet V3 Protocol Example",
+ "version": "1.0.0",
+ "dependencyGroups": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup",
+ "@type": "PackageDependencyGroup",
+ "dependencies": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/aspnet.suppressformsredirect",
+ "@type": "PackageDependency",
+ "id": "aspnet.suppressformsredirect",
+ "range": "[0.0.1.4, )"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webactivator",
+ "@type": "PackageDependency",
+ "id": "WebActivator",
+ "range": "[1.4.4, )"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webapi.all",
+ "@type": "PackageDependency",
+ "id": "WebApi.All",
+ "range": "[0.5.0, )"
+ }
+ ],
+ "targetFramework": ".NETFramework4.6"
+ }
+ ],
+ "tags": [
+ "NuGet",
+ "V3",
+ "Protocol",
+ "Example"
+ ],
+ "vulnerabilities": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#vulnerability/GitHub/999",
+ "@type": "Vulnerability",
+ "advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
+ "severity": "2"
+ }
+ ]
+}
diff --git a/docs/api/_data/catalog-page.json b/docs/api/_data/catalog-page.json
new file mode 100644
index 000000000..9f0b9a048
--- /dev/null
+++ b/docs/api/_data/catalog-page.json
@@ -0,0 +1,48 @@
+{
+ "commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
+ "commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
+ "count": 5,
+ "parent": "https://api.nuget.org/v3/catalog0/index.json",
+ "items": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.30.32/util.biz.payments.0.0.4-preview.json",
+ "@type": "nuget:PackageDetails",
+ "commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
+ "commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
+ "nuget:id": "Util.Biz.Payments",
+ "nuget:version": "0.0.4-preview"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.28.02/util.biz.0.0.4-preview.json",
+ "@type": "nuget:PackageDetails",
+ "commitId": "820340b2-97e3-4f93-b82e-bc85550a6560",
+ "commitTimeStamp": "2017-10-31T23:28:02.788239Z",
+ "nuget:id": "Util.Biz",
+ "nuget:version": "0.0.4-preview"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.data.1.0.0-preview1-00258.json",
+ "@type": "nuget:PackageDetails",
+ "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
+ "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
+ "nuget:id": "SourceCode.Clay.Data",
+ "nuget:version": "1.0.0-preview1-00258"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.1.0.0-preview1-00258.json",
+ "@type": "nuget:PackageDetails",
+ "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
+ "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
+ "nuget:id": "SourceCode.Clay",
+ "nuget:version": "1.0.0-preview1-00258"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.json.1.0.0-preview1-00258.json",
+ "@type": "nuget:PackageDetails",
+ "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
+ "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
+ "nuget:id": "SourceCode.Clay.Json",
+ "nuget:version": "1.0.0-preview1-00258"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/newtonsoft.json.6.0.4.xml b/docs/api/_data/newtonsoft.json.6.0.4.xml
new file mode 100644
index 000000000..4f361ab9c
--- /dev/null
+++ b/docs/api/_data/newtonsoft.json.6.0.4.xml
@@ -0,0 +1,16 @@
+
+
+
+ Newtonsoft.Json
+ 6.0.4
+ Json.NET
+ James Newton-King
+ James Newton-King
+ https://raw.github.com/JamesNK/Newtonsoft.Json/master/LICENSE.md
+ http://james.newtonking.com/json
+ false
+ Json.NET is a popular high-performance JSON framework for .NET
+ en-US
+ json
+
+
\ No newline at end of file
diff --git a/docs/api/_data/package-base-address-index.json b/docs/api/_data/package-base-address-index.json
new file mode 100644
index 000000000..2a7014b23
--- /dev/null
+++ b/docs/api/_data/package-base-address-index.json
@@ -0,0 +1,10 @@
+{
+ "versions": [
+ "0.5.0",
+ "0.7.0",
+ "0.11.0",
+ "0.12.0",
+ "0.14.0",
+ "1.0.0"
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/package-registration-index.json b/docs/api/_data/package-registration-index.json
new file mode 100644
index 000000000..641dfcfa1
--- /dev/null
+++ b/docs/api/_data/package-registration-index.json
@@ -0,0 +1,56 @@
+{
+ "count": 1,
+ "items": [
+ {
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json#page/3.0.0-beta/3.0.0-beta",
+ "count": 1,
+ "items": [
+ {
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/3.0.0-beta.json",
+ "catalogEntry": {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json",
+ "authors": ".NET Foundation",
+ "dependencyGroups": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup",
+ "dependencies": [
+ {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup/nuget.core",
+ "id": "NuGet.Core",
+ "range": "[2.14.0, )",
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.core/index.json"
+ }
+ ]
+ }
+ ],
+ "description": "Core library for creating a Web Application used to host a simple NuGet feed",
+ "iconUrl": "",
+ "id": "NuGet.Server.Core",
+ "language": "",
+ "licenseUrl": "https://raw.githubusercontent.com/NuGet/NuGet.Server/dev/LICENSE.txt",
+ "listed": true,
+ "minClientVersion": "2.6",
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
+ "projectUrl": "https://github.com/NuGet/NuGet.Server",
+ "published": "2017-10-05T18:40:32.43+00:00",
+ "requireLicenseAcceptance": false,
+ "summary": "",
+ "tags": [ "" ],
+ "title": "",
+ "version": "3.0.0-beta",
+ "vulnerabilities": [
+ {
+ "advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
+ "severity": "2"
+ }
+ ]
+ },
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json"
+ }
+ ],
+ "lower": "3.0.0-beta",
+ "upper": "3.0.0-beta"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/package-registration-leaf.json b/docs/api/_data/package-registration-leaf.json
new file mode 100644
index 000000000..ebcc2d92e
--- /dev/null
+++ b/docs/api/_data/package-registration-leaf.json
@@ -0,0 +1,8 @@
+{
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json",
+ "catalogEntry": "https://api.nuget.org/v3/catalog0/data/2017.08.11.18.24.22/nuget.versioning.4.3.0.json",
+ "listed": true,
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.versioning/4.3.0/nuget.versioning.4.3.0.nupkg",
+ "published": "2017-08-11T18:24:14.36+00:00",
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.versioning/index.json"
+}
\ No newline at end of file
diff --git a/docs/api/_data/package-registration-page.json b/docs/api/_data/package-registration-page.json
new file mode 100644
index 000000000..3ca362518
--- /dev/null
+++ b/docs/api/_data/package-registration-page.json
@@ -0,0 +1,65 @@
+{
+ "count": 2,
+ "lower": "1.0.531",
+ "parent": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json",
+ "upper": "1.0.729-unstable",
+ "items": [
+ {
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.531.json",
+ "@type": "Package",
+ "commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
+ "commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
+ "catalogEntry": {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.38.37/nuget.protocol.v3.example.1.0.531.json",
+ "@type": "PackageDetails",
+ "authors": "NuGet.org Team",
+ "iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
+ "id": "NuGet.Protocol.V3.Example",
+ "licenseUrl": "http://www.opensource.org/licenses/ms-pl",
+ "listed": false,
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
+ "projectUrl": "https://github.com/NuGet/NuGetGallery",
+ "published": "1900-01-01T00:00:00+00:00",
+ "requireLicenseAcceptance": true,
+ "title": "NuGet V3 Protocol Example",
+ "version": "1.0.531"
+ },
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.729-unstable.json",
+ "@type": "Package",
+ "commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
+ "commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
+ "catalogEntry": {
+ "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.18.22.05/nuget.protocol.v3.example.1.0.729-unstable.json",
+ "@type": "PackageDetails",
+ "authors": "NuGet.org Team",
+ "deprecation": {
+ "reasons": [
+ "CriticalBugs"
+ ],
+ "message": "This package is unstable and broken!",
+ "alternatePackage": {
+ "id": "Newtonsoft.JSON",
+ "range": "12.0.2"
+ }
+ },
+ "iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
+ "id": "NuGet.Protocol.V3.Example",
+ "licenseUrl": "http://www.opensource.org/licenses/ms-pl",
+ "listed": false,
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
+ "projectUrl": "https://github.com/NuGet/NuGetGallery",
+ "published": "1900-01-01T00:00:00+00:00",
+ "requireLicenseAcceptance": true,
+ "summary": "This package is an example for the V3 protocol.",
+ "title": "NuGet V3 Protocol Example",
+ "version": "1.0.729-Unstable"
+ },
+ "packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
+ }
+ ]
+}
diff --git a/docs/api/_data/repository-signatures-index.json b/docs/api/_data/repository-signatures-index.json
new file mode 100644
index 000000000..b80fc8d76
--- /dev/null
+++ b/docs/api/_data/repository-signatures-index.json
@@ -0,0 +1,35 @@
+{
+ "allRepositorySigned": true,
+ "signingCertificates": [
+ {
+ "fingerprints": {
+ "2.16.840.1.101.3.4.2.1": "0e5f38f57dc1bcc806d8494f4f90fbcedd988b46760709cbeec6f4219aa6157d"
+ },
+ "subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
+ "issuer": "CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US",
+ "notBefore": "2018-04-10T00:00:00.0000000Z",
+ "notAfter": "2021-04-14T12:00:00.0000000Z",
+ "contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/0e5f38f57dc1bcc806d8494f4f90fbcedd988b46760709cbeec6f4219aa6157d.crt"
+ },
+ {
+ "fingerprints": {
+ "2.16.840.1.101.3.4.2.1": "5a2901d6ada3d18260b9c6dfe2133c95d74b9eef6ae0e5dc334c8454d1477df4"
+ },
+ "subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
+ "issuer": "CN=DigiCert SHA2 Assured ID Code Signing CA, OU=www.digicert.com, O=DigiCert Inc, C=US",
+ "notBefore": "2021-02-16T00:00:00.0000000Z",
+ "notAfter": "2024-05-15T23:59:59.0000000Z",
+ "contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/5a2901d6ada3d18260b9c6dfe2133c95d74b9eef6ae0e5dc334c8454d1477df4.crt"
+ },
+ {
+ "fingerprints": {
+ "2.16.840.1.101.3.4.2.1": "1f4b311d9acc115c8dc8018b5a49e00fce6da8e2855f9f014ca6f34570bc482d"
+ },
+ "subject": "CN=NuGet.org Repository by Microsoft, O=NuGet.org Repository by Microsoft, L=Redmond, S=Washington, C=US",
+ "issuer": "CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1, O=\"DigiCert, Inc.\", C=US",
+ "notBefore": "2024-02-23T00:00:00.0000000Z",
+ "notAfter": "2027-05-18T23:59:59.0000000Z",
+ "contentUrl": "https://api.nuget.org/v3-index/repository-signatures/certificates/1f4b311d9acc115c8dc8018b5a49e00fce6da8e2855f9f014ca6f34570bc482d.crt"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/search-result.json b/docs/api/_data/search-result.json
new file mode 100644
index 000000000..b58fbdaa4
--- /dev/null
+++ b/docs/api/_data/search-result.json
@@ -0,0 +1,73 @@
+{
+ "totalHits": 2,
+ "data": [
+ {
+ "registration": "https://api.nuget.org/v3/registration-sample/nuget.versioning/index.json",
+ "id": "NuGet.Versioning",
+ "version": "4.4.0",
+ "description": "NuGet's implementation of Semantic Versioning.",
+ "summary": "",
+ "title": "NuGet.Versioning",
+ "licenseUrl": "https://raw.githubusercontent.com/NuGet/NuGet.Client/dev/LICENSE.txt",
+ "tags": [ "semver", "semantic", "versioning" ],
+ "authors": [ "NuGet" ],
+ "totalDownloads": 141896,
+ "verified": true,
+ "packageTypes": [
+ {
+ "name": "Dependency"
+ }
+ ],
+ "versions": [
+ {
+ "version": "3.3.0",
+ "downloads": 50343,
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/3.3.0.json"
+ },
+ {
+ "version": "3.4.3",
+ "downloads": 27932,
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/3.4.3.json"
+ },
+ {
+ "version": "4.0.0",
+ "downloads": 63004,
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/4.0.0.json"
+ },
+ {
+ "version": "4.4.0",
+ "downloads": 617,
+ "@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/4.4.0.json"
+ }
+ ]
+ },
+ {
+ "@id": "https://api.nuget.org/v3/registration-sample/nerdbank.gitversioning/index.json",
+ "@type": "Package",
+ "registration": "https://api.nuget.org/v3/registration-sample/nerdbank.gitversioning/index.json",
+ "id": "Nerdbank.GitVersioning",
+ "version": "2.0.41",
+ "description": "Stamps your assemblies with semver 2.0 compliant git commit specific version information and provides NuGet versioning information as well.",
+ "summary": "Stamps your assemblies with semver 2.0 compliant git commit specific version information and provides NuGet versioning information as well.",
+ "title": "Nerdbank.GitVersioning",
+ "licenseUrl": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/ed547462f7/LICENSE.txt",
+ "projectUrl": "http://github.com/aarnott/Nerdbank.GitVersioning",
+ "tags": [ "git", "commit", "versioning", "version", "assemblyinfo" ],
+ "authors": [ "Andrew Arnott" ],
+ "totalDownloads": 11906,
+ "verified": false,
+ "versions": [
+ {
+ "version": "1.6.35",
+ "downloads": 10229,
+ "@id": "https://api.nuget.org/v3/registration-sample/nerdbank.gitversioning/1.6.35.json"
+ },
+ {
+ "version": "2.0.41",
+ "downloads": 1677,
+ "@id": "https://api.nuget.org/v3/registration-sample/nerdbank.gitversioning/2.0.41.json"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/service-index.json b/docs/api/_data/service-index.json
new file mode 100644
index 000000000..c7a8444ae
--- /dev/null
+++ b/docs/api/_data/service-index.json
@@ -0,0 +1,29 @@
+{
+ "version": "3.0.0",
+ "resources": [
+ {
+ "@id": "https://api.nuget.org/v3-flatcontainer/",
+ "@type": "PackageBaseAddress/3.0.0",
+ "comment": "Base URL of Azure storage where NuGet package registration info for NET Core is stored, in the format https://api.nuget.org/v3-flatcontainer/{id-lower}/{id-lower}.{version-lower}.nupkg"
+ },
+ {
+ "@id": "https://www.nuget.org/api/v2/package",
+ "@type": "PackagePublish/2.0.0"
+ },
+ {
+ "@id": "https://api-v2v3search-0.nuget.org/query",
+ "@type": "SearchQueryService/3.0.0-rc",
+ "comment": "Query endpoint of NuGet Search service (primary) used by RC clients"
+ },
+ {
+ "@id": "https://api-v2v3search-0.nuget.org/autocomplete",
+ "@type": "SearchAutocompleteService/3.0.0-rc",
+ "comment": "Autocomplete endpoint of NuGet Search service (primary) used by RC clients"
+ },
+ {
+ "@id": "https://api.nuget.org/v3/registration2/",
+ "@type": "RegistrationsBaseUrl/3.0.0-rc",
+ "comment": "Base URL of Azure storage where NuGet package registration info is stored used by RC clients. This base URL does not include SemVer 2.0.0 packages."
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/_data/tools-json.json b/docs/api/_data/tools-json.json
new file mode 100644
index 000000000..35a2169e6
--- /dev/null
+++ b/docs/api/_data/tools-json.json
@@ -0,0 +1,34 @@
+{
+ "nuget.exe": [
+ {
+ "version": "4.8.0-preview3",
+ "url": "https://dist.nuget.org/win-x86-commandline/v4.8.0-preview3/nuget.exe",
+ "stage": "EarlyAccessPreview",
+ "uploaded": "2018-07-06T23:00:00.0000000Z"
+ },
+ {
+ "version": "4.7.1",
+ "url": "https://dist.nuget.org/win-x86-commandline/v4.7.1/nuget.exe",
+ "stage": "ReleasedAndBlessed",
+ "uploaded": "2018-08-10T23:00:00.0000000Z"
+ },
+ {
+ "version": "4.6.1",
+ "url": "https://dist.nuget.org/win-x86-commandline/v4.6.1/nuget.exe",
+ "stage": "Released",
+ "uploaded": "2018-03-22T23:00:00.0000000Z"
+ },
+ {
+ "version": "3.5.0",
+ "url": "https://dist.nuget.org/win-x86-commandline/v3.5.0/nuget.exe",
+ "stage": "ReleasedAndBlessed",
+ "uploaded": "2016-12-19T15:30:00.0000000-08:00"
+ },
+ {
+ "version": "2.8.6",
+ "url": "https://dist.nuget.org/win-x86-commandline/v2.8.6/nuget.exe",
+ "stage": "ReleasedAndBlessed",
+ "uploaded": "2015-09-01T12:30:00.0000000-07:00"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/api/catalog-resource.md b/docs/api/catalog-resource.md
new file mode 100644
index 000000000..e9a347be3
--- /dev/null
+++ b/docs/api/catalog-resource.md
@@ -0,0 +1,416 @@
+---
+title: Catalog Resource, NuGet V3 API
+description: The catalog is an index of all packages created and deleted on nuget.org.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/30/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Catalog
+
+The **catalog** is a resource that records all package operations on a package source, such as creations and deletions. The catalog resource has the `Catalog` type in the [service index](service-index.md). You can use this resource to [query for all published packages](../guides/api/query-for-all-published-packages.md).
+
+> [!Note]
+> Because the catalog is not used by the official NuGet client, not all package sources implement the catalog.
+
+> [!Note]
+> Currently, the nuget.org catalog is not available in China. For more details, see [NuGet/NuGetGallery#4949](https://github.com/NuGet/NuGetGallery/issues/4949).
+
+## Versioning
+
+The following `@type` value is used:
+
+@type value | Notes
+------------- | -----
+Catalog/3.0.0 | The initial release
+
+## Base URL
+
+The entry point URL for the following APIs is the value of the `@id` property associated with the aforementioned
+resource `@type` values. This topic uses the placeholder URL `{@id}`.
+
+## HTTP methods
+
+All URLs found in the catalog resource support only the HTTP methods `GET` and `HEAD`.
+
+## Catalog index
+
+The catalog index is a document in a well-known location that has a list of catalog items, ordered chronologically. It is the entry point of the catalog resource.
+
+The index is comprised of catalog pages. Each catalog page contains catalog items. Each catalog item represents an event concerning a single package at a point in time. A catalog item can represent a package that was created, unlisted, relisted, or deleted from the package source. By processing the catalog items in chronological order, the client can build an up-to-date view of every package that exists on the V3 package source.
+
+In short, catalog blobs have the following hierarchical structure:
+
+- **Index**: the entry point for the catalog.
+- **Page**: a grouping of catalog items.
+- **Leaf**: a document representing a catalog item, which is a snapshot of a single package's state.
+
+Each catalog object has a property called the `commitTimeStamp` representing when the item was added to the catalog. Catalog items are added to a catalog page in batches called commits. All catalog items in the same commit have the same commit timestamp (`commitTimeStamp`) and commit ID (`commitId`). Catalog items placed in the same commit represent events that happened around the same point in time on the package source. There is no ordering within a catalog commit.
+
+Because each package ID and version is unique, there will never be more than one catalog item in a commit. This ensures that catalog items for a single package can always be unambiguously ordered with respect to commit timestamp.
+
+There is never be more than one commit to the catalog per `commitTimeStamp`. In other words, the `commitId` is redundant with the `commitTimeStamp`.
+
+In contrast to the [package metadata resource](registration-base-url-resource.md), which is indexed by package ID, the catalog is indexed (and queryable) only by time.
+
+Catalog items are always added to the catalog in a monotonically increasing, chronological order. This means that if a catalog commit is added at time X then no catalog commit will ever be added with a time less than or equal to X.
+
+The following request fetches the catalog index.
+
+```
+GET {@id}
+```
+
+The catalog index is a JSON document that contains an object with the following properties:
+
+Name | Type | Required | Notes
+--------------- | ---------------- | -------- | -----
+commitId | string | yes | A unique ID associated with the most recent commit
+commitTimeStamp | string | yes | A timestamp of the most recent commit
+count | integer | yes | The number of pages in the index
+items | array of objects | yes | A array of objects, each object representing a page
+
+Each element in the `items` array is an object with some minimal details about each page. These page objects do not
+contain the catalog leaves (items). The order of the elements in this array is not defined. Pages can be ordered by the
+client in memory using their `commitTimeStamp` property.
+
+As new pages are introduced, the `count` will be incremented and new objects will appear in the `items` array.
+
+As items are added to the catalog, the index's `commitId` will change and the `commitTimeStamp` will increase. These
+two properties are essentially a summary over all page `commitId` and `commitTimeStamp` values in the `items` array.
+
+### Catalog page object in the index
+
+The catalog page objects found in the catalog index's `items` property have the following properties:
+
+Name | Type | Required | Notes
+--------------- | ------- | -------- | -----
+@id | string | yes | The URL to fetch catalog page
+commitId | string | yes | A unique ID associated with the most recent commit in this page
+commitTimeStamp | string | yes | A timestamp of the most recent commit in this page
+count | integer | yes | The number of items in the catalog page
+
+In contrast to the [package metadata resource](registration-base-url-resource.md) which in some cases inlines leaves
+into the index, catalog leaves are never inlined into the index and must always be fetched by using the page's `@id`
+URL.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3/catalog0/index.json
+```
+
+### Sample response
+
+[!code-JSON [catalog-index.json](./_data/catalog-index.json)]
+
+## Catalog page
+
+The catalog page is a collection of catalog items. It is a document fetched using one of the `@id` values found in the
+catalog index. The URL to a catalog page is not intended to be predictable and should be discovered using only the
+catalog index.
+
+New catalog items are added to the page in the catalog index only with the highest commit timestamp or to a
+new page. Once a page with a higher commit timestamp is added to the catalog, older pages are never added to or
+changed.
+
+The catalog page document is a JSON object with the following properties:
+
+Name | Type | Required | Notes
+--------------- | ---------------- | -------- | -----
+commitId | string | yes | A unique ID associated with the most recent commit in this page
+commitTimeStamp | string | yes | A timestamp of the most recent commit in this page
+count | integer | yes | The number of items in the page
+items | array of objects | yes | The catalog items in this page
+parent | string | yes | A URL to the catalog index
+
+Each element in the `items` array is an object with some minimal details about the catalog item. These item objects do
+not contain all of the catalog item's data. The order of the items in the page's `items` array is not defined. Items
+can be ordered by the client in memory using their `commitTimeStamp` property.
+
+The number of catalog items in a page is defined by server implementation. For nuget.org, there are at most 550
+items in each page, although the actual number may be smaller for some pages depending on the size of the next commit
+batch at the point in time.
+
+As new items are introduced, the `count` is incremented and new catalog item objects appear in the `items`
+array.
+
+As items are added to the page, the `commitId` changes and the `commitTimeStamp` increases. These two
+properties are essentially a summary over all `commitId` and `commitTimeStamp` values in the `items` array.
+
+### Catalog item object in a page
+
+The catalog item objects found in the catalog page's `items` property have the following properties:
+
+Name | Type | Required | Notes
+--------------- | ------- | -------- | -----
+@id | string | yes | The URL to fetch the catalog item
+@type | string | yes | The type of the catalog item
+commitId | string | yes | The commit ID associated with this catalog item
+commitTimeStamp | string | yes | The commit timestamp of this catalog item
+nuget:id | string | yes | The package ID that this leaf is related to
+nuget:version | string | yes | The package version that this leaf is related to
+
+The `@type` value will be one of the following two values:
+
+1. `nuget:PackageDetails`: this corresponds to `PackageDetails` type in the catalog leaf document.
+1. `nuget:PackageDelete`: this corresponds to the `PackageDelete` type in the catalog leaf document.
+
+For more details about what each type means, see the [corresponding items type](#item-types) below.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3/catalog0/page2926.json
+```
+
+### Sample response
+
+[!code-JSON [catalog-page.json](./_data/catalog-page.json)]
+
+## Catalog leaf
+
+The catalog leaf contains metadata about a specific package ID and version at some point in time. It is a document
+fetched using the `@id` value found in a catalog page. The URL to a catalog leaf is not intended to be predictable
+and should be discovered using only a catalog page.
+
+The catalog leaf document is a JSON object with the following properties:
+
+Name | Type | Required | Notes
+----------------------- | -------------------------- | -------- | -----
+@type | string or array of strings | yes | The type(s) of the catalog item
+catalog:commitId | string | yes | A commit ID associated with this catalog item
+catalog:commitTimeStamp | string | yes | The commit timestamp of this catalog item
+id | string | yes | The package ID of the catalog item
+published | string | yes | The published date of the package catalog item
+version | string | yes | The package version of the catalog item
+
+### Item types
+
+The `@type` property is a string or array of strings. For convenience, if the `@type` value is a string, it should be
+treated as any array of size one. Not all possible values for `@type` are documented. However, each catalog item has exactly one of the two following string type values:
+
+1. `PackageDetails`: represents a snapshot of package metadata
+1. `PackageDelete`: represents a package that was deleted
+
+### Package details catalog items
+
+Catalog items with the type `PackageDetails` contain a snapshot of package metadata for a specific package (ID and
+version combination). A package details catalog item is produced when a package source encounters any of the
+following scenarios:
+
+1. A package is **pushed**.
+1. A package is **relisted**.
+1. A package is **unlisted**.
+1. A package is **deprecated**.
+1. A package is **undeprecated**.
+1. A package is **reflowed**.
+1. A package's **vulnerability status** is updated.
+
+A package reflow is an administrative gesture that essentially generates a fake push of an existing package with no
+changes to the package itself. On nuget.org, a reflow is used after fixing a bug in one of the background jobs
+which consume the catalog.
+
+Clients consuming the catalog items should not attempt to determine which of these scenarios produced the catalog
+item. Instead, the client should simply update any maintained view or index with the metadata contained in the
+catalog item. Furthermore, duplicate or redundant catalog items should be handled gracefully (idempotently).
+
+Package details catalog items have the following properties in addition to those
+[included on all catalog leaves](#catalog-leaf).
+
+Name | Type | Required | Notes
+----------------------- | -------------------------- | -------- | -----
+authors | string | no |
+created | string | no | A timestamp of when the package was first created. Fallback property: `published`.
+dependencyGroups | array of objects | no | The dependencies of the package, grouped by target framework ([same format as the package metadata resource](registration-base-url-resource.md#package-dependency-group))
+deprecation | object | no | The deprecation associated with the package ([same format as the package metadata resource](registration-base-url-resource.md#package-deprecation))
+description | string | no |
+iconUrl | string | no |
+isPrerelease | boolean | no | Whether or not the package version is prerelease. Can be detected from `version`.
+language | string | no |
+licenseUrl | string | no |
+listed | boolean | no | Whether or not the package is listed
+minClientVersion | string | no |
+packageHash | string | yes | The hash of the package, encoding using [standard base 64](https://tools.ietf.org/html/rfc4648#section-4)
+packageHashAlgorithm | string | yes |
+packageSize | integer | yes | The size of the package .nupkg in bytes
+packageTypes | array of objects | no | The package types specified by the author.
+projectUrl | string | no |
+releaseNotes | string | no |
+requireLicenseAgreement | boolean | no | Assume `false` if excluded
+summary | string | no |
+tags | array of strings | no |
+title | string | no |
+verbatimVersion | string | no | The version string as it's originally found in the .nuspec
+vulnerabilities | array of objects | no | The security vulnerabilities of the package
+
+The package `version` property is the full version string after normalization. This means that SemVer 2.0.0 build data can
+be included here.
+
+The `created` timestamp is when the package was first received by the package source, which is typically a short
+time before the catalog item's commit timestamp.
+
+The `packageHashAlgorithm` is a string defined by the server implementation representing the hashing algorithm used to
+produce the `packageHash`. nuget.org always used the `packageHashAlgorithm` value of `SHA512`.
+
+The `packageTypes` property will only be present if a package type was specified by the author. If it is present, it will always have at least one (1) entry. Each item in the `packageTypes` array is a JSON object with the following properties:
+
+Name | Type | Required | Notes
+--------- | ------- | -------- | -----
+name | string | yes | The name of the package type.
+version | string | no | The version of the package type. Only present if the author explicitly specified a version in the nuspec.
+
+The `published` timestamp is the time when the package was last listed.
+
+> [!Note]
+> On nuget.org, the `published` value is set to the year 1900 when the package is unlisted.
+
+#### Vulnerabilities
+
+An array of `vulnerability` objects. Each vulnerability has the following properties:
+
+Name | Type | Required | Notes
+------------ | ------ | -------- | -----
+advisoryUrl | string | yes | Location of security advisory for the package
+severity | string | yes | Severity of advisory: "0" = Low, "1" = Moderate, "2" = High, "3" = Critical
+
+If the `severity` property contains values other than those listed here, the severity of the advisory is to be treated as Low.
+
+#### Sample request
+
+```
+GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json
+```
+
+#### Sample response
+
+[!code-JSON [catalog-package-details.json](./_data/catalog-package-details.json)]
+
+### Package delete catalog items
+
+Catalog items with the type `PackageDelete` contain a minimal set of information indicating to catalog clients that a
+package has been deleted from the package source and is no longer available for any package operation (such as
+restore).
+
+> [!NOTE]
+> It is possible for a package to be deleted and later republished using the same package ID and version. On nuget.org,
+> this is a very rare case as it breaks the official client's assumption that a package ID and version imply a specific
+> package content. For more information about package deletion on nuget.org, see
+> [our policy](../nuget-org/policies/deleting-packages.md).
+
+Package delete catalog items have no additional properties in addition to those
+[included on all catalog leaves](#catalog-leaf).
+
+The `version` property is the original version string found in the package .nuspec.
+
+The `published` property is the time when package was deleted, which is typically as short time before the catalog
+item's commit timestamp.
+
+#### Sample request
+
+```
+GET https://api.nuget.org/v3/catalog0/data/2017.11.02.00.40.00/netstandard1.4_lib.1.0.0-test.json
+```
+
+#### Sample response
+
+[!code-JSON [catalog-package-delete.json](./_data/catalog-package-delete.json)]
+
+## Cursor
+
+### Overview
+
+This section describes a client concept that, although is not necessarily mandated by the protocol, should be part of
+any practical catalog client implementation.
+
+Because the catalog is an append-only data structure indexed by time, the client should store a **cursor** locally,
+representing up to what point in time the client has processed catalog items. Note that this cursor value should never
+be generated using the client's machine clock. Instead, the value should come from a catalog object's
+`commitTimestamp` value.
+
+Every time the client wants to process new events on the package source, it need only query the catalog for all
+catalog items with a commit timestamp greater than its stored cursor. After the client successfully processes all new
+catalog items, it records the latest commit timestamp of catalog items just processed as its new cursor value.
+
+Using this approach, the client can be sure to never miss any package events that occurred on the package source.
+Additionally, the client never has to reprocess old events prior to the cursor's recorded commit timestamp.
+
+This powerful concept of cursors is used for many of nuget.org background jobs and is used to keep the V3 API itself
+up-to-date.
+
+### Initial value
+
+When the catalog client is starting for the very first time (and therefore has no cursor value), it should use a default
+cursor value of .NET's `System.DateTimeOffset.MinValue` or some such analogous notion of minimum representable
+timestamp.
+
+### Iterating over catalog items
+
+To query for the next set of catalog items to process, the client should:
+
+1. Fetch the recorded cursor value from a local store.
+1. Download and deserialize the catalog index.
+1. Find all catalog pages with a commit timestamp *greater than* the cursor.
+1. Declare an empty list of catalog items to process.
+1. For each catalog page matched in step 3:
+ 1. Download and deserialized the catalog page.
+ 1. Find all catalog items with a commit timestamp *greater than* the cursor.
+ 1. Add all matching catalog items to the list declared in step 4.
+1. Sort the catalog item list by commit timestamp.
+1. Process each catalog item in sequence:
+ 1. Download and deserialize the catalog item.
+ 1. React appropriately to the catalog item's type.
+ 1. Process the catalog item document in a client-specific fashion.
+1. Record the last catalog item's commit timestamp as the new cursor value.
+
+With this basic algorithm, the client implementation can build up a complete view of all packages available on the
+package source. The client need only execute this algorithm periodically to always be aware of the latest changes
+to the package source.
+
+> [!Note]
+> This is the algorithm that nuget.org uses to keep the [Package Metadata](registration-base-url-resource.md),
+> [Package Content](package-base-address-resource.md), [Search](search-query-service-resource.md) and
+> [Autocomplete](search-autocomplete-service-resource.md) resources up to date.
+
+### Dependent cursors
+
+Suppose there are two catalog clients that have an inherent dependency where one client's output depends on another
+client's output.
+
+#### Example
+
+For example, on nuget.org a newly published package should not appear in the search resource before it appears in the
+package metadata resource. This is because the "restore" operation performed by the official NuGet client uses the
+package metadata resource. If a customer discovers a package using the search service, they should be able to
+successfully restore that package using the package metadata resource. In other words, the search resource depends on
+the package metadata resource. Each resource has a catalog client background job updating that resource. Each client
+has its own cursor.
+
+Since both resources are built off of the catalog, the cursor of the catalog client that updates the search resource
+*must not go beyond* the cursor of the package metadata catalog client.
+
+#### Algorithm
+
+To implement this restriction, simply modify the algorithm above to be:
+
+1. Fetch the recorded cursor value from a local store.
+1. Download and deserialize the catalog index.
+1. Find all catalog pages with a commit timestamp *greater than* the cursor **less than or equal to the
+ dependency's cursor.**
+1. Declare an empty list of catalog items to process.
+1. For each catalog page matched in step 3:
+ 1. Download and deserialized the catalog page.
+ 1. Find all catalog items with a commit timestamp *greater than* the cursor **less than or equal to the
+ dependency's cursor.**
+ 1. Add all matching catalog items to the list declared in step 4.
+1. Sort the catalog item list by commit timestamp.
+1. Process each catalog item in sequence:
+ 1. Download and deserialize the catalog item.
+ 1. React appropriately to the catalog item's type.
+ 1. Process the catalog item document in a client-specific fashion.
+1. Record the last catalog item's commit timestamp as the new cursor value.
+
+Using this modified algorithm, you can build a system of dependent catalog clients all producing their own specific
+indexes, artifacts, etc.
diff --git a/docs/api/implementation-guide.md b/docs/api/implementation-guide.md
new file mode 100644
index 000000000..6bc08aa28
--- /dev/null
+++ b/docs/api/implementation-guide.md
@@ -0,0 +1,153 @@
+---
+title: NuGet Server Implementation Guide
+description: Guidelines and recommendations to anyone implementing the NuGet Server API in their own package repository
+author: zivkan
+ms.author: zivkan
+ms.date: 07/29/2023
+ms.topic: article
+---
+
+# NuGet Server Implementation Guide
+
+In some cases, you may want to implement your own NuGet package feed.
+Many [existing implementations exist](../hosting-packages/Overview.md) which allow you to host your own feed in a variety way, but the protocol between the official NuGet client software and a package feed is documented allowing you to build your own feed implementation from scratch.
+
+The protocol does evolve over time and this guide is aimed at those that wish to or already have implemented a NuGet package server.
+
+Since the initial release of the NuGet V3 protocol in 2015, NuGet has evolved to provide developers with a richer experience, and this requires package repositories to do additional work in order to provide the additional value their package consumers, beyond simply exacting metadata from hosted packages and returning the metadata in various forms.
+For example, the search and package metadata endpoints contain more than just metadata found in the nupkg's nuspec file.
+
+Note that this guide is focused on the NuGet V3 protocol since the V2 protocol is essentially undocumented and, since 2015, the recommended protocol for NuGet client and server communication is the V3 protocol. For more information read about protocol versioning.
+
+## Chronology
+
+To assist authors of existing NuGet repositories keep up to date with NuGet's newest features, here is the chronology of the relevant features mentioned in the remainder of the document.
+
+|Year|Feature|
+|--|--|
+|2013|[A blog post explaining how to manage package owners on nuget.org](https://devblogs.microsoft.com/nuget/managing-package-owners/) clarified the owners shown on the website are the accounts that have permission to upload new versions, and therefore [the `owners` metadata in the package is ignored](#owner-field)|
+|2017|[Added `verified` to `SearchQueryService` responses.](#verified-search-response-field)|
+||[Semantic Versioning 2.0.0 support](#semantic-versioning-200-support)
+|2018|[Embedded licenses](#embedded-files)|
+|2019|[Embedded icons](#embedded-files)|
+||[Package deprecation in `RegistrationBaseUrl` (package metadata resource)](#known-vulnerability-and-deprecation-data)|
+|2020|[Package vulnerability information in `RegistrationsBaseUrl` (package metadata resource)](#known-vulnerability-and-deprecation-data)|
+||Added `packageTypes` query parameter to `SearchQueryService` requests|
+|2021|[Embedded readme](#embedded-files)|
+|2023|[PreAuthenticate authenticated requests](#url-structure-for-authenticated-feeds) [`VulnerabilityInfo` resource](#known-vulnerabilities-database-vulnerabilityinfo)|
+|2025|[Enable embedded README downloads](#enable-embedded-readme-downloads)|
+
+## Owner field
+
+Consider two of the [package manifest file (`.nuspec`)](../reference/nuspec.md) fields, `` and ``.
+Package authors who are packaging third-party content often put the third-party name in the `` field.
+The `` field was intended to denote who published the package on a repository, and therefore who should be contacted in case of packing issues or questions.
+
+This was explained in [a blog post from 2013](https://devblogs.microsoft.com/nuget/managing-package-owners/), so the `` field is considered deprecated in the `.nuspec` file.
+If package's manifest contain this metadata, it should be ignored.
+Do not return the value of the `.nuspec` file's `` field in the `owners` property in the [search resource](./search-query-service-resource.md) or [package metadata resource](./registration-base-url-resource.md) JSON response.
+
+If your repository has per-package permissions, it is recommended to report the accounts that have permissions to publish new versions in the `owner` metadata for search and package metadata resources JSON responses.
+
+## `verified` search response field
+
+Visual Studio's Package Manager UI shows a blue checkmark next to packages in [search service](./search-query-service-resource.md) results, when a new field `verified` is set to `true`.
+
+NuGet.org uses this with package prefix data (server side data, not part of the NuGet API), so that this checkmark is only shown to customers when the account that owns the package uploaded the package.
+For example, any package with prefix `microsoft.*` is verified only when the package is owned by [the Microsoft account on nuget.org](https://www.nuget.org/profiles/Microsoft).
+Anyone who uploaded a package with package id starting with `microsoft.` before reserved prefixes were implemented, will not have this verified checkmark.
+NuGet.org also allows prefixes not to be exclusive, so that anyone can upload a package under `Contoso.ToolWithPlugins.Community.*`, but will not get a verified checkmark.
+
+## Semantic Versioning 2.0.0 support
+
+NuGet supports [a hybrid between `System.Version` and Semantic Version](../concepts/Package-Versioning.md#where-nugetversion-diverges-from-semantic-versioning), but support for Semantic Version 2.0.0 was added in 2017.
+Therefore, NuGet API resources that return versions to client versions lower than 3.6.0 must not return packages that use Semantic 2.0.0 features that are incompatible with Semantic Versioning 1.0.0.
+
+The most important differences between the two versions are the pre-release labels, and metadata string.
+The [Semantic Versioning 1.0.0 spec](https://semver.org/spec/v1.0.0.html) provides `[0-9A-Za-z-]` as a sample Regular Expression string for the only characters allowed as part of the pre-release label, and does not support metadata strings.
+The [Semantic Versioning 2.0.0 spec](https://semver.org/spec/v2.0.0.html) allows pre-release identifiers to be separated by `.` characters (and forbids a numeric identifier from having a leading zero), and additionally allows build metadata to be added following a `+`.
+
+In the [package metadata resource (`RegistrationsBaseUrl`)](./registration-base-url-resource.md), resource versions below 3.6.0 must only return packages that comply with .NET's `System.Version` or Semantic Versioning 1.0.0.
+This means packages whose versions are only compliant with Semantic Versioning 2.0.0 are invisible to these client versions.
+
+Similarly, the [search query service (`SearchQueryService`)](./search-query-service-resource.md) and [autocomplete service (`SearchAutocompleteService`)](./search-autocomplete-service-resource.md) added `&semVerLevel={version}` query parameters.
+When `semVerLevel` is missing, assume the value `1.0.0`.
+Like the package metadata resource, packages whose version is compatible only with Semantic Versioning 2.0.0 must not be returned when the `semVerLevel` value is below 2.0.0.
+
+## Embedded files
+
+Package [icons](../reference/nuspec.md#icon), [license](../reference/nuspec.md#license), and [readme](../reference/nuspec.md#readme) files can be (and are recommended to be) embedded in the package.
+These files need a URL endpoint, either extracted and put on a static file server, or a URL that dynamically extracts the files from the `.nupkg` on request, so that they can be viewed without downloading the entire `nupkg`.
+If your package repository provides package browsing and viewing package details, you can use the URLs to show customers the embedded content on your website.
+
+Finally, the [package metadata resource](./registration-base-url-resource.md) and [search resource](./search-query-service-resource.md) must contain the hosted URL in the `iconUrl`, `licenseUrl`, and/or `readmeUrl` properties of the JSON response.
+Packages (`.nupkg` files) must not be modified, as client features (lock files and signed packages) will detect modifications as the package having been tampered with.
+
+Note that the license could be an SPDX expression, or an embedded file (but not both).
+Packages that use a license expression, when represented in search and package metadata results, can have the `licenseUrl` set to the license expression, URL encoded, and appended to the end of https://licenses.nuget.org/.
+For example, https://licenses.nuget.org/Apache-2.0.
+The NuGet.org server team have additional [documentation on licenses.nuget.org](../nuget-org/licenses.nuget.org.md).
+
+## Known vulnerability and deprecation data
+
+### Package Metadata Resource (`RegistrationsBaseUrl`)
+
+The [Package Metadata Resource](./registration-base-url-resource.md) can contain [deprecation](./registration-base-url-resource.md#package-deprecation) and [vulnerability](./registration-base-url-resource.md#vulnerabilities) information.
+This allows customers browsing packages in Visual Studio's Package Manager User Interface, or equivalent in other IDEs, to be notified of important security or maintenance issues.
+
+If your package repository is "up-sourcing" packages from another repository, in order to mirror packages in your own feed, we recommend periodically checking the original source if there is deprecation or vulnerability data, and mirror that metadata in your own repository.
+If your package repository is up-sourcing from nuget.org specifically, by keeping state of the last time you checked (a "cursor"), you can use [the `Catalog` resource](./catalog-resource.md) to efficiently check if there are any package updates for packages you're mirroring, without having to download a large number of package metadata JSON files from the upstream feed.
+There is [a guide on using the catalog resource](../guides/api/query-for-all-published-packages.md) with sample code that can help you get started.
+
+### Known Vulnerabilities Database (`VulnerabilityInfo`)
+
+In order to provide high-performance vulnerability scanning during package restore, NuGet downloads the full list of known vulnerabilities from [the `VulnerabilityInfo` resource](./vulnerability-info.md).
+Nuget.org provides vulnerability data for all GitHub reviewed advisories from the [GitHub Advisories database](https://github.com/advisories), which includes packages that are not hosted on nuget.org.
+
+If your package repository is hosting first-party packages, and you would like to provide vulnerability information to customers using your own feed, but don't yet have any disclosed package vulnerabilities, you should provide a [vulnerability index](./vulnerability-info.md#vulnerability-index) with one or more [vulnerability pages](./vulnerability-info.md#vulnerability-page) whose contents are an empty JSON array (`[]`).
+
+#### Reusing nuget.org's vulnerability data
+
+NuGet does not require that resources in the [service index](./service-index.md), or [the vulnerability index](./vulnerability-info.md#vulnerability-index), must be on the same server as the service index itself.
+However, there are several reasons why some companies choose to block nuget.org at the firewall, or have on-prem feeds on a disconnected network.
+To avoid connectivity issues, we recommend serving vulnerability data from your own web app, so that NuGet clients only make HTTP connections to the host the feed is installed on.
+
+✔️ DO cache or proxy the vulnerability pages in your own web app
+
+❌ DO NOT advertise api.nuget.org in your service index or vulnerability index without a configuration to turn this off.
+
+## `packageTypes` search query
+
+The .NET CLI allows searching for .NET tool packages with the `dotnet tool search` command.
+This is implemented by adding a `&packageTypes={value}` query parameter to the [search query resource](./search-query-service-resource.md), that reads values from the package's `.nuspec` file `` field.
+
+## URL structure for authenticated feeds
+
+As described in [the overview of the NuGet API](./overview.md), the starting URL for all NuGet server communication is [the service index](./service-index.md).
+This document contains the URLs for all other resources that NuGet clients will query.
+As of NuGet 6.7 (Visual Studio & MSBuild 17.7, and .NET SDK 7.0.400), NuGet uses [.NET's `HttpClientHandler.PreAuthenticate`](/dotnet/api/system.net.http.httpclienthandler.preauthenticate), which only avoids anonymous HTTP requests when subsequent URLs are in the same virtual directory, or a subdirectory, of a URL that has previously been authenticated.
+This will dramatically reduce the number of unauthenticated HTTP requests sent to the server, and therefore will reduce your server workload.
+
+Here are some examples:
+
+|URL|Will PreAuthenticate?|
+|--|--|
+|https://pkgs.contoso.com/nuget/v3/feed/index.json|N/A, this is the service index.|
+|https://pkgs.contoso.com/nuget/v3/search|No, not in the same or sub-directory as the service index.|
+|https://search.pkgs.contoso.com/nuget/v3/feed/|No, not on the same host name as the service index.|
+|https://pkgs.contoso.com/nuget/v3/feed/search|Yes, in the same directory as the service index.|
+|https://pkgs.contoso.com/nuget/v3/registration/|No, not in a subdirectory of the service index.|
+|https://pkgs.contoso.com/nuget/v3/feed/registration/|Yes, in a subdirectory of the service index.|
+|https://pkgs.contoso.com/nuget/v3/{guid}/registration/|See below|
+
+In the last example, the server might have a canonical (in this example a guid) name, and have one or more aliases.
+If the service index request was authenticated on a non-canonical URL (the "friendly" name, in our example `feed`), then no, any requests to resources under the canonical URL will not match `HttpClientHandler`'s rules for `PreAuthenticate`.
+However, if the non-canonical URL is an HTTP redirection to the canonical URL, https://pkgs.contoso.com/nuget/v3/{guid}/index.json, then this URL will be used in `HttpClientHandler`'s credential cache.
+In this case, every request to the service index will have additional latency, due to the redirection.
+
+While NuGet's V3 API was designed to work on a static file server, the search resource is the exception that always requires a dynamic web service to process requests.
+If you wish to host search, or indeed any other NuGet API resource, on different servers, in order to benefit from `HttpClientHandler`'s `PreAuthenticate`, you will need to use a reverse proxy to ensure all customer facing URLs in the service index meet the "same or subdirectory" rule.
+
+## Enable embedded README downloads
+
+A [new resource](./readme-template-resource.md) was documented for constructing a URL that can be used to download a README for a given package. This will allow client, like the Package Management UI in VS, to display the embedded README for packages which haven't been previously installed by the user. The client will construct this URL and attempt to download the README, using the response to the request to determine if a README is available. This means servers should expect multiple requests to the constructed endpoint as users navigate the PM UI.
diff --git a/docs/api/overview.md b/docs/api/overview.md
new file mode 100644
index 000000000..ecf2fd22c
--- /dev/null
+++ b/docs/api/overview.md
@@ -0,0 +1,163 @@
+---
+title: Overview of the NuGet Server API
+description: The NuGet Server API is a set of HTTP endpoints that can be used to download packages, fetch metadata, publish new packages, etc.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# NuGet Server API
+
+The NuGet Server API is a set of HTTP endpoints that can be used to download packages, fetch metadata, publish new packages,
+and perform most other operations available in the official NuGet clients.
+
+This API is used by the NuGet client in Visual Studio, nuget.exe, and the .NET CLI to perform NuGet operations such as
+[`dotnet restore`](/dotnet/core/tools/dotnet-restore?tabs=netcore2x), search in the Visual Studio UI, and [`nuget.exe push`](../reference/cli-reference/cli-ref-push.md).
+
+Note in some cases, nuget.org has additional requirements that are not enforced by other package sources. These differences are documented by the [nuget.org Protocols](nuget-protocols.md).
+
+For a simple enumeration and download of available nuget.exe versions, see the [tools.json](tools-json.md) endpoint.
+
+If you are implementing a NuGet package repository, also see [the implementation guide](./implementation-guide.md) for additional requirements and recommendations.
+
+## Service index
+
+The entry point for the API is a JSON document in a well known location. This document is called the **service index**. The location of the service index for nuget.org is `https://api.nuget.org/v3/index.json`.
+
+This JSON document contains a list of *resources* which provide different functionality and fulfill different
+use cases.
+
+Clients that support the API should accept one or more of these service index URL as the means of connecting to the
+respective package sources.
+
+For more information about the service index, see [its API reference](service-index.md).
+
+## Versioning
+
+The API is version 3 of NuGet's HTTP protocol. This protocol is sometimes referred to as "the V3 API". These reference
+documents will refer to this version of the protocol simply as "the API."
+
+The service index schema version is indicated by the `version` property in the service index. The API mandates that
+the version string has a major version number of `3`. As non-breaking changes are made to the service index schema, the version string's minor version will be increased.
+
+Older clients (such as nuget.exe 2.x) do not support the V3 API and only support the older V2 API, which is not
+documented here.
+
+The NuGet V3 API is named as such because it's the successor of the V2 API, which was the OData-based protocol
+implemented by the 2.x version of the official NuGet client. The V3 API was first supported by the 3.0 version of the
+official NuGet client and is still the latest major protocol version supported by the NuGet client, 4.0 and on.
+
+Non-breaking protocol changes have been made to the API since it was first released.
+
+## Resources and schema
+
+The **service index** describes a variety of resources. The current set of supported resources are as follows:
+
+Resource name | Required | Description
+-------------------------------------------------------------------- | -------- | -----------
+[Catalog](catalog-resource.md) | no | Full record of all package events.
+[PackageBaseAddress](package-base-address-resource.md) | yes | Get package content (.nupkg).
+[PackageDetailsUriTemplate](package-details-template-resource.md) | no | Construct a URL to access a package details web page.
+[PackagePublish](package-publish-resource.md) | yes | Push and delete (or unlist) packages.
+[ReadmeUriTemplate](readme-template-resource.md) | no | Construct a URL to access a package's README.
+[RegistrationsBaseUrl](registration-base-url-resource.md) | yes | Get package metadata.
+[ReportAbuseUriTemplate](report-abuse-resource.md) | no | Construct a URL to access a report abuse web page.
+[RepositorySignatures](repository-signatures-resource.md) | no | Get certificates used for repository signing.
+[SearchAutocompleteService](search-autocomplete-service-resource.md) | no | Discover package IDs and versions by substring.
+[SearchQueryService](search-query-service-resource.md) | yes | Filter and search for packages by keyword.
+[SymbolPackagePublish](symbol-package-publish-resource.md) | no | Push symbol packages.
+[VulnerabilityInfo](vulnerability-info.md) | no | Packages with known vulnerabilities.
+
+In general, all non-binary data returned by a API resource are serialized using JSON. The response schema
+returned by each resource in the service index is defined individually for that resource. For more information about
+each resource, see the topics listed above.
+
+In the future, as the protocol evolves, new properties may be added to JSON responses. For the client to be future-proof,
+the implementation should not assume that the response schema is final and cannot include extra data. All properties
+that the implementation does not understand should be ignored.
+
+> [!Note]
+> When a source does not implement `SearchAutocompleteService` any autocomplete behavior should be disabled
+> gracefully. When `ReportAbuseUriTemplate` is not implemented, the official NuGet client falls back to nuget.org's
+> report abuse URL (tracked by [NuGet/Home#4924](https://github.com/NuGet/Home/issues/4924)). Other clients may opt
+> to simply not show a report abuse URL to the user.
+
+### Undocumented resources on nuget.org
+
+The V3 service index on nuget.org has some resources that are not documented above. There are a few reasons for not
+documenting a resource.
+
+First, we don't document resources used as an implementation detail of nuget.org. The `SearchGalleryQueryService`
+falls into this category. [NuGetGallery](https://github.com/NuGet/NuGetGallery) uses this resource to delegate some V2
+(OData) queries to our search index instead of using the database. This resource was introduced for scalability reasons
+and is not intended for external use.
+
+Second, we don't document resources that never shipped in an RTM version of the official client.
+`PackageDisplayMetadataUriTemplate` and `PackageVersionDisplayMetadataUriTemplate` fall into this category.
+
+Thirdly, we don't document resources that are tightly coupled with the V2 protocol, which itself is intentionally
+undocumented. The `LegacyGallery` resource falls into this category. This resource allows a V3 service index to point to
+a corresponding V2 source URL. This resource supports the `nuget.exe list`.
+
+If a resource is not documented here, we *strongly* recommend that you do not take a dependency on them. We may remove
+or change the behavior of these undocumented resources which could break your implementation in unexpected ways.
+
+## Timestamps
+
+All timestamps returned by the API are UTC or are otherwise specified using
+[ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) representation.
+
+## HTTP methods
+
+Verb | Use
+------ | -----------
+GET | Performs a read-only operation, typically retrieving data.
+HEAD | Fetches the response headers for the corresponding `GET` request.
+PUT | Creates a resource that doesn't exist or, if it does exist, updates it. Some resources may not support update.
+DELETE | Deletes or unlists a resource.
+
+## HTTP status codes
+
+Code | Description
+---- | -----
+200 | Success, and there is a response body.
+201 | Success, and the resource was created.
+202 | Success, the request has been accepted but some work may still be incomplete and completed asynchronously.
+204 | Success, but there is no response body.
+301 | A permanent redirect.
+302 | A temporary redirect.
+400 | The parameters in the URL or in the request body aren't valid.
+401 | The provided credentials are invalid.
+403 | The action is not allowed given the provided credentials.
+404 | The requested resource doesn't exist.
+409 | The request conflicts with an existing resource.
+500 | The service has encountered an unexpected error.
+503 | The service is temporarily unavailable.
+
+Any `GET` request made to a API endpoint may return an HTTP redirect (301 or 302). Clients should gracefully handle
+such redirects by observing the `Location` header and issuing a subsequent `GET`. Documentation concerning specific
+endpoints will not explicitly call out where redirects may be used.
+
+In the case of a 500-level status code, the client can implement a reasonable retry mechanism. The official NuGet
+client retries three times when encountering any 500-level status code or TCP/DNS error.
+
+## HTTP request headers
+
+Name | Description
+------------------------ | -----------
+X-NuGet-ApiKey | Required for push and delete, see [`PackagePublish` resource](package-publish-resource.md)
+X-NuGet-Client-Version | **Deprecated** and replaced by `X-NuGet-Protocol-Version`
+X-NuGet-Protocol-Version | Required in certain cases only on nuget.org, see [nuget.org protocols](NuGet-Protocols.md)
+X-NuGet-Session-Id | *Optional*. NuGet clients v4.7+ identify HTTP requests that are part of the same NuGet client session.
+
+The `X-NuGet-Session-Id` has a single value for all operations related to a single restore in `PackageReference`. For
+other scenarios such as autocomplete and `packages.config` restore there may be several different session ID's due to
+how the code is factored.
+
+## Authentication
+
+Authentication is left up to the package source implementation to define. For nuget.org, only the `PackagePublish`
+resource requires authentication via a special API key header. See
+[`PackagePublish` resource](package-publish-resource.md) for details.
diff --git a/docs/api/package-base-address-resource.md b/docs/api/package-base-address-resource.md
new file mode 100644
index 000000000..56416a5d6
--- /dev/null
+++ b/docs/api/package-base-address-resource.md
@@ -0,0 +1,172 @@
+---
+title: Package Content, NuGet API
+description: The package base address is a simple interface for fetching the package itself.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Package Content
+
+It is possible to generate a URL to fetch an arbitrary package's content (the .nupkg file) using the V3 API. The
+resource used for fetching package content is the `PackageBaseAddress` resource found in the
+[service index](service-index.md). This resource also enables discovery of all versions of a package, listed or
+unlisted.
+
+This resource is commonly referred to as either the "package base address" or as the "flat container".
+
+## Versioning
+
+The following `@type` value is used:
+
+@type value | Notes
+------------------------ | -----
+PackageBaseAddress/3.0.0 | The initial release
+
+## Base URL
+
+The base URL for the following APIs is the value of the `@id` property associated with the aforementioned
+resource `@type` value. In the following document, the placeholder base URL `{@id}` will be used. The base URL may change based on implementation or infrastructure changes within the package source so it must be dynamically fetched from the [service index](service-index.md) by the client software.
+
+## HTTP methods
+
+All URLs found in the package content resource support the HTTP methods `GET` and `HEAD`.
+
+## Enumerate package versions
+
+If the client knows a package ID and wants to discover which package versions the package source has available, the client can construct a predictable URL to enumerate all package versions.
+Every version listed in this list must be available for download.
+This list is meant to be a "directory listing" for the package content API mentioned below.
+
+> [!Note]
+> This list contains both listed and unlisted package versions.
+
+```
+GET {@id}/{LOWER_ID}/index.json
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------- | ------ | ------- | -------- | -----
+LOWER_ID | URL | string | yes | The package ID, lowercased
+
+The `LOWER_ID` value is the desired package ID lowercased using the rules implemented by .NET's
+[`System.String.ToLowerInvariant()`](/dotnet/api/system.string.tolowerinvariant?view=netstandard-2.0#System_String_ToLowerInvariant&preserve-view=true) method.
+
+### Response
+
+If the package source has no versions of the provided package ID, a 404 status code is returned.
+
+If the package source has one or more versions, a 200 status code is returned. The response body is a JSON object with
+the following property:
+
+Name | Type | Required | Notes
+-------- | ---------------- | -------- | -----
+versions | array of strings | yes | The versions available
+
+The strings in the `versions` array are all lowercased,
+[normalized NuGet version strings](../concepts/package-versioning.md#normalized-version-numbers). The version
+strings do not contain any SemVer 2.0.0 build metadata.
+
+The intent is that the version strings found in this array can be used verbatim for the `LOWER_VERSION` tokens found
+in the following endpoints.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3-flatcontainer/owin/index.json
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3-flatcontainer/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-JSON [package-base-address-index.json](./_data/package-base-address-index.json)]
+
+## Download package content (.nupkg)
+
+If the client knows a package ID and version and wants to download the package content, they only need to construct the
+following URL:
+
+```
+GET {@id}/{LOWER_ID}/{LOWER_VERSION}/{LOWER_ID}.{LOWER_VERSION}.nupkg
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+------------- | ------ | ------ | -------- | -----
+LOWER_ID | URL | string | yes | The package ID, lowercase
+LOWER_VERSION | URL | string | yes | The package version, normalized and lowercased
+
+Both `LOWER_ID` and `LOWER_VERSION` are lowercased using the rules implemented by .NET's
+[`System.String.ToLowerInvariant()`](/dotnet/api/system.string.tolowerinvariant?view=netstandard-2.0#System_String_ToLowerInvariant&preserve-view=true)
+method.
+
+The `LOWER_VERSION` is the desired package version normalized using NuGet's version
+[normalization rules](../concepts/package-versioning.md#normalized-version-numbers). This means that build metadata
+that is allowed by the SemVer 2.0.0 specification must be excluded in this case.
+
+### Response body
+
+If the package exists on the package source, a 200 status code is returned. The response body will be the package
+content itself.
+
+If the package does not exist on the package source, a 404 status code is returned.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3-flatcontainer/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+The binary stream that is the .nupkg for Newtonsoft.Json 9.0.1.
+
+## Download package manifest (.nuspec)
+
+If the client knows a package ID and version and wants to download the package manifest, they only need to construct the
+following URL:
+
+```
+GET {@id}/{LOWER_ID}/{LOWER_VERSION}/{LOWER_ID}.nuspec
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+------------- | ------ | ------ | -------- | -----
+LOWER_ID | URL | string | yes | The package ID, lowercase
+LOWER_VERSION | URL | string | yes | The package version, normalized and lowercased
+
+Both `LOWER_ID` and `LOWER_VERSION` are lowercased using the rules implemented by .NET's
+[`System.String.ToLowerInvariant()`](/dotnet/api/system.string.tolowerinvariant?view=netstandard-2.0#System_String_ToLowerInvariant&preserve-view=true) method.
+
+The `LOWER_VERSION` is the desired package version normalized using NuGet's version
+[normalization rules](../concepts/package-versioning.md#normalized-version-numbers). This means that build metadata
+that is allowed by the SemVer 2.0.0 specification must be excluded in this case.
+
+### Response body
+
+If the package exists on the package source, a 200 status code is returned. The response body will be the package
+manifest, which is the .nuspec contained in the corresponding .nupkg. The .nuspec is an XML document.
+
+If the package does not exist on the package source, a 404 status code is returned.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/6.0.4/newtonsoft.json.nuspec
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3-flatcontainer/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-XML [newtonsoft.json.6.0.4.xml](./_data/newtonsoft.json.6.0.4.xml)]
diff --git a/docs/api/package-details-template-resource.md b/docs/api/package-details-template-resource.md
new file mode 100644
index 000000000..b2c7928f3
--- /dev/null
+++ b/docs/api/package-details-template-resource.md
@@ -0,0 +1,72 @@
+---
+title: Package Details URL Template, NuGet API
+description: The package details URL template allows clients to display in their UI a web link to more package details
+author: joelverhagen
+ms.author: jver
+ms.date: 3/1/2019
+ms.topic: reference
+ms.reviewer: ananguar
+---
+
+# Package details URL template
+
+It is possible for a client to build a URL that can be used by the user to see more package details in their web
+browser. This is useful when a package source wants to show additional information about a package that may not fit
+within the scope of what the NuGet client application shows.
+
+The resource used for building this URL is the `PackageDetailsUriTemplate` resource found in the
+[service index](service-index.md).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+------------------------------- | -----
+PackageDetailsUriTemplate/5.1.0 | The initial release
+
+## URL template
+
+The URL for the following API is the value of the `@id` property associated with one of the aforementioned
+resource `@type` values.
+
+## HTTP methods
+
+Although the client is not intended to make requests to the package details URL on behalf of the user, the web page
+should support the `GET` method to allow a clicked URL to be easily opened in a web browser.
+
+## Construct the URL
+
+Given a known package ID and version, the client implementation can construct a URL used to access a web interface. The
+client implementation should display this constructed URL (or clickable link) to the user allowing them to open a web
+browser to the URL and to learn more about the package. The contents of the package details page is determined by the
+server implementation.
+
+The URL must be an absolute URL and the scheme (protocol) must be HTTPS.
+
+The value of the `@id` in the service index is a URL string containing any of the following placeholder tokens:
+
+### URL placeholders
+
+Name | Type | Required | Notes
+----------- | ------- | -------- | -----
+`{id}` | string | no | The package ID to get details for
+`{version}` | string | no | The package version to get details for
+
+The server should accept `{id}` and `{version}` values with any casing. In addition, the server should not be sensitive
+to whether the version is
+[normalized](../concepts/package-versioning.md#normalized-version-numbers). In other
+words, the server should accept also accept non-normalized versions.
+
+For example, nuget.org's package details template looks like this:
+
+```http
+https://www.nuget.org/packages/{id}/{version}
+```
+
+If the client implementation needs to display a link to the package details for NuGet.Versioning 4.3.0, it would
+produce the following URL and provide it to the user:
+
+```http
+https://www.nuget.org/packages/NuGet.Versioning/4.3.0
+```
diff --git a/docs/api/package-publish-resource.md b/docs/api/package-publish-resource.md
new file mode 100644
index 000000000..57ffa8e46
--- /dev/null
+++ b/docs/api/package-publish-resource.md
@@ -0,0 +1,133 @@
+---
+title: Push and Delete, NuGet API
+description: The publish service allows clients to publish new packages and unlist or delete existing packages.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Push and Delete
+
+It is possible to push, delete (or unlist, depending on the server implementation), and relist packages using the NuGet
+V3 API. These operations are based off of the `PackagePublish` resource found in the [service index](service-index.md).
+
+## Versioning
+
+The following `@type` value is used:
+
+@type value | Notes
+-------------------- | -----
+PackagePublish/2.0.0 | The initial release
+
+## Base URL
+
+The base URL for the following APIs is the value of the `@id` property of the `PackagePublish/2.0.0` resource in the
+package source's [service index](service-index.md). For the documentation below, nuget.org's URL is used. Consider
+`https://www.nuget.org/api/v2/package` as a placeholder for the `@id` value found in the service index.
+
+Note that this URL points to the same location as the legacy V2 push endpoint since the protocol is the same.
+
+## HTTP methods
+
+The `PUT`, `POST` and `DELETE` HTTP methods are supported by this resource. For which methods are supported on each
+endpoint, see below.
+
+## Push a package
+
+> [!Note]
+> nuget.org has [additional requirements](NuGet-Protocols.md) for interacting with the push endpoint.
+
+nuget.org supports pushing new packages using the following API. If the package with the provided ID and version
+already exists, nuget.org will reject the push. Other package sources may support replacing an existing package.
+
+```
+PUT https://www.nuget.org/api/v2/package
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------------- | ------ | ------ | -------- | -----
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {USER_API_KEY}`
+
+The API key is an opaque string gotten from the package source by the user and configured into the client. No
+particular string format is mandated but the length of the API key should not exceed a reasonable size for HTTP header
+values.
+
+### Request body
+
+The request body must come in the following form:
+
+#### Multipart form data
+
+The request header `Content-Type` is `multipart/form-data` and the first item in the request body is the raw bytes of
+the .nupkg being pushed. Subsequent items in the multipart body are ignored. The file name or any other headers of the
+multipart items are ignored.
+
+### Response
+
+Status Code | Meaning
+----------- | -------
+201, 202 | The package was successfully pushed
+400 | The provided package is invalid
+409 | A package with the provided ID and version already exists
+
+Server implementations vary on the success status code returned when a package is successfully pushed.
+
+## Delete a package
+
+nuget.org interprets the package delete request as an "unlist". This means that the package is still available for
+existing consumers of the package but the package no longer appears in search results or in the web interface. For
+more information about this practice, see the
+[Deleted Packages](../nuget-org/policies/deleting-packages.md) policy. Other server
+implementations are free to interpret this signal as a hard delete, soft delete, or unlist. For example,
+[NuGet.Server](https://www.nuget.org/packages/NuGet.Server) (a server implementation only supporting the older V2 API)
+supports handling this request as either an unlist or a hard delete based on a configuration option.
+
+```
+DELETE https://www.nuget.org/api/v2/package/{ID}/{VERSION}
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------------- | ------ | ------ | -------- | -----
+ID | URL | string | yes | The ID of the package to delete
+VERSION | URL | string | yes | The version of the package to delete
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {USER_API_KEY}`
+
+### Response
+
+Status Code | Meaning
+----------- | -------
+204 | The package was deleted
+404 | No package with the provided `ID` and `VERSION` exists
+
+## Relist a package
+
+If a package is unlisted, it is possible to make that package once again visible in search results using the "relist"
+endpoint. This endpoint has the same shape as the [delete (unlist) endpoint](#delete-a-package) but uses the `POST`
+HTTP method instead of the `DELETE` method.
+
+If the package is already listed, the request still succeeds.
+
+```
+POST https://www.nuget.org/api/v2/package/{ID}/{VERSION}
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------------- | ------ | ------ | -------- | -----
+ID | URL | string | yes | The ID of the package to relist
+VERSION | URL | string | yes | The version of the package to relist
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {USER_API_KEY}`
+
+### Response
+
+Status Code | Meaning
+----------- | -------
+200 | The package is now listed
+404 | No package with the provided `ID` and `VERSION` exists
diff --git a/docs/api/rate-limits.md b/docs/api/rate-limits.md
new file mode 100644
index 000000000..f738504b6
--- /dev/null
+++ b/docs/api/rate-limits.md
@@ -0,0 +1,61 @@
+---
+title: Rate Limits, NuGet API
+description: The NuGet APIs will have enforced rate limits to prevent abuse.
+author: cmanu
+ms.author: cmanu
+ms.date: 03/20/2018
+ms.topic: reference
+ms.reviewer:
+ - skofman
+ - anangaur
+ - kraigb
+---
+
+# Rate Limits
+
+The NuGet.org API enforces rate limiting to prevent abuse. Requests that exceed the rate limit return the following error:
+
+ ~~~
+ {
+ "statusCode": 429,
+ "message": "Rate limit is exceeded. Try again in 56 seconds."
+ }
+ ~~~
+
+In addition to request throttling using rate limits, some APIs also enforce quota. Requests that exceed the quota return the following error:
+
+ ~~~
+ {
+ "statusCode": 403,
+ "message": "Quota exceeded."
+ }
+ ~~~
+
+The following tables list the rate limits for the NuGet.org API.
+
+## Package search
+
+> [!Note]
+> We recommend using NuGet.org's [V3 search APIs](search-query-service-resource.md) as it is not rate limited currently. For V1 and V2 search APIs, the following limits apply:
+
+| API | Limit Type | Limit Value | API Use Case |
+|:---|:---|:---|:---|
+**GET** `/api/v1/Packages` | IP | 1000 / minute | Query NuGet package metadata via v1 OData `Packages` collection |
+**GET** `/api/v1/Search()` | IP | 3000 / minute | Search for NuGet packages via v1 Search endpoint |
+**GET** `/api/v2/Packages` | IP | 20000 / minute | Query NuGet package metadata via v2 OData `Packages` collection |
+**GET** `/api/v2/Packages/$count` | IP | 100 / minute | Query NuGet package count via v2 OData `Packages` collection |
+
+## Package Push and Unlist
+
+| API | Limit Type | Limit Value | API Use Case |
+|:---|:---|:---|:--- |
+**PUT** `/api/v2/package` | API Key | 350 / hour | Upload a new NuGet package (version) via v2 push endpoint
+**DELETE** `/api/v2/package/{id}/{version}` | API Key | 250 / hour | Unlist a NuGet package (version) via v2 endpoint
+
+## nuget.org website page views
+
+If you are accessing the nuget.org web pages programmatically, consider investigating our documented [V3 APIs](overview.md). These endpoints allow for simpler access to package metadata and content. The V3 API has better availability and has higher performance than accessing the NuGet Gallery web pages, which are designed for web browser interaction.
+
+| API | Limit Type | Limit Value | API Use Case |
+|:---|:---|:---|:--- |
+**GET** `/package/{id}/{version}` | IP | 50 / minute | Display package (version) details page.
diff --git a/docs/api/readme-template-resource.md b/docs/api/readme-template-resource.md
new file mode 100644
index 000000000..565789ea7
--- /dev/null
+++ b/docs/api/readme-template-resource.md
@@ -0,0 +1,62 @@
+---
+title: README Uri Template, NuGet API
+description: The README uri template allows clients to download the readme for a package, if available.
+author: jgonz120
+ms.author: jongonza
+ms.date: 1/6/2025
+ms.topic: reference
+ms.reviewer:
+---
+
+# README Uri Template
+
+It is possible for a client to build a URL that can be used to download a README for a specific package.
+This will enable the clients to render the package's README without downloading the entire package.
+
+The resource used for building this URL is the `ReadmeUriTemplate` resource found in the
+[service index](service-index.md).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+--------------------------------- | -----
+ReadmeUriTemplate/6.13.0 | The initial release
+
+## URL template
+
+The URL for the following API is the value of the `@id` property associated with one of the aforementioned
+resource `@type` values.
+
+## HTTP methods
+
+The constructed URL must support the HTTP method `GET`
+
+## Construct the URL
+
+Given a known package ID and version, the client implementation can construct a URL to download the README.
+
+The value of the `@id` is a URL string containing any of the following placeholder tokens:
+
+### URL placeholders
+
+Name | Type | Required | Notes
+----------- | ------- | -------- | -----
+`{lower_id}` | string | yes | The package ID, lowercased
+`{lower_version}` | string | yes | The package version, lowercased
+
+Both `lower_id` and `lower_version` are lowercased using the rules implemented by .NET's
+[`System.String.ToLowerInvariant()`](/dotnet/api/system.string.tolowerinvariant?view=netstandard-2.0#System_String_ToLowerInvariant&preserve-view=true)
+method.
+
+The `lower_version` is the desired package version normalized using NuGet's version
+[normalization rules](../concepts/package-versioning.md#normalized-version-numbers). This means that build metadata
+that is allowed by the SemVer 2.0.0 specification must be excluded in this case.
+
+### Response body
+
+If the package has a readme, a 200 status code is returned. The response body will be the readme
+content itself.
+
+If the package does not have a readme, a 404 status code is returned.
diff --git a/docs/api/registration-base-url-resource.md b/docs/api/registration-base-url-resource.md
new file mode 100644
index 000000000..d76d47d2f
--- /dev/null
+++ b/docs/api/registration-base-url-resource.md
@@ -0,0 +1,365 @@
+---
+title: Package Metadata, NuGet API
+description: The package registration base URL allows fetching metadata about packages.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Package metadata
+
+It is possible to fetch metadata about the packages available on a package source using the NuGet V3 API. This
+metadata can be fetched using the `RegistrationsBaseUrl` resource found in the [service index](service-index.md).
+
+The collection of the documents found under `RegistrationsBaseUrl` are often called "registrations" or "registration
+blobs". The set of documents under a single `RegistrationsBaseUrl` is referred to as a "registration hive". A
+registration hive contains metadata about every package available on a package source.
+
+> [!Note]
+> The package metadata resource does not contain all metadata for packages.
+> Use the [search resource](search-query-service-resource.md) to find packages' owners, downloads, or prefix reservation status.
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+------------------------------- | -----
+RegistrationsBaseUrl | The initial release
+RegistrationsBaseUrl/3.0.0-beta | Alias of `RegistrationsBaseUrl`
+RegistrationsBaseUrl/3.0.0-rc | Alias of `RegistrationsBaseUrl`
+RegistrationsBaseUrl/3.4.0 | Gzipped responses
+RegistrationsBaseUrl/3.6.0 | Includes SemVer 2.0.0 packages
+
+This represents three distinct registration hives available for various client versions.
+
+### RegistrationsBaseUrl
+
+These registrations are not compressed (meaning they use an implied `Content-Encoding: identity`). SemVer 2.0.0
+packages are **excluded** from this hive.
+
+### RegistrationsBaseUrl/3.4.0
+
+These registrations are compressed using `Content-Encoding: gzip`. SemVer 2.0.0 packages are **excluded** from this
+hive.
+
+### RegistrationsBaseUrl/3.6.0
+
+These registrations are compressed using `Content-Encoding: gzip`. SemVer 2.0.0 packages are **included** in this hive.
+For more information about SemVer 2.0.0, see
+[SemVer 2.0.0 support for nuget.org](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29).
+
+## Base URL
+
+The base URL for the following APIs is the value of the `@id` property associated with the aforementioned
+resource `@type` values. In the following document, the placeholder base URL `{@id}` will be used. The base URL may change based on implementation or infrastructure changes within the package source so it must be dynamically fetched from the [service index](service-index.md) by the client software.
+
+## HTTP methods
+
+All URLs found in the registration resource support the HTTP methods `GET` and `HEAD`.
+
+## Registration index
+
+The registration resource groups package metadata by package ID. It is not possible to get data about more than one
+package ID at a time. This resource provides no way to discover package IDs. Instead the client is assumed to already
+know the desired package ID. Available metadata about each package version varies by server implementation. The package
+registration blobs have the following hierarchical structure:
+
+- **Index**: the entry point for the package metadata, shared by all packages on a source with the same package ID.
+- **Page**: a grouping of package versions. The number of package versions in a page is defined by server implementation.
+- **Leaf**: a document specific to a single package version.
+
+The URL of the registration index is predictable and can be determined by the client given a package ID and the
+registration resource's `@id` value from the service index. The URLs for the registration pages and leaves are
+discovered by inspecting the registration index.
+
+### Registration pages and leaves
+
+Although it's not strictly required for a server implementation to store registration leafs in seperate
+registration page documents, it's a recommended practice to conserve client-side memory. Instead of inlining all
+registration leaves in the index or immediately storing leaves in page documents, it's recommended that the server
+implementation define some heuristic to choose between the two approaches based on the number of package versions
+or cumulative size of package leaves.
+
+Storing all package versions (leaves) in the registration index saves on the number of HTTP requests necessary to fetch
+package metadata but means that a larger document must be downloaded and more client memory must be allocated. On the
+other hand, if the server implementation immediately stores registration leaves in seperate page documents, the client
+must perform more HTTP requests to get the information it needs.
+
+The heuristic that nuget.org uses is as follows: if there are 128 or more versions of a package, break the leaves
+into pages of size 64. If there are less than 128 versions, inline all leaves into the registration index. Note that
+this means packages with 65 to 127 versions will have two pages in the index but both pages will be inlined.
+
+```
+GET {@id}/{LOWER_ID}/index.json
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------- | ------ | ------- | -------- | -----
+LOWER_ID | URL | string | yes | The package ID, lowercased
+
+The `LOWER_ID` value is the desired package ID lowercased using the rules implemented by .NET's
+[`System.String.ToLowerInvariant()`](/dotnet/api/system.string.tolowerinvariant?view=netstandard-2.0#System_String_ToLowerInvariant&preserve-view=true) method.
+
+### Response
+
+The response is a JSON document which has a root object with the following properties:
+
+Name | Type | Required | Notes
+----- | ---------------- | -------- | -----
+count | integer | yes | The number of registration pages in the index
+items | array of objects | yes | The array of registration pages
+
+Each item in the index object's `items` array is a JSON object representing a registration page.
+
+#### Registration page object
+
+The registration page object found in the registration index has the following properties:
+
+Name | Type | Required | Notes
+------ | ---------------- | -------- | -----
+@id | string | yes | The URL to the registration page
+count | integer | yes | The number of registration leaves in the page
+items | array of objects | no | The array of registration leaves and their associate metadata
+lower | string | yes | The lowest SemVer 2.0.0 version in the page (inclusive)
+parent | string | no | The URL to the registration index
+upper | string | yes | The highest SemVer 2.0.0 version in the page (inclusive)
+
+The `lower` and `upper` bounds of the page object are useful when the metadata for a specific page version is needed.
+These bounds can be used to fetch the only registration page needed. The version strings adhere to
+[NuGet's version rules](../concepts/package-versioning.md). The version strings are normalized and do not include
+build metadata. As with all versions in the NuGet ecosystem, comparison of version strings is implemented using
+[SemVer 2.0.0's version precedence rules](https://semver.org/spec/v2.0.0.html#spec-item-11).
+
+The `parent` property will only appear if the registration page object has the `items` property.
+
+If the `items` property is not present in the registration page object, the URL specified in the `@id` must be used to
+fetch metadata about individual package versions. The `items` array is sometimes excluded from the page
+object as an optimization. If the number of versions of a single package ID is very large, then the registration index
+document will be massive and wasteful to process for a client that only cares about a specific version or small range
+of versions.
+
+Note that if the `items` property is present, the `@id` property need not be used, since all of the page data is
+already inlined in the `items` property.
+
+Each item in the page object's `items` array is a JSON object representing a registration leaf and it's associated
+metadata.
+
+#### Registration leaf object in a page
+
+The registration leaf object found in a registration page has the following properties:
+
+Name | Type | Required | Notes
+-------------- | ------ | -------- | -----
+@id | string | yes | The URL to the registration leaf
+catalogEntry | object | yes | The catalog entry containing the package metadata
+packageContent | string | yes | The URL to the package content (.nupkg)
+
+Each registration leaf object represents data associated with a single package version.
+
+#### Catalog entry
+
+The `catalogEntry` property in the registration leaf object has the following properties:
+
+Name | Type | Required | Notes
+------------------------ | -------------------------- | -------- | -----
+@id | string | yes | The URL to the document used to produce this object
+authors | string or array of strings | no |
+dependencyGroups | array of objects | no | The dependencies of the package, grouped by target framework
+deprecation | object | no | The deprecation associated with the package
+description | string | no |
+iconUrl | string | no |
+id | string | yes | The ID of the package
+language | string | no |
+licenseUrl | string | no |
+licenseExpression | string | no |
+listed | boolean | no | Should be considered as listed if absent
+minClientVersion | string | no |
+packageContent | string | no | Duplicate of the same property in the parent object, included only for legacy reasons
+projectUrl | string | no |
+published | string | no | A string containing a ISO 8601 timestamp of when the package was published
+readmeUrl | string | no | A URL for the rendered (HTML web page) view of the package README
+requireLicenseAcceptance | boolean | no |
+summary | string | no |
+tags | string or array of strings | no |
+title | string | no |
+version | string | yes | The full version string after normalization
+vulnerabilities | array of objects | no | The security vulnerabilities of the package
+
+The package `version` property is the full version string after normalization. This means that SemVer 2.0.0 build data
+can be included here.
+
+The `dependencyGroups` property is an array of objects representing the dependencies of the package, grouped by target
+framework. If the package has no dependencies, the `dependencyGroups` property is missing, an empty array, or the
+`dependencies` property of all groups is empty or missing.
+
+The value of the `licenseExpression` property complies with
+[NuGet license expression syntax](../reference/nuspec.md#license).
+
+> [!Note]
+> On nuget.org, the `published` value is set to year 1900 when the package is unlisted.
+
+#### Package dependency group
+
+Each dependency group object has the following properties:
+
+Name | Type | Required | Notes
+--------------- | ---------------- | -------- | -----
+targetFramework | string | no | The target framework that these dependencies are applicable to
+dependencies | array of objects | no |
+
+The `targetFramework` string uses the format implemented by NuGet's .NET library
+[NuGet.Frameworks](https://www.nuget.org/packages/NuGet.Frameworks/). If no `targetFramework` is specified, the
+dependency group applies to all target frameworks.
+
+The `dependencies` property is an array of objects, each representing a package dependency of the current package.
+
+#### Package dependency
+
+Each package dependency has the following properties:
+
+Name | Type | Required | Notes
+------------ | ------ | -------- | -----
+id | string | yes | The ID of the package dependency
+range | object | no | The allowed [version range](../concepts/package-versioning.md#version-ranges) of the dependency
+registration | string | no | The URL to the registration index for this dependency
+
+If the `range` property is excluded or an empty string, the client should default to the version range `(, )`. That is,
+any version of the dependency is allowed. The value of `*` is not allowed for the `range` property.
+
+#### Package deprecation
+
+Each package deprecation has the following properties:
+
+Name | Type | Required | Notes
+---------------- | ---------------- | -------- | -----
+reasons | array of strings | yes | The reasons why the package was deprecated
+message | string | no | The additional details about this deprecation
+alternatePackage | object | no | The alternate package that should be used instead
+
+The `reasons` property must contain at least one string and should only contains strings from the following table:
+
+Reason | Description
+------------ | -----------
+Legacy | The package is no longer maintained
+CriticalBugs | The package has bugs which make it unsuitable for usage
+Other | The package is deprecated due to a reason not on this list
+
+If the `reasons` property contains strings that are not from the known set, they should be ignored. The strings are case-insensitive, so `legacy` should be treated the same as `Legacy`. There is no ordering restriction on the array, so the strings can arranged in any arbitrary order. Additionally, if the property contains only strings that are not from the known set, it should be treated as if it only contained the "Other" string.
+
+#### Alternate package
+
+The alternate package object has the following properties:
+
+Name | Type | Required | Notes
+------------ | ------ | -------- | -----
+id | string | yes | The ID of the alternate package
+range | object | no | The allowed [version range](../concepts/package-versioning.md#version-ranges), or `*` if any version is allowed
+
+#### Vulnerabilities
+
+An array of `vulnerability` objects. Each vulnerability has the following properties:
+
+Name | Type | Required | Notes
+------------ | ------ | -------- | -----
+advisoryUrl | string | yes | Location of security advisory for the package
+severity | string | yes | Severity of advisory: "0" = Low, "1" = Moderate, "2" = High, "3" = Critical
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3/registration-sample/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-JSON [package-registration-index.json](./_data/package-registration-index.json)]
+
+In this particular case, the registration index has the registration page inlined so no extra requests are needed to
+fetch metadata about individual package versions.
+
+## Registration page
+
+The registration page contains registration leaves. The URL to fetch a registration page is determined by the `@id`
+property in the [registration page object](#registration-page-object) mentioned above. The URL is not meant to be
+predictable and should always be discovered by means of the index document.
+
+> [!Warning]
+> On nuget.org, the URL for the registration page document coincidentally contains the lower and upper bound of the
+> page. However this assumption should never be made by a client since server implementations are free to change the
+> shape of the URL as long as the index document has a valid link.
+
+When the `items` array is not provided in the registration index, an HTTP GET request of the `@id` value will return a
+JSON document which has an object as its root. The object has the following properties:
+
+Name | Type | Required | Notes
+------ | ---------------- | -------- | -----
+@id | string | yes | The URL to the registration page
+count | integer | yes | The number of registration leaves in the page
+items | array of objects | yes | The array of registration leaves and their associate metadata
+lower | string | yes | The lowest SemVer 2.0.0 version in the page (inclusive)
+parent | string | yes | The URL to the registration index
+upper | string | yes | The highest SemVer 2.0.0 version in the page (inclusive)
+
+The shape of the registration leaf objects is the same as in the registration index
+[above](#registration-leaf-object-in-a-page).
+
+## Sample request
+
+```
+GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3/registration-sample/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+## Sample response
+
+[!code-JSON [package-registration-page.json](./_data/package-registration-page.json)]
+
+## Registration leaf
+
+The registration leaf contains information about a specific package ID and version. The metadata about the specific
+version may not be available in this document. Package metadata should be fetched from the
+[registration index](#registration-index) or the [registration page](#registration-page) (which is discovered using
+the registration index).
+
+The URL to fetch a registration leaf is obtained from the `@id` property of a registration leaf object in either a
+registration index or registration page. As with the page document. the URL is not meant to be predictable and should
+always be discovered by means of the registration page object.
+
+> [!Warning]
+> On nuget.org, the URL for the registration leaf document coincidentally contains the package version. However this
+> assumption should never be made by a client since server implementations are free to change the shape of the URL as
+> long as the parent document has a valid link.
+
+The registration leaf is a JSON document with a root object with the following properties:
+
+Name | Type | Required | Notes
+-------------- | ------- | -------- | -----
+@id | string | yes | The URL to the registration leaf
+catalogEntry | string | no | The URL to the catalog entry that produced these leaf
+listed | boolean | no | Should be considered as listed if absent
+packageContent | string | no | The URL to the package content (.nupkg)
+published | string | no | A string containing a ISO 8601 timestamp of when the package was published
+registration | string | no | The URL to the registration index
+
+> [!Note]
+> On nuget.org, the `published` value is set to year 1900 when the package is unlisted.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json
+```
+
+Make sure to fetch the base URL (`https://api.nuget.org/v3/registration-sample/` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-JSON [package-registration-leaf.json](./_data/package-registration-leaf.json)]
diff --git a/docs/api/report-abuse-resource.md b/docs/api/report-abuse-resource.md
new file mode 100644
index 000000000..dd052189a
--- /dev/null
+++ b/docs/api/report-abuse-resource.md
@@ -0,0 +1,69 @@
+---
+title: Report Abuse URL Template, NuGet API
+description: The report abuse URL template allows clients to display a report abuse link in their UI.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Report abuse URL template
+
+It is possible for a client to build a URL that can be used by the user to report abuse about a specific package. This
+is useful when a package source wants to enable all client experiences (even 3rd party) to delegate abuse reports to
+the package source.
+
+The resource used for building this URL is the `ReportAbuseUriTemplate` resource found in the
+[service index](service-index.md).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+--------------------------------- | -----
+ReportAbuseUriTemplate/3.0.0-beta | The initial release
+ReportAbuseUriTemplate/3.0.0-rc | Alias of `ReportAbuseUriTemplate/3.0.0-beta`
+
+## URL template
+
+The URL for the following API is the value of the `@id` property associated with one of the aforementioned
+resource `@type` values.
+
+## HTTP methods
+
+Although the client is not intended to make requests to the report abuse URL on behalf of the user, the web page
+should support the `GET` method to allow a clicked URL to be easily opened in a web browser.
+
+## Construct the URL
+
+Given a known package ID and version, the client implementation can construct a URL used to access a web interface. The
+client implementation should display this constructed URL (or clickable link) to the user allowing them to open a web
+browser to the URL and make any necessary abuse report. The implementation of the abuse report form is determined by
+the server implementation.
+
+The value of the `@id` is a URL string containing any of the following placeholder tokens:
+
+### URL placeholders
+
+Name | Type | Required | Notes
+----------- | ------- | -------- | -----
+`{id}` | string | no | The package ID to report abuse for
+`{version}` | string | no | The package version to report abuse for
+
+The `{id}` and `{version}` values interpreted by the server implementation must be case insensitive and not sensitive to
+whether the version is normalized.
+
+For example, nuget.org's report abuse template looks like this:
+
+```
+https://www.nuget.org/packages/{id}/{version}/ReportAbuse
+```
+
+If the client implementation needs to display a link to the report abuse form for NuGet.Versioning 4.3.0, it would
+produce the following URL and provide it to the user:
+
+```
+https://www.nuget.org/packages/NuGet.Versioning/4.3.0/ReportAbuse
+```
diff --git a/docs/api/repository-signatures-resource.md b/docs/api/repository-signatures-resource.md
new file mode 100644
index 000000000..4d8befdd0
--- /dev/null
+++ b/docs/api/repository-signatures-resource.md
@@ -0,0 +1,118 @@
+---
+title: Repository Signatures, NuGet API | Microsoft Docs
+author: joelverhagen
+ms.author: jver
+ms.date: 3/2/2018
+ms.topic: reference
+description: The repository signatures resource allows clients package sources to announce their repository signing capabilities.
+ms.reviewer:
+ - karann
+ - unniravindranathan
+---
+
+# Repository signatures
+
+If a package source supports adding repository signatures to published packages, it is possible for a client to
+determine the signing certificates that are used by the package source. This resource allows clients to detect
+whether a repository signed package has been tampered or has an unexpected signing certificate.
+
+The resource used for fetching this repository signature information is the `RepositorySignatures` resource found in
+the [service index](service-index.md).
+
+## Versioning
+
+The following `@type` value is used:
+
+@type value | Notes
+-------------------------- | -----
+RepositorySignatures/4.7.0 | The initial release
+RepositorySignatures/4.9.0 | Supported by NuGet v4.9+ clients
+RepositorySignatures/5.0.0 | Allows enabling `allRepositorySigned`. Supported by NuGet v5.0+ clients
+
+## Base URL
+
+The entry point URL for the following APIs is the value of the `@id` property associated with the aforementioned
+resource `@type` value. This topic uses the placeholder URL `{@id}`.
+
+Note that unlike other resources, the `{@id}` URL is required to be served over HTTPS.
+
+## HTTP methods
+
+All URLs found in the repository signatures resource support only the HTTP methods `GET` and `HEAD`.
+
+## Repository signatures index
+
+The repository signatures index contains two pieces of information:
+
+1. Whether or not all packages found on the source are repository signed by this package source.
+1. The list of certificates used by the package source to sign packages.
+
+In most cases, the list of certificates will only ever be appended to. New certificates would be added to the list when
+the previous signing certificate has expired and the package source needs to start using a new signing certificate. If
+a certificate is removed from the list, that means that all package signatures created with the removed signing
+certificate should no longer be considered valid by the client. In this case, the package signature (but not
+necessarily the package) is invalid. A client policy may allow installing the package as unsigned.
+
+In the case of certificate revocation (e.g. key compromise), the package source is expected to re-sign all packages signed by the affected certificate. Additionally, the package source should remove the affected certificate from the
+signing certificate list.
+
+The following request fetches the repository signatures index.
+
+```
+GET {@id}
+```
+
+The repository signature index is a JSON document that contains an object with the following properties:
+
+Name | Type | Required | Notes
+------------------- | ---------------- | -------- | -----
+allRepositorySigned | boolean | yes | Must be `false` on 4.7.0 and 4.9.0 resources
+signingCertificates | array of objects | yes |
+
+The `allRepositorySigned` boolean is set to false if the package source has some packages that have no repository
+signature. If the boolean is set to true, all packages available on the source must have a repository
+signature produced by one of the signing certificates mentioned in `signingCertificates`.
+
+> [!Warning]
+> The `allRepositorySigned` boolean must be false on the 4.7.0 and 4.9.0 resources. NuGet v4.7, v4.8, and v4.9 clients cannot
+> install packages from sources that have `allRepositorySigned` set to true.
+
+There should be one or more signing certificates in the `signingCertificates` array if the `allRepositorySigned` boolean
+is set to true. If the array is empty and `allRepositorySigned` is set to true, all packages from the source should be
+considered invalid, although a client policy may still allow consumption of packages. Each element in this array is a
+JSON object with the following properties.
+
+Name | Type | Required | Notes
+------------ | ------ | -------- | -----
+contentUrl | string | yes | Absolute URL to the DER-encoded public certificate
+fingerprints | object | yes |
+subject | string | yes | The subject distinguished name from the certificate
+issuer | string | yes | The distinguished name of the certificate's issuer
+notBefore | string | yes | The starting timestamp of the certificate's validity period
+notAfter | string | yes | The ending timestamp of the certificate's validity period
+
+Note that the `contentUrl` is required to be served over HTTPS. This URL has no specific URL pattern and must be
+dynamically discovered using this repository signatures index document.
+
+All properties in this object (aside from `contentUrl`) must be derivable from the certificate found at `contentUrl`.
+These derivable properties are provided as a convenience to minimize round trips.
+
+The `fingerprints` object has the following properties:
+
+Name | Type | Required | Notes
+---------------------- | ------ | -------- | -----
+2.16.840.1.101.3.4.2.1 | string | yes | The SHA-256 fingerprint
+
+The key name `2.16.840.1.101.3.4.2.1` is the OID of the SHA-256 hash algorithm.
+
+All hash values must be lowercase, hex-encoded string representations of the hash digest.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3-index/repository-signatures/5.0.0/index.json
+```
+
+### Sample response
+
+[!code-JSON [repository-signatures-index.json](./_data/repository-signatures-index.json)]
diff --git a/docs/api/search-autocomplete-service-resource.md b/docs/api/search-autocomplete-service-resource.md
new file mode 100644
index 000000000..5f8efe82a
--- /dev/null
+++ b/docs/api/search-autocomplete-service-resource.md
@@ -0,0 +1,154 @@
+---
+title: Autocomplete, NuGet API
+description: The search autocomplete service supports interactive discovery of package IDs and versions.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Autocomplete
+
+It is possible to build a package ID and version autocomplete experience using the V3 API. The resource used for making
+autocomplete queries is the `SearchAutocompleteService` resource found in the [service index](service-index.md).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+------------------------------------ | -----
+SearchAutocompleteService | The initial release
+SearchAutocompleteService/3.0.0-beta | Alias of `SearchAutocompleteService`
+SearchAutocompleteService/3.0.0-rc | Alias of `SearchAutocompleteService`
+SearchAutocompleteService/3.5.0 | Includes support for `packageType` query parameter
+
+### SearchAutocompleteService/3.5.0
+This version introduces support for the `packageType` query parameter, allowing filtering by author defined package types. It is fully backwards compatible with queries to `SearchAutocompleteService`.
+
+## Base URL
+
+The base URL for the following APIs is the value of the `@id` property associated with one of the aforementioned
+resource `@type` values. In the following document, the placeholder base URL `{@id}` will be used. The base URL may change based on implementation or infrastructure changes within the package source so it must be dynamically fetched from the [service index](service-index.md) by the client software.
+
+## HTTP Methods
+
+All URLs found in the registration resource support the HTTP methods `GET` and `HEAD`.
+
+## Search for package IDs
+
+The first autocomplete API supports searching for part of a package ID string. This is great when you want to provide
+a package typeahead feature in a user interface integrated with a NuGet package source.
+
+A package with only unlisted versions will not appear in the results.
+
+```
+GET {@id}?q={QUERY}&skip={SKIP}&take={TAKE}&prerelease={PRERELEASE}&semVerLevel={SEMVERLEVEL}&packageType={PACKAGETYPE}
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+----------- | ------ | ------- | -------- | -----
+q | URL | string | no | The string to compare against package IDs
+skip | URL | integer | no | The number of results to skip, for pagination
+take | URL | integer | no | The number of results to return, for pagination
+prerelease | URL | boolean | no | `true` or `false` determining whether to include [pre-release packages](../create-packages/prerelease-packages.md)
+semVerLevel | URL | string | no | A SemVer 1.0.0 version string
+packageType | URL | string | no | The package type to use to filter packages (added in `SearchAutocompleteService/3.5.0`)
+
+The autocomplete query `q` is parsed in a manner that is defined by the server implementation. nuget.org supports
+querying for the prefix of package ID tokens, which are pieces of the ID produced by splitting the original by camel
+case and symbol characters.
+
+The `skip` parameter defaults to 0.
+
+The `take` parameter should be an integer greater than zero. The server implementation may impose a maximum value.
+
+If `prerelease` is not provided, pre-release packages are excluded.
+
+The `semVerLevel` query parameter is used to opt-in to
+[SemVer 2.0.0 packages](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29#identifying-semver-v200-packages).
+If this query parameter is excluded, only package IDs with SemVer 1.0.0 compatible versions will be returned (with the
+[standard NuGet versioning](../concepts/package-versioning.md) caveats, such as version strings with 4 integer pieces).
+If `semVerLevel=2.0.0` is provided, both SemVer 1.0.0 and SemVer 2.0.0 compatible packages will be returned. See the
+[SemVer 2.0.0 support for nuget.org](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29)
+for more information.
+
+The `packageType` parameter is used to further filter the autocomplete results to only packages that have at least one package type matching the package type name.
+If the provided package type is not a valid package type as defined by the [Package Type document](https://github.com/NuGet/Home/wiki/Package-Type-%5BPacking%5D), an empty result will returned.
+If the provided package type is empty, no filter will be applied. In other words, passing no value to the `packageType` parameter will behave as if the parameter was not passed.
+
+### Response
+
+The response is JSON document containing up to `take` autocomplete results.
+
+The root JSON object has the following properties:
+
+Name | Type | Required | Notes
+--------- | ---------------- | -------- | -----
+totalHits | integer | yes | The total number of matches, disregarding `skip` and `take`
+data | array of strings | yes | The package IDs matched by the request
+
+### Sample request
+
+```
+GET https://search-sample.nuget.org/autocomplete?q=storage&prerelease=true
+```
+
+Make sure to fetch the base URL (`https://search-sample.nuget.org/autocomplete` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-JSON [autocomplete-id-result.json](./_data/autocomplete-id-result.json)]
+
+## Enumerate package versions
+
+Once a package ID is discovered using the previous API, a client can use the autocomplete API to enumerate package
+versions for a provided package ID.
+
+A package version that is unlisted will not appear in the results.
+
+```
+GET {@id}?id={ID}&prerelease={PRERELEASE}&semVerLevel={SEMVERLEVEL}
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+----------- | ------ | ------- | -------- | -----
+id | URL | string | yes | The package ID to fetch versions for
+prerelease | URL | boolean | no | `true` or `false` determining whether to include [pre-release packages](../create-packages/prerelease-packages.md)
+semVerLevel | URL | string | no | A SemVer 2.0.0 version string
+
+If `prerelease` is not provided, pre-release packages are excluded.
+
+The `semVerLevel` query parameter is used to opt-in to SemVer 2.0.0 packages. If this query parameter is excluded, only
+SemVer 1.0.0 versions will be returned. If `semVerLevel=2.0.0` is provided, both SemVer 1.0.0 and SemVer 2.0.0 versions
+will be returned. See the [SemVer 2.0.0 support for nuget.org](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29)
+for more information.
+
+### Response
+
+The response is JSON document containing all package versions of the provided package ID, filtering by the given query
+parameters.
+
+The root JSON object has the following property:
+
+Name | Type | Required | Notes
+--------- | ---------------- | -------- | -----
+data | array of strings | yes | The package versions matched by the request
+
+The package versions in the `data` array may contain SemVer 2.0.0 build metadata (e.g. `1.0.0+metadata`) if the
+`semVerLevel=2.0.0` is provided in the query string.
+
+### Sample request
+
+```
+GET https://api-v2v3search-0.nuget.org/autocomplete?id=nuget.protocol&prerelease=true
+```
+
+### Sample response
+
+[!code-JSON [autocomplete-version-result.json](./_data/autocomplete-version-result.json)]
diff --git a/docs/api/search-query-service-resource.md b/docs/api/search-query-service-resource.md
new file mode 100644
index 000000000..e4466d5e1
--- /dev/null
+++ b/docs/api/search-query-service-resource.md
@@ -0,0 +1,153 @@
+---
+title: Search, NuGet API
+description: The search service allows clients to query for packages by keyword and to filter results on certain package fields.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Search
+
+It is possible to search for packages available on a package source using the V3 API. The resource used for searching
+is the `SearchQueryService` resource found in the [service index](service-index.md).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+----------------------------- | -----
+SearchQueryService | The initial release
+SearchQueryService/3.0.0-beta | Alias of `SearchQueryService`
+SearchQueryService/3.0.0-rc | Alias of `SearchQueryService`
+SearchQueryService/3.5.0 | Includes support for `packageType` query parameter
+
+### SearchQueryService/3.5.0
+This version introduces support for the `packageType` query parameter and the `packageTypes` response property, allowing filtering by author defined package types. It is fully backwards compatible with queries to `SearchQueryService`.
+
+## Base URL
+
+The base URL for the following API is the value of the `@id` property associated with one of the aforementioned
+resource `@type` values. In the following document, the placeholder base URL `{@id}` will be used. The base URL may change based on implementation or infrastructure changes within the package source so it must be dynamically fetched from the [service index](service-index.md) by the client software.
+
+## HTTP methods
+
+All URLs found in the registration resource support the HTTP methods `GET` and `HEAD`.
+
+## Search for packages
+
+The search API allows a client to query for a page of packages matching a specified search query. The interpretation
+of the search query (e.g. the tokenization of the search terms) is determined by the server implementation but the
+general expectation is that the search query is used for matching package IDs, titles, descriptions, and tags. Other
+package metadata fields may also be considered.
+
+An unlisted package should never appear in search results.
+
+```
+GET {@id}?q={QUERY}&skip={SKIP}&take={TAKE}&prerelease={PRERELEASE}&semVerLevel={SEMVERLEVEL}&packageType={PACKAGETYPE}
+```
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+----------- | ------ | ------- | -------- | -----
+q | URL | string | no | The search terms to used to filter packages
+skip | URL | integer | no | The number of results to skip, for pagination
+take | URL | integer | no | The number of results to return, for pagination
+prerelease | URL | boolean | no | `true` or `false` determining whether to include [pre-release packages](../create-packages/prerelease-packages.md)
+semVerLevel | URL | string | no | A SemVer 1.0.0 version string
+packageType | URL | string | no | The package type to use to filter packages (added in `SearchQueryService/3.5.0`)
+
+The search query `q` is parsed in a manner that is defined by the server implementation. nuget.org supports basic
+filtering on a [variety of fields](../consume-packages/finding-and-choosing-packages.md#search-syntax). If no
+`q` is provided, all packages should be returned, within the boundaries imposed by skip and take. This enables the
+"Browse" tab in the NuGet Visual Studio experience.
+
+The `skip` parameter defaults to 0.
+
+The `take` parameter should be an integer greater than zero. The server implementation may impose a maximum value.
+
+> [!Note]
+> nuget.org limits the `skip` parameter to 3,000 and the `take` parameter to 1,000.
+
+If `prerelease` is not provided, pre-release packages are excluded.
+
+The `semVerLevel` query parameter is used to opt-in to
+[SemVer 2.0.0 packages](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29#identifying-semver-v200-packages).
+If this query parameter is excluded, only packages with SemVer 1.0.0 compatible versions will be returned (with the
+[standard NuGet versioning](../concepts/package-versioning.md) caveats, such as version strings with 4 integer pieces).
+If `semVerLevel=2.0.0` is provided, both SemVer 1.0.0 and SemVer 2.0.0 compatible packages will be returned. See the
+[SemVer 2.0.0 support for nuget.org](https://github.com/NuGet/Home/wiki/SemVer2-support-for-nuget.org-%28server-side%29)
+for more information.
+
+The `packageType` parameter is used to further filter the search results to only packages that have at least one package type matching the package type name.
+If the provided package type is not a valid package type as defined by the [Package Type document](https://github.com/NuGet/Home/wiki/Package-Type-%5BPacking%5D), an empty result will returned.
+If the provided package type is empty, no filter will be applied. In other words, passing no value to the packageType parameter will behave as if the parameter was not passed.
+
+### Response
+
+The response is JSON document containing up to `take` search results. Search results are grouped by package ID.
+
+The root JSON object has the following properties:
+
+Name | Type | Required | Notes
+--------- | ---------------- | -------- | -----
+totalHits | integer | yes | The total number of matches, disregarding `skip` and `take`
+data | array of objects | yes | The search results matched by the request
+
+### Search result
+
+Each item in the `data` array is a JSON object comprised of a group of package versions sharing the same package ID.
+The object has the following properties:
+
+Name | Type | Required | Notes
+-------------- | -------------------------- | -------- | -----
+id | string | yes | The ID of the matched package
+version | string | yes | The full SemVer 2.0.0 version string of the package (could contain build metadata)
+description | string | no |
+versions | array of objects | yes | All of the versions of the package matching the `prerelease` parameter
+authors | string or array of strings | no |
+iconUrl | string | no |
+licenseUrl | string | no |
+owners | string or array of strings | no | A string represents a single owner's username
+projectUrl | string | no |
+registration | string | no | The absolute URL to the associated [registration index](registration-base-url-resource.md#registration-index)
+summary | string | no |
+tags | string or array of strings | no |
+title | string | no |
+totalDownloads | integer | no | This value can be inferred by the sum of downloads in the `versions` array
+verified | boolean | no | A JSON boolean indicating whether the package is [verified](../nuget-org/id-prefix-reservation.md)
+packageTypes | array of objects | yes | The package types defined by the package author (added in `SearchQueryService/3.5.0`)
+
+On nuget.org, a verified package is one which has a package ID matching a reserved ID prefix and owned by one of the
+reserved prefix's owners. For more information, see the
+[documentation about ID prefix reservation](../nuget-org/id-prefix-reservation.md).
+
+The metadata contained in the search result object is taken from the latest package version. Each item in the
+`versions` array is a JSON object with the following properties:
+
+Name | Type | Required | Notes
+--------- | ------- | -------- | -----
+@id | string | yes | The absolute URL to the associated [registration leaf](registration-base-url-resource.md#registration-leaf)
+version | string | yes | The full SemVer 2.0.0 version string of the package (could contain build metadata)
+downloads | integer | yes | The number of downloads for this specific package version
+
+The `packageTypes` array will always consist of at least one (1) item. Package type for a given package ID is considered to be the package types defined by the latest version of the package with respect to the other search parameters. Each item in the `packageTypes` array is a JSON object with the following properties:
+
+Name | Type | Required | Notes
+--------- | ------- | -------- | -----
+name | string | yes | The name of the package type.
+
+### Sample request
+
+```
+GET https://search-sample.nuget.org/query?q=NuGet.Versioning&prerelease=false&semVerLevel=2.0.0
+```
+
+Make sure to fetch the base URL (`https://search-sample.nuget.org/query` in this sample) from the service index as mentioned in the [base URL](#base-url) section.
+
+### Sample response
+
+[!code-JSON [search-result.json](./_data/search-result.json)]
diff --git a/docs/api/service-index.md b/docs/api/service-index.md
new file mode 100644
index 000000000..369bdbc16
--- /dev/null
+++ b/docs/api/service-index.md
@@ -0,0 +1,80 @@
+---
+title: Service Index, NuGet API
+description: The service index is the entry point of the NuGet HTTP API and enumerates the capabilities of the server.
+author: joelverhagen
+ms.author: jver
+ms.date: 10/26/2017
+ms.topic: reference
+ms.reviewer: kraigb
+---
+
+# Service index
+
+The service index is a JSON document that is the entry point for a NuGet package source and allows a client
+implementation to discover the package source's capabilities. The service index is a JSON object with two required
+properties: `version` (the schema version of the service index) and `resources` (the endpoints or capabilities of the
+package source).
+
+nuget.org's service index is located at `https://api.nuget.org/v3/index.json`.
+
+## Versioning
+
+The `version` value is a SemVer 2.0.0 parseable version string which indicates the schema version of the service index. The API mandates that the version string has a major version number of `3`. As non-breaking changes are made to the service index schema, the version string's minor version will be increased.
+
+Each resource in the service index is versioned independently from the service index schema version.
+
+The current schema version is `3.0.0`. The `3.0.0` version is functionally equivalent to the older `3.0.0-beta.1`
+version but should be preferred as it more clearly communicates the stable, defined schema.
+
+## HTTP methods
+
+The service index is accessible using HTTP methods `GET` and `HEAD`.
+
+## Resources
+
+The `resources` property contains an array of resources supported by this package source.
+
+### Resource
+
+A resource is an object in the `resources` array. It represents a versioned capability of a package source. A
+resource has the following properties:
+
+Name | Type | Required | Notes
+------------- | ------ | -------- | -----
+@id | string | yes | The URL to the resource
+@type | string | yes | A string constant representing the resource type
+comment | string | no | A human readable description of the resource
+
+The `@id` is a URL that must be absolute and must either have the HTTP or HTTPS schema.
+
+The `@type` is used to identify the specific protocol to use when interacting with resource. The type of the resource
+is an opaque string but generally has the format:
+
+```
+{RESOURCE_NAME}/{RESOURCE_VERSION}
+```
+
+Clients are expected to hard code the `@type` values that they understand and look them up in a package source's
+service index. The exact `@type` values in use today are enumerated on the individual resource reference documents
+listed in the [API overview](overview.md#resources-and-schema).
+
+For the sake of this documentation, the documentation about different resources will essentially be grouped by the
+`{RESOURCE_NAME}` found in the service index which is analogous to grouping by scenario.
+
+There is no requirement that each resource has a unique `@id` or `@type`. It is up to the client implementation to
+determine which resource to prefer over another. One possible implementation is that resources of the same or
+compatible `@type` can be used in a round-robin fashion in case of connection failure or server error.
+
+A resource can use a different host or domain than the service index, but this may cause issues in environments with strict network rules.
+In particular, if your service index adds resources that point directly to nuget.org (rather than proxying or caching through your own feed), your feed will not work where access to nuget.org is blocked.
+If your feed is going to delegate particular resources to nuget.org, we recommend adding a configuration so that when your feed is deployed, the direct nuget.org reference can be removed from the service index.
+
+### Sample request
+
+```
+GET https://api.nuget.org/v3/index.json
+```
+
+### Sample response
+
+[!code-JSON [service-index.json](./_data/service-index.json)]
diff --git a/docs/api/symbol-package-publish-resource.md b/docs/api/symbol-package-publish-resource.md
new file mode 100644
index 000000000..77d7106c9
--- /dev/null
+++ b/docs/api/symbol-package-publish-resource.md
@@ -0,0 +1,75 @@
+---
+title: Push Symbol Packages, NuGet API | Microsoft Docs
+author: cristinamanum
+ms.author: cmanu
+manager: skofman
+ms.date: 10/30/2018
+ms.topic: reference
+ms.technology: null
+description: The publish service allows clients to publish new symbol packages.
+keywords: NuGet API push symbol package
+ms.reviewer: karann
+---
+
+# Push Symbol Packages
+
+It is possible to push symbols packages ([snupkg](../create-packages/Symbol-Packages-snupkg.md)) using the NuGet V3 API.
+These operations are based off of the `SymbolPackagePublish` resource found in the [service index](service-index.md).
+
+## Versioning
+
+The following `@type` value is used:
+
+@type value | Notes
+-------------------- | -----
+SymbolPackagePublish/4.9.0 | The initial release
+
+## Base URL
+
+The base URL for the following APIs is the value of the `@id` property of the `SymbolPackagePublish/4.9.0` resource in the
+package source's [service index](service-index.md). For the documentation below, nuget.org's URL is used. Consider
+`https://www.nuget.org/api/v2/symbolpackage` as a placeholder for the `@id` value found in the service index.
+
+## HTTP methods
+
+The `PUT` HTTP method is supported by this resource.
+
+## Push a symbol package
+
+nuget.org supports pushing new symbol packages format ([snupkg](../create-packages/Symbol-Packages-snupkg.md)) using the following API.
+
+```
+PUT https://www.nuget.org/api/v2/symbolpackage
+```
+
+Symbol packages with the same ID and version
+can be submitted multiple times. A symbol package will be rejected in the following cases.
+- A package with the same ID and version does not exist.
+- A symbol package with the same ID and version was pushed but is not yet published.
+- The symbol package ([snupkg](../create-packages/Symbol-Packages-snupkg.md)) is invalid (see [symbol package constraints](../create-packages/Symbol-Packages-snupkg.md)).
+
+### Request parameters
+
+Name | In | Type | Required | Notes
+-------------- | ------ | ------ | -------- | -----
+X-NuGet-ApiKey | Header | string | yes | For example, `X-NuGet-ApiKey: {USER_API_KEY}`
+
+The API key is an opaque string gotten from the package source by the user and configured into the client. No
+particular string format is mandated but the length of the API key should not exceed a reasonable size for HTTP header
+values.
+
+### Request body
+
+The request body for the symbol push is same as with the request body of a package push request (see [package push and delete](package-publish-resource.md)).
+
+### Response
+
+Status Code | Meaning
+----------- | -------
+201 | The symbol package was successfully pushed.
+400 | The provided symbol package is invalid.
+401 | The user is not authorized to perform this action.
+404 | A corresponding package with the provided ID and version does not exist.
+409 | A symbol package with the provided ID and version was pushed but it is not available yet.
+413 | The package is too large.
+
diff --git a/docs/api/tools-json.md b/docs/api/tools-json.md
new file mode 100644
index 000000000..f42b5c70c
--- /dev/null
+++ b/docs/api/tools-json.md
@@ -0,0 +1,90 @@
+---
+title: tools.json for discovering nuget.exe versions
+description: The endpoint for
+author: jver
+ms.author: jver
+ms.date: 08/16/2018
+ms.topic: article
+ms.reviewer: kraigb
+---
+
+# tools.json for discovering nuget.exe versions
+
+Today, there are a few ways to get the latest version of nuget.exe on your machine in a scriptable fashion. For example,
+you can download and extract the [`NuGet.CommandLine`](https://www.nuget.org/packages/NuGet.CommandLine/) package from
+nuget.org. This has some complexity since it either requires that you already have nuget.exe (for `nuget.exe install`)
+or you have to unzip the .nupkg using a basic unzip tool and find the binary inside.
+
+If you already have nuget.exe, you can also use `nuget.exe update -self`, however this also requires having an existing
+copy of nuget.exe. This approach also updates you to the latest version. It does not allow the use of a specific
+version.
+
+The `tools.json` endpoint is available to both solve the bootstrapping problem and to give control of the version of
+nuget.exe that you download. This can be used in CI/CD environments or in custom scripts to discover and download any
+released version of nuget.exe.
+
+The `tools.json` endpoint can be fetched using an unauthenticated HTTP request (e.g. `Invoke-WebRequest` in PowerShell
+or `wget`). It can be parsed using a JSON deserializer and subsequent nuget.exe download URLs can also be fetched using
+unauthenticated HTTP requests.
+
+The endpoint can be fetched using the `GET` method:
+
+```
+GET https://dist.nuget.org/tools.json
+```
+
+The [JSON schema](https://json-schema.org/) for the endpoint is available here:
+
+```
+GET https://dist.nuget.org/tools.schema.json
+```
+
+## Response
+
+The response is a JSON document containing all of the available versions of nuget.exe.
+
+The root JSON object has the following property:
+
+Name | Type | Required
+--------- | ---------------- | --------
+nuget.exe | array of objects | yes
+
+Each object in the `nuget.exe` array has the following properties:
+
+Name | Type | Required | Notes
+-------- | ------ | -------- | -----
+version | string | yes | A SemVer 2.0.0 string
+url | string | yes | An absolute URL for downloading this version of nuget.exe
+stage | string | yes | An enum string
+uploaded | string | yes | An approximate ISO 8601 timestamp of when the version was made available
+
+The items in the array will be sorted in descending, SemVer 2.0.0 order. This guarantee is meant to reduce the burden
+of a client that is interested in highest version number. However this does mean that the list is not sorted in
+chronological order. For example, if a lower major version is serviced at a date later than a higher major version,
+this serviced version will not appear at the top of the list. If you want the latest version released by
+*timestamp*, simply sort the array by the `uploaded` string. This works because the `uploaded` timestamp is in the
+[ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format which can be sorted chronologically by
+using a lexicographical sort (i.e. a simple string sort).
+
+The `stage` property indicates how vetted this version of the tool is.
+
+Stage | Meaning
+------------------ | ------
+EarlyAccessPreview | Not yet visible on the [download web page](https://www.nuget.org/downloads) and should be validated by partners
+Released | Available on the download site but is not yet recommended for wide-spread consumption
+ReleasedAndBlessed | Available on the download site and is recommended for consumption
+
+One simple approach for having the latest, recommended version is to take the first version in the list that has the
+`stage` value of `ReleasedAndBlessed`. This works because the versions are sorted in SemVer 2.0.0 order.
+
+The `NuGet.CommandLine` package on nuget.org is typically only updated with `ReleasedAndBlessed` versions.
+
+### Sample request
+
+```
+GET https://dist.nuget.org/tools.json
+```
+
+### Sample response
+
+[!code-JSON [tools-json.json](./_data/tools-json.json)]
diff --git a/docs/api/vulnerability-info.md b/docs/api/vulnerability-info.md
new file mode 100644
index 000000000..abddc2eaf
--- /dev/null
+++ b/docs/api/vulnerability-info.md
@@ -0,0 +1,128 @@
+---
+title: Vulnerability Info, NuGet API
+description: The data that allows clients to check packages for known vulnerabilities.
+author: zivkan
+ms.author: zivkan
+ms.date: 06/16/2023
+ms.topic: reference
+---
+
+# Vulnerability information
+
+NuGet client, starting from version 6.7, can download known package vulnerability information to use in scenarios such as checking packages during restore operations.
+While the [package metadata resource](./registration-base-url-resource.md) also contains known vulnerability information, if an app needs to check a large number of packages for known vulnerabilities, it's much faster to download a file of known vulnerabilities and lookup locally, rather than making a large number of HTTP requests.
+For example, this enables NuGet Restore to quickly check restored packages for known vulnerabilities, which historically never downloaded package details from the package metadata resource.
+
+The API consists of at least two files, the [vulnerability index](#vulnerability-index) and one or more [vulnerability page files](#vulnerability-page).
+Known vulnerability data can be partitioned into multiple files, and the vulnerability index provides clients with information needed to cache files, and update the cache, efficiently.
+
+The resource used for building this URL is the `VulnerabilityInfo` resource found in the [service index](service-index.md).
+
+## Suggested partitioning strategy
+
+The pages listed in the vulnerability index should ideally be optimized to maximize caching, and therefore minimize updates to large files.
+This will allow clients to minimize the frequency it needs to download updates.
+
+A suggested strategy for vulnerability data partitioning is to have two pages, `base.json` and `updates.json`.
+The `base.json` file is updated periodically (for example once a month), and contains all known vulnerabilities at the time the file is regenerated.
+The `updates.json` file should contain any new advisories published since `base.json` was last regenerated.
+This will allow clients to download the large `base.json` infrequently, while the frequently changing `updates.json` file is always relatively small.
+
+NuGet clients combine the data from multiple files additively, and may load the files in any order.
+The data file schema does not allow for modification or redaction of known vulnerability from another file.
+Therefore if a server's vulnerability data source (for example the [GitHub Advisories Database](https://github.com/advisories)) modifies an existing advisory, the NuGet server must modify the page that the vulnerability information was previously reported.
+One way to achieve this with the suggested partition scheme is to treat all vulnerability modifications and deletions as a trigger to regenerate the complete `base.json` file, and empty `updates.json`.
+
+If you intend to use nuget.org's vulnerability data in your own NuGet server implementation, you should take into consideration developers who do not have direct access to nuget.org.
+[See our implementation guide for more details](./implementation-guide.md#reusing-nugetorgs-vulnerability-data).
+
+## Versioning
+
+The following `@type` values are used:
+
+@type value | Notes
+--------------------------------- | -----
+VulnerabilityInfo/6.7.0 | The initial release
+
+## Vulnerability index
+
+The vulnerability index is a JSON array of objects with the following properties:
+
+Name | Type | Required | Notes
+-------- | ---------| -------- | -----
+@name | string | yes | A short name for the file, used as a cache key.
+@id | string | yes | The full (absolute) URL to a vulnerability data file.
+@updated | string | yes | An ISO 8601 string representing the date and time the file was last updated, ideally with the UTC timezone.
+comment | string | no | A optional descriptive string.
+
+The following restrictions apply:
+
+* The index must be an array of objects with between 1 and 16 items.
+ If the server does not have any vulnerability data (zero pages), then must remove the `VulnerabilityInfo` resource from the `ServiceIndex`.
+* `@name` must be unique within the index, must be between 1 and 32 characters long, and can only use the characters `A` to `Z`, `a` to `z`, `0` to `9`, `-`, or `_`.
+* `@id` must be an absolute URL, not a relative URL.
+
+## Vulnerability page
+
+Vulnerability page files are a JSON object used as a dictionary.
+Property keys are the lower-case package id and property values are an array of the following object with the following properties:
+
+Name | Type | Required | Notes
+-------- | ------- | -------- | -----
+severity | integer | yes | 0 means low, 1 means medium, 2 means high, 3 means critical.
+url | string | yes | URL where users can get more information about the vulnerability.
+versions | string | yes | The version range that is vulnerable, using [NuGet's version range syntax](../concepts/package-versioning.md#version-ranges).
+
+Package IDs (the root object's keys) must be lowercased with [`String.ToLowerInvariant`](/dotnet/api/system.string.tolowerinvariant).
+
+The list of known vulnerabilities for a package should be sorted in descending order of the max version of the version range, followed by descending version of the min version, followed by the ascending order of the URL.
+Ranges with null min or max versions (unbounded) in a version range should be sorted to before non-null (bounded) versions.
+
+An empty page, one that does not provide any known vulnerabilities, must be an empty JSON array (`[]`).
+
+## Samples
+
+Here is a sample of a vulnerability index:
+
+```json
+[
+ {
+ "@name": "base",
+ "@id": "https://nuget.contoso.com/v3/vulnerabilities/3bb6b300-2f74-45bc-af06-746fd21c024b.json",
+ "@updated": "2023-06-01T06:14:58.4159909Z",
+ "comment": "The base data for vulnerability update periodically"
+ },
+ {
+ "@name": "update",
+ "@id": "https://nuget.contoso.com/v3/vulnerabilities/ffd572cd-33f3-4372-8714-a9cab2e86b45.json",
+ "@updated": "2023-06-14T11:35:30.3155764Z",
+ "comment": "The patch data for the vulnerability. Contains all the vulnerabilities since base was last updated."
+ }
+]
+```
+
+Here is a sample of a vulnerability data file:
+
+```json
+{
+ "contoso.library": [
+ {
+ "url": "https://cve.contoso.com/advisories/1",
+ "severity": 1,
+ "versions": "(, 2.0.0)"
+ },
+ {
+ "url": "https://cve.contoso.com/advisories/2",
+ "severity": 2,
+ "versions": "(1.0.0, 2.0.0)"
+ }
+ ],
+ "contoso.utilities": [
+ {
+ "url": "https://cve.contoso.com/advisories/3",
+ "severity": 3,
+ "versions": "(, 1.0.0)"
+ }
+ ]
+}
+```
diff --git a/docs/archive/media/project-json-migrator.png b/docs/archive/media/project-json-migrator.png
new file mode 100644
index 000000000..4328dfa7f
Binary files /dev/null and b/docs/archive/media/project-json-migrator.png differ
diff --git a/docs/archive/project-json-and-uwp.md b/docs/archive/project-json-and-uwp.md
new file mode 100644
index 000000000..898f98a53
--- /dev/null
+++ b/docs/archive/project-json-and-uwp.md
@@ -0,0 +1,200 @@
+---
+title: NuGet project.json file with UWP projects
+description: Description of how the project.json file is used to track NuGet dependencies in Universal Windows Platform (UWP) projects.
+author: JonDouglas
+ms.author: jodou
+ms.date: 07/17/2017
+ms.topic: article
+---
+
+# project.json and UWP
+
+> [!Important]
+> This content is deprecated. Projects should use the PackageReference formats.
+> Learn how to [migrate your project.json project to PackageReference](./project-json.md#migrate-projectjson-to-packagereference).
+> Visual Studio 2026 automatically migrates project.json at solution load time.
+> [.NET 10 SDK & NuGet.exe 7.0](../release-notes/NuGet-7.0.md) do not support project.json projects.
+
+This document describes the package structure that employs features in NuGet 3+ (Visual Studio 2015 and later). The `minClientVersion` property of your `.nuspec` can be used to state that you require the features described here by setting it to 3.1.
+
+## Adding UWP support to an existing package
+
+If you have an existing package and you want to add support for UWP applications, then you don’t need to adopt the packaging format described here. You only need to adopt this format if you require the features it describes and are willing to work only with clients that have updated to version 3+ of the NuGet client.
+
+## I already target netcore45
+
+If you target `netcore45` already, and you don’t need to take advantage of the features here, no action is needed. `netcore45` packages can be consumed by UWP applications.
+
+## I want to take advantage of Windows 10 specific APIs
+
+In this case you need to add the `uap10.0` target framework moniker (TFM or TxM) to your package. Create a new folder in your package and add the assembly that has been compiled to work with Windows 10 to that folder.
+
+## I don’t need Windows 10 specific APIs, but want new .NET features or don’t have netcore45 already
+
+In this case you would add the `dotnet` TxM to your package. Unlike other TxMs, `dotnet` doesn't imply a surface area or platform. It is stating that your package works on any platform that your dependencies work on. When building a package with the `dotnet` TxM, you are likely to have many more TxM-specific dependencies in your `.nuspec`, as you need to define the BCL packages you depend on, such `System.Text`, `System.Xml`, etc. The locations that those dependencies work on define where your package works.
+
+### How do I find out my dependencies
+
+There are two ways to figure out which dependencies to list:
+
+1. Use the [NuSpec Dependency Generator](https://github.com/onovotny/ReferenceGenerator) **3rd party** tool. The tool automates the process and updates your `.nuspec` file with the dependant packages on build. It is available via a NuGet package, [NuSpec.ReferenceGenerator](https://www.nuget.org/packages/NuSpec.ReferenceGenerator/).
+
+1. (The hard way) Use `ILDasm` to look at your `.dll` to see what assemblies are actually needed at runtime. Then determine which NuGet package they each come from.
+
+See the [`project.json`](project-json.md) topic for details on features that help in the creation of a package that supports the `dotnet` TxM.
+
+> [!Important]
+> If your package is intended to work with PCL projects, we highly recommend to create a `dotnet` folder, to avoid warnings and potential compatibility issues.
+
+## Directory structure
+
+NuGet packages using this format have the following well-known folder and behaviors:
+
+| Folder | Behaviors |
+| --- | --- |
+| Build | Contains MSBuild targets and props files in this folder are integrated differently into the project, but otherwise there is no change. |
+| Tools | `install.ps1` and `uninstall.ps1` are not run. `init.ps1` works as it always has. |
+| Content | Content is not copied automatically into a user's project. Support for content inclusion in the project is planned for a later release. |
+| Lib | For many packages the `lib` works the same way it does in NuGet 2.x, but with expanded options for what names can be used inside it and better logic for picking the correct sub-folder when consuming packages. However, when used in conjunction with `ref`, the `lib` folder contains assemblies that implement the surface area defined by the assemblies in the `ref` folder. |
+| Ref | `ref` is an optional folder that contains .NET assemblies defining the public surface (public types and methods) for an application to compile against. The assemblies in this folder may have no implementation, they are purely used to define surface area for the compiler. If the package has no `ref` folder, then the `lib` is both the reference assembly and the implementation assembly. |
+| Runtimes | `runtimes` is an optional folder that contains OS specific code, such as CPU architecture and OS specific or otherwise platform-dependent binaries. |
+
+## MSBuild targets and props files in packages
+
+NuGet packages can contain `.targets` and `.props` files which are imported into any MSBuild project that the package is installed into. In NuGet 2.x, this was done by injecting `` statements into the `.csproj` file, in NuGet 3.0 there is no specific "installation to project" action. Instead the package restore process writes two files `[projectname].nuget.props` and `[projectname].NuGet.targets`.
+
+MSBuild knows to look for these two files and automatically imports them near the beginning and near the end of the project build process. This provides very similar behavior to NuGet 2.x, but with one major difference: *there is no guaranteed order of targets/props files in this case*. However, MSBuild does provide ways to order targets through the `BeforeTargets` and `AfterTargets` attributes of the `` definition (see [Target Element (MSBuild)](/visualstudio/msbuild/target-element-msbuild).
+
+## Lib and Ref
+
+The behavior of the `lib` folder hasn't changed significantly in NuGet v3. However, all assemblies must be within sub-folders named after a TxM, and can no longer be placed directly under the `lib` folder. A TxM is the name of a platform that a given asset in a package is supposed to work for. Logically these are an extension of the Target Framework Monikers (TFM) e.g. `net45`, `net46`, `netcore50`, and `dnxcore50` are all examples of TxMs (see [Target Frameworks](../reference/target-frameworks.md). TxM can refer to a framework (TFM) as well as other platform-specific surface areas. For example the UWP TxM (`uap10.0`) represents the .NET surface area as well as the Windows surface area for UWP applications.
+
+An example lib structure:
+
+```
+lib
+├───net40
+│ MyLibrary.dll
+└───wp81
+ MyLibrary.dll
+```
+
+The `lib` folder contains assemblies that are used at runtime. For most packages a folder under `lib` for each of the target TxMs is all that is required.
+
+## Ref
+
+There are sometimes cases where a different assembly should be used during compilation (.NET Reference Assemblies do this today). For those cases, use a top-level folder called `ref` (short for "Reference Assemblies").
+
+Most package authors don't require the `ref` folder. It is useful for packages that need to provide a consistent surface area for compilation and IntelliSense but then have different implementation for different TxMs. The biggest use case of this are the `System.*` packages that are being produced as part of shipping .NET Core on NuGet. These packages have various implementations that are being unified by a consistent set of ref assemblies.
+
+Mechanically, the assemblies included in the `ref` folder are the reference assemblies being passed to the compiler. For those of you who have used csc.exe these are the assemblies we are passing to the [C# /reference option](/dotnet/articles/csharp/language-reference/compiler-options/reference-compiler-option) switch.
+
+The structure of the `ref` folder is the same as `lib`, for example:
+
+```
+└───MyImageProcessingLib
+ ├───lib
+ │ ├───net40
+ │ │ MyImageProcessingLibrary.dll
+ │ │
+ │ ├───net451
+ │ │ MyImageProcessingLibrary.dll
+ │ │
+ │ └───win81
+ │ MyImageProcessingLibrary.dll
+ │
+ └───ref
+ ├───net40
+ │ MyImageProcessingLibrary.dll
+ │
+ └───portable-net451-win81
+ MyImageProcessingLibrary.dll
+```
+
+In this example the assemblies in the `ref` directories would all be identical.
+
+## Runtimes
+
+The runtimes folder contains assemblies and native libraries required to run on specific "runtimes", which are generally defined by Operating System and CPU architecture. These runtimes are identified using [Runtime Identifiers (RIDs)](/dotnet/core/rid-catalog) such as `win`, `win-x86`, `win7-x86`, `win8-64`, etc.
+
+## Native helpers to use platform-specific APIs
+
+The following example shows a package that has a purely managed implementation for several platforms, but uses native helpers on Windows 8 where it can call into Windows 8-specific native APIs.
+
+```
+└───MyLibrary
+ ├───lib
+ │ └───net40
+ │ MyLibrary.dll
+ │
+ └───runtimes
+ ├───win8-x64
+ │ ├───lib
+ │ │ └───net40
+ │ │ MyLibrary.dll
+ │ │
+ │ └───native
+ │ MyNativeLibrary.dll
+ │
+ └───win8-x86
+ ├───lib
+ │ └───net40
+ │ MyLibrary.dll
+ │
+ └───native
+ MyNativeLibrary.dll
+```
+
+Given the above package the following things happen:
+
+- When not on Windows 8 the `lib/net40/MyLibrary.dll` assembly is used.
+
+- When on Windows 8 the `runtimes/win8-/lib/MyLibrary.dll` is used and the `native/MyNativeHelper.dll` is copied to the output of your build.
+
+In the example above the `lib/net40` assembly is purely managed code, whilst the assemblies in the runtimes folder will p/invoke into the native helper assembly to call APIs specific to Windows 8.
+
+Only a single `lib` folder is ever be picked, so if there is a runtime specific folder it's chosen over non-runtime specific `lib`. The native folder is additive, if it exists it's copied to the output of the build.
+
+## Managed wrapper
+
+Another way to use runtimes is to ship a package that is purely a managed wrapper over a native assembly. In this scenario you create a package like the following:
+
+```
+└───MyLibrary
+ └───runtimes
+ ├───win8-x64
+ │ ├───lib
+ │ │ └───net451
+ │ │ MyLibrary.dll
+ │ │
+ │ └───native
+ │ MyImplementation.dll
+ │
+ └───win8-x86
+ ├───lib
+ │ └───net451
+ │ MyLibrary.dll
+ │
+ └───native
+ MyImplementation.dll
+```
+
+In this case there is no top-level `lib` folder as that folder as there is no implementation of this package that doesn't rely on the corresponding native assembly. If the managed assembly, `MyLibrary.dll`, was exactly the same in both of these cases then we could put it in a top level `lib` folder, but because the lack of a native assembly doesn't cause the package to fail installing if it was installed on a platform that wasn't win-x86 or win-x64 then the top level lib would be used but no native assembly would be copied.
+
+## Authoring packages for NuGet 2 and NuGet 3
+
+If you want to create a package that can be consumed by projects using `packages.config` as well as packages using `project.json` then the following apply:
+
+- Ref and runtimes only work on NuGet 3. They are both ignored by NuGet 2.
+
+- You cannot rely on `install.ps1` or `uninstall.ps1` to function. These files execute when using `packages.config`, but are ignored with `project.json`. So your package needs to be usable without them running. `init.ps1` still runs on NuGet 3.
+
+- Targets and Props installation is different, so make sure that your package works as expected on both clients.
+
+- Subdirectories of lib must be a TxM in NuGet 3. You cannot place libraries at the root of the `lib` folder.
+
+- Content is not copied automatically with NuGet 3. Consumers of your package could copy the files themselves or use a tool like a task runner to automate copying the files.
+
+- Source and config file transforms are not run by NuGet 3.
+
+If you are supporting NuGet 2 and 3 then your `minClientVersion` should be the lowest version of NuGet 2 client that your package works on. In the case of an existing package it shouldn't need to change.
diff --git a/docs/archive/project-json-impact.md b/docs/archive/project-json-impact.md
new file mode 100644
index 000000000..98569678f
--- /dev/null
+++ b/docs/archive/project-json-impact.md
@@ -0,0 +1,72 @@
+---
+title: project.json impact on NuGet package authors
+description: Details on how the implementation of project.json in NuGet 3.x affects package authors, such as unsupported features, content, and package format.
+author: JonDouglas
+ms.author: jodou
+ms.date: 01/18/2018
+ms.topic: concept-article
+---
+
+# Impact of project.json when creating packages
+
+> [!Important]
+> This content is deprecated. Projects should use the PackageReference formats.
+> Learn how to [migrate your project.json project to PackageReference](./project-json.md#migrate-projectjson-to-packagereference).
+> Visual Studio 2026 automatically migrates project.json at solution load time.
+> [.NET 10 SDK & NuGet.exe 7.0](../release-notes/NuGet-7.0.md) do not support project.json projects.
+
+The `project.json` system used in NuGet 3+ affects package authors in several ways as described in the following sections.
+
+## Changes affecting existing packages usage
+
+Traditional NuGet packages support a set of features that are not carried over to the transitive world.
+
+### Install and uninstall scripts are ignored
+
+The transitive restore model, described in [Dependency resolution](../concepts/dependency-resolution.md#dependency-resolution-with-packagereference), does not have a concept of "package install time". A package is either present or not present, but there is no consistent process that occurs when a package is installed.
+
+Also, install scripts were supported only in Visual Studio. Other IDEs had to mock the Visual Studio extensibility API to attempt to support such scripts, and no support was available in common editors and command-line tools.
+
+### Content transforms are not supported
+
+Similar to install scripts, transforms run on package install and are typically not idempotent. Since there is no install time anymore, XDT Transform and similar features are not supported, and are ignored if such a package is used in a transitive scenario.
+
+### Content
+
+Traditional NuGet packages are shipping content files such as source code and configuration files. There are used typically in two scenarios:
+
+1. Initial files dropped into the project so the user can edit them at a later time. The common example is default configuration files.
+
+1. Content files used as companions to the assemblies installed in the project. The example here would be a logo image used by an assembly.
+
+Support for content is currently disabled for similar reasons for scripts and transforms, but we are in the process of designing support for content.
+
+Content files can still be carried inside the packages, and are ignored currently, however the end user can still copy them into the right spot.
+
+You can see one of the proposals for bringing back content files, and follow its progress, here: [https://github.com/NuGet/Home/issues/627](https://github.com/NuGet/Home/issues/627).
+
+## Impact for package authors
+
+Packages using the above features would have to use a different mechanism. The most commonly useful mechanism for this would be the MSBuild targets/props that continues to get fully supported. The build system can choose to pick up other conventions in the package. This is how MSBuild targets are supported as well as Roslyn analyzers. It is possible to build packages that supports targets and analyzers for `packages.config` and `project.json` scenarios.
+
+Packages that attempt to modify the project to ease startup typically work in a very limited set of scenarios, and should instead provide a readme, or guidance on how to use the package.
+
+Most existing packages should not need to use the package format described below.
+
+The format enables native content as a first class scenario. This means that managed assemblies depend on close to hardware implementations to ship binary implementations alongside the managed assemblies based on the target platform. For example System.IO.Compression package is utilizing this technology. [https://www.nuget.org/packages/System.IO.Compression](https://www.nuget.org/packages/System.IO.Compression)
+
+In summary if the functionality above is not absolutely necessary, we recommend sticking with the existing package format, as the format described here is supported only by NuGet 3.x+.
+
+It would be possible to build packages to work for both `packages.config` and `project.json` scenarios through shimming, however it's often simpler to just structure the packages the traditional way, without the deprecated features mentioned above.
+
+## 3.x package format
+
+The 3.x package format allows for several additional features beyond NuGet 2.x:
+
+1. Defining a reference assembly used for compilation and a set of implementation assemblies used for runtime on different platforms/devices. Which allows you to take advantage of platform specific APIs while providing a common surface area for your consumers. Specifically this makes writing intermediate portable libraries easier.
+
+1. Allows packages to pivot on platforms e.g. operating systems or CPU architecture.
+
+1. Allows for separation of platform specific implementations to companion packages.
+
+1. Support Native dependencies as a first class citizen.
diff --git a/docs/archive/project-json.md b/docs/archive/project-json.md
new file mode 100644
index 000000000..6e039d251
--- /dev/null
+++ b/docs/archive/project-json.md
@@ -0,0 +1,214 @@
+---
+title: project.json File Reference for NuGet
+description: In some project types, project.json maintains the list of NuGet packages used in the project.
+author: JonDouglas
+ms.author: jodou
+ms.date: 07/27/2017
+ms.topic: reference
+---
+
+# project.json reference
+
+> [!Important]
+> This content is deprecated. Projects should use the PackageReference formats.
+> Learn how to [migrate your project.json project to PackageReference](#migrate-projectjson-to-packagereference).
+> Visual Studio 2026 automatically migrates project.json at solution load time.
+> [.NET 10 SDK & NuGet.exe 7.0](../release-notes/NuGet-7.0.md) do not support project.json projects.
+
+*NuGet 3.x*
+
+The `project.json` file maintains a list of packages used in a project, known as a package management format. It supersedes `packages.config` but is in turn superseded by [PackageReference](../consume-packages/package-references-in-project-files.md) with NuGet 4.0+.
+
+The [`project.lock.json`](#projectlockjson) file (described below) is also used in projects employing `project.json`.
+
+`project.json` has the following basic structure, where each of the four top-level objects can have any number of child objects:
+
+```json
+{
+ "dependencies": {
+ "PackageID" : "{version_constraint}"
+ },
+ "frameworks" : {
+ "TxM" : {}
+ },
+ "runtimes" : {
+ "RID": {}
+ },
+ "supports" : {
+ "CompatibilityProfile" : {}
+ }
+}
+```
+
+## Migrate project.json to PackageReference
+
+The migration between project.json and PackageReference is straightforward.
+
+### Automatic migration in Visual Studio 2026
+
+Visual Studio 2026 and later automatically migrates project.json projects to PackageReference when you open a solution containing project.json projects.
+The migration happens at solution load time:
+
+1. Open a solution containing project.json projects in Visual Studio 2026 or later.
+1. Visual Studio automatically detects project.json files and migrates them to PackageReference format.
+1. To check migration status, open the [Output Window](/visualstudio/ide/output-window) and select Show output from "Package Manager".
+You should see messages like "Migrating project.json project..." followed by "Migration Succeeded" for each project.
+Any errors will appear in the Error List.
+1. A backup of the original project file and project.json file is created in a `Backup` folder in the root of the project directory.
+1. The migration converts all package dependencies to PackageReference format in the project file.
+
+
+### Manual migration in Visual Studio 2022
+
+For Visual Studio 2022 and earlier, you can use the built-in migrator:
+
+1. Load the project.json project in Visual Studio.
+1. Go to the solution explorer of the project.json project and find the dependencies node.
+1. Right-click and select `Migrate project.json to PackageReference...`
+
+
+
+### Alternative migration methods
+
+Alternatively, you may use the [dotnet migrate](/dotnet/core/tools/dotnet-migrate) command-line tool, or do the migration manually by taking all of the content from the project.json file and replacing it with the equivalent [PackageReference syntax](../consume-packages/Package-References-in-Project-Files.md).
+
+## Dependencies
+
+Lists the NuGet package dependencies of your project in the following form:
+
+```json
+"PackageID" : "version_constraint"
+```
+
+For example:
+
+```json
+"dependencies": {
+ "Microsoft.NETCore": "5.0.0",
+ "System.Runtime.Serialization.Primitives": "4.0.10"
+}
+```
+
+The `dependencies` section is where the NuGet Package Manager dialog adds package dependencies to your project.
+
+The Package id corresponds to the id of the package on nuget.org , the same as the id used in the package manager console: `Install-Package Microsoft.NETCore`.
+
+When restoring packages, the version constraint of `"5.0.0"` implies `>= 5.0.0`. That is, if 5.0.0 is not available on the server but 5.0.1 is, NuGet installs 5.0.1 and warns you about the upgrade. NuGet otherwise picks the lowest possible version on the server matching the constraint.
+
+See [Dependency resolution](../concepts/dependency-resolution.md) for more details on resolution rules.
+
+### Managing dependency assets
+
+Which assets from dependencies flow into the top-level project is controlled by specifying a comma-delimited set of tags in the `include` and `exclude` properties of the dependency reference. The tags are listed the table below:
+
+| Include/Exclude tag | Affected folders of the target |
+| --- | --- |
+| contentFiles | Content |
+| runtime | Runtime, Resources, and FrameworkAssemblies |
+| compile | lib |
+| build | build (MSBuild props and targets) |
+| native | native |
+| none | No folders |
+| all | All folders |
+
+Tags specified with `exclude` take precedence over those specified with `include`. For example, `include="runtime, compile" exclude="compile"` is the same as `include="runtime"`.
+
+For example, to include the `build` and `native` folders of a dependency, use the following:
+
+```json
+{
+ "dependencies": {
+ "packageA": {
+ "version": "1.0.0",
+ "include": "build, native"
+ }
+ }
+}
+```
+
+To exclude the `content` and `build` folders of a dependency, use the following:
+
+```json
+{
+ "dependencies": {
+ "packageA": {
+ "version": "1.0.0",
+ "exclude": "contentFiles, build"
+ }
+ }
+}
+```
+
+## Frameworks
+
+Lists the frameworks that the project runs on, such as `net45`, `netcoreapp`, `netstandard`.
+
+```json
+"frameworks": {
+ "netcore50": {}
+ }
+ ```
+
+Only a single entry is allowed in the `frameworks` section. (An exception is `project.json` files for ASP.NET projects that are build with deprecated DNX tool chain, which allows for multiple targets.)
+
+## Runtimes
+
+Lists the operating systems and architectures that your app runs on, such as `win10-arm`, `win8-x64`, `win8-x86`.
+
+```json
+"runtimes": {
+ "win10-arm": { },
+ "win10-arm-aot": { },
+ "win10-x86": { },
+ "win10-x86-aot": { },
+ "win10-x64": { },
+ "win10-x64-aot": { }
+}
+```
+
+A package containing a PCL that can run on any runtime doesn't need to specify a runtime. This must also be true of any dependencies, otherwise you must specify runtimes.
+
+
+## Supports
+
+Defines a set of checks for package dependencies. You can define where you expect the PCL or app to run. The definitions are not restrictive, as your code may be able to run elsewhere. But specifying these checks makes NuGet check that all dependencies are satisfied on the listed TxMs. Examples of the values for this are: `net46.app`, `uwp.10.0.app`, etc.
+
+This section should be populated automatically when you select an entry in the Portable Class Library targets dialog.
+
+```json
+"supports": {
+ "net46.app": {},
+ "uwp.10.0.app": {}
+}
+```
+
+## Imports
+
+Imports are designed to allow packages that use the `dotnet` TxM to operate with packages that don't declare a dotnet TxM. If your project is using the `dotnet` TxM then all the packages you depend on must also have a `dotnet` TxM, unless you add the following to your `project.json` to allow non `dotnet` platforms to be compatible with `dotnet`:
+
+```json
+"frameworks": {
+ "dotnet": { "imports" : "portable-net45+win81" }
+}
+```
+
+If you are using the `dotnet` TxM then the PCL project system adds the appropriate `imports` statement based on the supported targets.
+
+## Differences from portable apps and web projects
+
+The `project.json` file used by NuGet is a subset of that found in ASP.NET Core projects. In ASP.NET Core `project.json` is used for project metadata, compilation information, and dependencies. When used in other project systems, those three things are split into separate files and `project.json` contains less information. Notable differences include:
+
+- There can only be one framework in the `frameworks` section.
+
+- The file cannot contain dependencies, compilation options, etc. that you see in DNX `project.json` files. Given that there can only be a single framework it doesn't make sense to enter framework-specific dependencies.
+
+- Compilation is handled by MSBuild so compilation options, preprocessor defines, etc. are all part of the MSBuild project file and not `project.json`.
+
+In NuGet 3+, developers are not expected to manually edit the `project.json`, as the Package Manager UI in Visual Studio manipulates the content. That said, you can certainly edit the file, but you must build the project to start a package restore or invoke restore in another way. See [Package restore](../consume-packages/package-restore.md).
+
+
+## project.lock.json
+
+The `project.lock.json` file is generated in the process of restoring the NuGet packages in projects that use `project.json`. It holds a snapshot of all the information that is generated as NuGet walks the graph of packages and includes the version, contents, and dependencies of all the packages in your project. The build system uses this to choose packages from a global location that are relevant when building the project instead of depending on a local packages folder in the project itself. This results in faster build performance because it's necessary to read only `project.lock.json` instead of many separate `.nuspec` files.
+
+`project.lock.json` is automatically generated on package restore, so it can be omitted from source control by adding it to `.gitignore` and `.tfignore` files (see [Packages and source control](../consume-packages/packages-and-source-control.md). However, if you include it in source control, the change history shows changes in dependencies resolved over time.
diff --git a/docs/concepts/Auditing-Packages.md b/docs/concepts/Auditing-Packages.md
new file mode 100644
index 000000000..72d185b5a
--- /dev/null
+++ b/docs/concepts/Auditing-Packages.md
@@ -0,0 +1,295 @@
+---
+title: Auditing package dependencies for security vulnerabilities
+description: How to audit package dependencies for security vulnerabilities and acting on security audit reports.
+author: JonDouglas
+ms.author: jodou
+ms.topic: how-to
+ms.date: 10/01/2025
+---
+
+# Auditing package dependencies for security vulnerabilities
+
+## About security audits
+
+A security audit for package managers like NuGet is a process that involves analyzing the security of the packages that are included in a software project.
+This involves identifying vulnerabilities, evaluating risks, and making recommendations for improving security.
+The audit can include a review of the packages themselves, as well as any dependencies and their associated risks.
+The goal of the audit is to identify and mitigate any security vulnerabilities that could be exploited by attackers, such as code injection or cross-site scripting attacks.
+
+### Feature availability
+
+| NuGet | .NET SDK | Visual Studio | Feature |
+|-------|----------|---------------|---------|
+| [5.9](../release-notes/NuGet-5.9.md) | .NET 5 SDK (5.0.200) | N/A | [`dotnet list package --vulnerable`](#dotnet-list-package---vulnerable) |
+| [6.8](../release-notes/NuGet-6.8.md) | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 | [NuGetAudit](#running-a-security-audit-with-restore) for PackageReference |
+| [6.10](../release-notes/NuGet-6.10.md) | N/A | Visual Studio 2022 17.10 | [NuGetAudit](#running-a-security-audit-with-restore) for packages.config|
+| [6.11](../release-notes/NuGet-6.11.md) | .NET 8 SDK (8.0.400) | Visual Studio 2022 17.11 | [NuGetAuditSuppress](#excluding-advisories) for PackageReference |
+| [6.12](../release-notes/NuGet-6.12.md) | .NET 9 SDK (9.0.100) | Visual Studio 2022 17.12 | [Audit sources](#audit-sources). [NuGetAuditSuppress](#excluding-advisories) for packages.config. |
+| [7.0](../release-notes/NuGet-7.0.md) | .NET 10 SDK (10.0.100) | Visual Studio 2026 | [NuGetAuditMode default changes for .NET 10](#configuring-nuget-audit). [`dotnet package update --vulnerable`](#security-vulnerabilities-found-with-updates) |
+
+## Running a security audit with `restore`
+
+The `restore` command automatically runs when you do a common package operation such as loading a project for the first time, adding a new package, updating a package version, or removing a package from your project in your favorite IDE.
+Your dependencies are checked against a list of known vulnerabilities provided by your [audit sources](#audit-sources).
+
+1. On the command line, navigate to your project or solution directory.
+1. Run `restore` using your preferred tooling (i.e. dotnet, MSBuild, NuGet.exe, VisualStudio etc).
+1. Review the warnings and address the known security vulnerabilities.
+
+### Configuring NuGet Audit
+
+Audit can be configured via MSBuild properties in a `.csproj` or MSBuild file being evaluated as part of your project.
+We recommend that audit is configured at a repository level.
+
+| MSBuild Property | Default | Possible values | Notes |
+|------------------|---------|-----------------|-------|
+| NuGetAuditMode | See 1 below | `direct` and `all` | If you'd like to audit top-level dependencies only, you can set the value to `direct`. NuGetAuditMode is not applicable for packages.config projects. |
+| NuGetAuditLevel | low | `low`, `moderate`, `high`, and `critical` | The minimum severity level to report. If you'd like to see `moderate`, `high`, and `critical` advisories (exclude `low`), set the value to `moderate` |
+| NuGetAudit | true | `true` and `false` | If you wish to not receive security audit reports, you can opt-out of the experience entirely by setting the value to `false` |
+
+1. `NuGetAuditMode` defaults to `all` when a project targets `net10.0` or higher.
+ Otherwise `NuGetAuditMode` defaults to `direct`.
+ When a project multi-targets, if any one target framework selects `all`, then audit will use this value for all target frameworks.
+
+#### Audit Sources
+
+Restore downloads a server's [`VulnerabilityInfo` resource](../api/vulnerability-info.md) to check against the list of packages each project is using.
+The list of sources are defined by [the `auditSources` element in NuGet.Config](../reference/nuget-config-file.md#auditsources), and [warning NU1905](#warning-codes) is raised if any of the audit sources do not provide any vulnerability info.
+If `auditSources` is not defined or is cleared without adding any sources, then `packageSources` will be used and warning NU1905 is suppressed.
+
+Since a common mitigation for package substitution attacks is [to use a single package source that upstreams from nuget.org, so that NuGet is not configured to use nuget.org as a package source](Security-Best-Practices.md#nuget-feeds), audit sources can be used to use nuget.org (or any other source that provides vulnerability information) without also using it as a package source.
+
+The data source for nuget.org's vulnerability database is [GitHub Advisory Database](https://github.com/advisories?query=type%3Areviewed+ecosystem%3Anuget).
+Note that the [V2 protocol is deprecated](../nuget-org/overview-nuget-org.md#api-endpoint-for-nugetorg), so if your nuget.config is still using the V2 endpoint, you must migrate to the V3 endpoint.
+
+```xml
+
+
+
+
+
+
+```
+
+**Note**: The table below lists features that support Audit Sources.
+
+| Introduced In | Feature Supporting Audit Sources |
+| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
+| [NuGet 6.12, .NET 9.0.100 SDK, and Visual Studio 2022 17.12](../release-notes/NuGet-6.12.md) | Restore |
+| [NuGet 6.14, .NET 9.0.300 SDK](../release-notes/NuGet-6.14.md) | `dotnet package list --vulnerable` |
+| [NuGet 7.0 and Visual Studio 2026](../release-notes/NuGet-7.0.md) | NuGet AuditSources support in the Visual Studio Package Manager UI |
+
+### Warning codes
+
+| Warning Code | Reason |
+|--------------|----------|
+| [NU1900](../reference/errors-and-warnings/NU1900.md) | Error communicating with package source, while getting vulnerability information. |
+| [NU1901](../reference/errors-and-warnings/NU1901-NU1904.md) | Package with low severity detected |
+| [NU1902](../reference/errors-and-warnings/NU1901-NU1904.md) | Package with moderate severity detected |
+| [NU1903](../reference/errors-and-warnings/NU1901-NU1904.md) | Package with high severity detected |
+| [NU1904](../reference/errors-and-warnings/NU1901-NU1904.md) | Package with critical severity detected |
+| [NU1905](../reference/errors-and-warnings/NU1905.md) | An audit source does not provide a vulnerability database |
+
+You can customize your build to treat these warnings as errors to [treat warnings as errors, or treat warnings not as errors](/dotnet/csharp/language-reference/compiler-options/errors-warnings#warningsaserrors-and-warningsnotaserrors).
+For example, if you're already using `` to treat all (C#, NuGet, MSBuild, etc) warnings as errors, you can use `$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904` to prevent vulnerabilities discovered in the future from breaking your build.
+Alternatively, if you want to keep low and moderate vulnerabilities as warnings, but treat high and critical vulnerabilities as errors, and you're not using `TreatWarningsAsErrors`, you can use `$(WarningsAsErrors);NU1903;NU1904`.
+
+> [!NOTE]
+> MSBuild properties for message severity such as `NoWarn` and `TreatWarningsAsErrors` are not supported for packages.config projects.
+
+#### Excluding advisories
+
+You can exclude advisories by adding a new `NuGetAuditSuppress` MSBuild item for each advisory.
+Define a `NuGetAuditSuppress` item with the `Include=` metadata set to the advisory URL you wish to suppress.
+
+```xml
+
+
+
+```
+
+Similar to the other NuGet audit configuration properties, `NuGetAuditSuppress` items can be defined at the project or repository level.
+
+`NuGetAuditSuppress` is available for PackageReference projects starting from [NuGet 6.11, Visual Studio 17.11, and the .NET 8.0.400 SDK](../release-notes/NuGet-6.11.md).
+It is available for packages.config from [Visual Studio 17.12 and NuGet 6.12](../release-notes/NuGet-6.12.md).
+
+##### When to exclude advisories
+
+In scenarios where you have analyzed a specific advisory and have determined that it either does not apply to your scenario, or you are comfortable with the risks it imposes, you can choose to exclude specific advisories from the audit report.
+Note that this would completely suppress the advisories, even for packages that share the advisory that may not be part of your project.
+`NuGetAuditSuppress` should be considered a last resort for managing advisories.
+
+## Actions when packages with known vulnerabilities are reported
+
+Getting a warning about packages with known vulnerabilities is only part of the process.
+Once discovered, action needs to be taken to remove the potential vulnerability from your solution.
+
+The easiest case is when a package you reference directly has the known vulnerability.
+In this situation, update the package version to one that fixes the vulnerability.
+
+Package vulnerabilities may be reported in both direct and transitive package references.
+The action you take to resolve may be different because of that.
+
+### Security vulnerabilities found with updates
+
+If security vulnerabilities are found and updates are available for the package, you can do one of the following:
+
+- Edit the `.csproj` or other package version location (`Directory.Packages.props`) with a newer version containing a security fix.
+- Use the NuGet package manager user interface in Visual Studio to update the individual package.
+- Run the `dotnet package update --vulnerable` command to update all vulnerable packages in a project to the first version without known vulnerabilities.
+- Run the `dotnet package update` or `dotnet package add` commands with the respective package ID to update to the latest version. Use [`dotnet add package` when using .NET 9 or earlier](/dotnet/core/whats-new/dotnet-10/sdk#more-consistent-command-order).
+- Use the NuGet Model Context Protocol (MCP) server that has the ability to update packages in your project to versions that resolve known vulnerabilities.
+See [Fixing package vulnerabilities](NuGet-MCP-Server.md#fixing-package-vulnerabilities) for more information.
+
+#### Transitive Packages
+
+Often a vulnerability will be in a transitive dependency.
+Our recommendation is to prefer updates to packages "closest" to your direct references.
+Though, there's nothing wrong with just upgrading the package with known vulnerability either.
+
+For example, say your project references package A.
+Package A has a dependency on package B, which in turn has a dependency on package C.
+In this example, we'll consider that package C version 1.0.0 has a known vulnerability, fixed in version 2.0.0.
+Our recommendation is to first try upgrading package A.
+If that doesn't resolve the audit warning, then try upgrading package B.
+If that doesn't resolve the audit warning, then upgrade C directly.
+To aid with this, you'll [need to find the transitive package path](#finding-the-transitive-package-path).
+
+In summary, if a known vulnerability exists in a top-level package's transitive dependencies, you have these options:
+
+- Check if the top-level package contains an update that does not have a transitive vulnerability and update that instead.
+- Update the closest package to your direct references that does not reference a vulnerability.
+- Add the fixed package version as a direct package reference. **Note:** Be sure to remove this reference when a new package version update becomes available and be sure to maintain the defined attributes for the expected behavior.
+- Use [Central Package Management with the transitive pinning functionality](../consume-packages/Central-Package-Management.md#transitive-pinning).
+ Note that if you pack your project into your own package to share with others, [CPM with transitive pinning will cause packages to become dependencies](../consume-packages/Central-Package-Management.md#transitive-pinning-and-pack), even if your project doesn't directly call APIs on that package.
+- [Suppress the advisory](#excluding-advisories) until it can be addressed.
+- File an issue in the top-level package's tracker to request an update.
+
+##### Finding the transitive package path
+
+There are several ways to find the package path.
+Which method you prefer depends on what tools you normally use during your development.
+
+###### dotnet nuget why
+
+On the command line, you can use the [`dotnet nuget why` command](/dotnet/core/tools/dotnet-nuget-why) to understand why transitive packages are being included in your project's package graph.
+
+
+
+###### Visual Studio Solution Explorer
+
+SDK style projects also provide the full package graph under the project's Dependency node.
+It's also searchable!
+Expand search options and enable “search external files”.
+
+
+
+Search the package name, and it will show you all instances under each project's Dependencies node.
+
+
+
+###### Visual Studio NuGet Package Manager UI
+
+When you look at the Installed tab in Visual Studio's package manager UI, when the project uses PackageReference for package management, it will show both direct and transitive packages.
+Currently, this only happens when you manage packages for a project, not for the solution.
+
+If you mouse hover over a package in the package list, the tooltip will include the name of one direct package that has caused that transitive package to be included in the project.
+
+
+
+### Security vulnerabilities found with no updates
+
+In the case that a known vulnerability exists in a package without a security fix, you can do the following.
+
+- Check for any mitigating factors outlined in the advisory report.
+- Use a suggested package if the package is marked deprecated or is abandoned.
+- If the package is open source, consider contributing a fix.
+- Open an issue in the package's issue tracker.
+
+#### Check for mitigating factors
+
+Review the security advisor for any mitigating factors that may allow you to continue using the package with the vulnerability.
+The vulnerability may only exist when the code is used on a specific framework, operating system, or a special function is called.
+
+#### Use a suggested package
+
+In the case that a security advisory is reported for the package you're using and the package is marked deprecated or seems abandoned, consider using any suggested alternate package the package author has declared or a package comprising of similar functionality that is maintained.
+
+#### Contribute a fix
+
+If a fix does not exist for the security advisory, you may want to suggest changes that addresses the vulnerability in a pull request on package's open source repository or contact the author through the `Contact owners` section on the NuGet.org package detail page.
+
+#### Open an issue
+
+If you do not want to fix the vulnerability or are unable to update or replace the package, open an issue in the package's issue tracker or preferred contact method.
+On NuGet.org, you can navigate to the package details page and click `Report package` which will guide you to get in contact with the author.
+
+### No security vulnerabilities found
+
+If no security vulnerabilities are found, this means that packages with known vulnerabilities were not found in your package graph at the present moment of time you checked.
+Since the advisory database can be updated at any time, we recommend regularly checking your `dotnet restore` output and ensuring the same in your continuous integration process.
+
+## Running NuGet Audit in CI
+
+### Separating Errors from Warnings with a Dedicated Auditing Pipeline
+
+You can use MSBuild's conditional statements to configure a dedicated CI pipeline for running audits, without audit warnings being treated as errors in other pipelines or on local builds.
+Depending on your CI system and team processes, you can have failed runs of the audit pipeline email the team, or you may have a dashboard where you can show a badge of the most recent run of the pipeline.
+
+Like many things in programming, there are multiple ways to achieve the outcome.
+One option is to treat NuGet Audit warnings as errors only in an audit pipeline.
+
+```xml
+
+ NU1900;NU1901;NU1902;NU1903;NU1904;NU1905
+ $(WarningsAsErrors);$(NuGetAuditCodes)
+ $(WarningsNotAsErrors);$(NuGetAuditCodes)
+
+```
+
+Then in your pipeline, you run restore specifying the property used by the condition.
+For example, using GitHub Actions syntax:
+
+```yml
+- name: Restore with NuGet Auditing
+ run: dotnet restore -p:AuditPipeline=true
+```
+
+The property name `AuditPipeline` is only an example, and you can customize it as you wish, as long as the name is the same in both the MSBuild condition and the command line.
+MSBuild also uses environment variables when reading a property that has not yet been defined, so an environment variable is an alternative to the command line parameter.
+
+By using conditions to selectively cause NuGet Audit warnings to fail a restore, you can have a dedicated pipeline to check packages for known vulnerabilities, while preventing new security advisories from blocking your bug fixes at inconvenient times.
+Keeping NuGet Audit warnings enabled for local builds allows developers to get a non-blocking notification about new security advisories and can encourage upgrading package versions to fix the vulnerabilities more quickly than waiting for someone to check the audit pipeline status.
+
+### Ensure restore audited projects
+
+NuGet in MSBuild 17.13 and .NET 9.0.200 added output properties `RestoreProjectCount`, `RestoreSkippedCount` and `RestoreProjectsAuditedCount` on the restore task.
+This can be used to enforce that audit ran during a restore.
+Note that these output properties are not available with [static graph restore](../reference/msbuild-targets.md#restoring-with-msbuild-static-graph-evaluation).
+
+Since MSBuild is a scripting language, this can be achieved a number of different ways, but also has the same restrictions as MSBuild has.
+One example is to create a file *Directory.Solution.targets* in the same directory as your solution file, whose contents has a target similar to the following.
+Note that *Directory.Build.props* is commonly used, but is imported by projects.
+However, NuGet's restore target and task runs at the solution level, so needs to be in MSBuild's solution extensibility file, not the project/build file.
+
+```xml
+
+
+
+
+
+```
+
+Depending on your use-case, you may wish to use condition `'$(RestoreProjectCount)' != '$([MSBuild::Add($(RestoreProjectsAuditedCount), $(RestoreSkippedCount))'` on the error message, to account for projects that restore skipped because they were already up to date.
+Similarly, think about if you want this error to happen everywhere, or only in CI pipelines, and what environment variables are defined in your CI environment, and factor this into the target's condition.
+Again, since MSBuild is a scripting language, you can use any of its capabilities to customize your repo however you want.
+Viewing [MSBuild's metaproj](/visualstudio/msbuild/how-to-build-specific-targets-in-solutions-by-using-msbuild-exe#troubleshooting) and [binlogs](/visualstudio/msbuild/msbuild-command-line-reference#switches-for-loggers) are useful to develop and troubleshoot solution level targets.
+
+## `dotnet list package --vulnerable`
+
+[`dotnet list package`](/dotnet/core/tools/dotnet-list-package) has a `--vulnerable` argument to filter the packages based on which packages have known vulnerabilities.
+Note that `--include-transitive` is not default, so should be included.
diff --git a/docs/concepts/Dependency-Resolution.md b/docs/concepts/Dependency-Resolution.md
new file mode 100644
index 000000000..97f63ebae
--- /dev/null
+++ b/docs/concepts/Dependency-Resolution.md
@@ -0,0 +1,197 @@
+---
+title: NuGet Package Dependency Resolution
+description: Details on the process through which a NuGet package's dependencies are resolved and installed in both NuGet 2.x and NuGet 3.x+.
+author: JonDouglas
+ms.author: jodou
+ms.date: 08/14/2017
+ms.topic: article
+---
+
+# How NuGet resolves package dependencies
+
+Any time a package is installed or reinstalled, which includes being installed as part of a [restore](../consume-packages/package-restore.md) process, NuGet also installs any additional packages on which that first package depends.
+
+Those immediate dependencies might then also have dependencies on their own, which can continue to an arbitrary depth. This produces what's called a *dependency graph* that describes the relationships between packages at all levels.
+
+When multiple packages have the same dependency, then the same package ID can appear in the graph multiple times, potentially with different version constraints. However, only one version of a given package can be used in a project, so NuGet must choose which version is used. The exact process depends on the package management format being used.
+
+## Dependency resolution with PackageReference
+
+When installing packages into projects using the PackageReference format, NuGet adds references to a flat package graph in the appropriate file and resolves conflicts ahead of time. This process is referred to as *transitive restore*. Reinstalling or restoring packages is then a process of downloading the packages listed in the graph, resulting in faster and more predictable builds.
+
+You can also take advantage of floating versions, such as 2.8.\*, to avoid modifying the project to use the latest version of a package. When using floating versions, we recommend enabling the [lock file functionality](../consume-packages/package-references-in-project-files.md#locking-dependencies) to ensure repeatability.
+
+When the NuGet restore process runs prior to a build, it resolves dependencies first in memory, then writes the resulting graph to a file called `project.assets.json`.
+
+The assets file is located at `MSBuildProjectExtensionsPath`, which defaults to the project's 'obj' folder.
+MSBuild then reads this file and translates it into a set of folders where potential references can be found, and then adds them to the project tree in memory.
+
+The `project.assets.json` file is temporary and should not be added to source control. It's listed by default in both `.gitignore` and `.tfignore`. See [Packages and source control](../consume-packages/packages-and-source-control.md).
+
+### Dependency resolution rules
+
+Transitive restore applies four main rules to resolve dependencies: [lowest applicable version](#lowest-applicable-version), [floating versions](#floating-versions), [direct-dependency-wins](#direct-dependency-wins), and [cousin dependencies](#cousin-dependencies).
+
+#### Lowest applicable version
+
+The lowest applicable version rule restores the lowest possible version of a package as defined by its dependencies. It also applies to dependencies on the application or the class library unless declared as [floating](#floating-versions).
+
+In the following figure, for example, 1.0-beta is considered lower than 1.0 so NuGet chooses the 1.0 version:
+
+
+
+In the next figure, version 2.1 is not available on the feed but because the version constraint is >= 2.1 NuGet picks the next lowest version it can find, in this case 2.2:
+
+
+
+When an application specifies an exact version number, such as 1.2, that is not available on the feed, NuGet fails with an error when attempting to install or restore the package:
+
+
+
+#### Floating versions
+
+A floating dependency version is specified with the \* character. For example, `6.0.*`. This version specification says "use the latest 6.0.x version"; `4.*` means "use the latest 4.x version." Using a floating version reduces changes to the project file, while keeping up to date with the latest version of a dependency.
+Floating versions can only be specified at the project level.
+
+When using a floating version, NuGet resolves the highest version of a package that matches the version pattern, for example `6.0.*` gets the highest version of a package that starts with 6.0:
+
+
+
+| Version | Versions present on server | Resolution | Reason | Notes |
+|----------|--------------|-------------|-------------|-------------|
+| * | 1.1.0 1.1.1 1.2.0 1.3.0-alpha | 1.2.0 | The highest stable version. |
+| 1.1.* | 1.1.0 1.1.1 1.1.2-alpha 1.2.0-alpha | 1.1.1 | The highest stable version that respects the specified pattern.|
+| \*-\* | 1.1.0 1.1.1 1.1.2-alpha 1.3.0-beta | 1.3.0-beta | The highest version including the not stable versions. | Available in Visual Studio version 16.6, NuGet version 5.6, .NET Core SDK version 3.1.300 |
+| 1.1.\*-\* | 1.1.0 1.1.1 1.1.2-alpha 1.1.2-beta 1.3.0-beta | 1.1.2-beta | The highest version respecting the pattern and including the not stable versions. | Available in Visual Studio version 16.6, NuGet version 5.6, .NET Core SDK version 3.1.300 |
+| 1.2.0-rc.* | 1.1.0 1.2.0-rc.1 1.2.0-rc.2 1.2.0 | 1.2.0 | Despite this being a version range with a prerelease part, stables are allowed if they match the stable part. Given that 1.2.0 > 1.2.0-rc.2, it is chosen. | |
+
+> [!Note]
+> Floating version resolution does not take into account whether or not a package is listed.
+> Floating version resolution will be resolved locally if the conditions can be satisfied with packages in the Global Package Folder.
+
+#### Direct dependency wins
+
+When the package graph for an application contains different versions of a package in the same subgraph, and one of those versions is a direct dependency in that subgraph, that version would be chosen for that subgraph and the rest will be ignored.
+This behavior allows an application to override any particular package version in the dependency graph.
+
+In the example below, the application depends directly on Package B with a version constraint of >=2.0.0. The application also depends on Package A which in turn also depends on Package B, but with a >=1.0.0 constraint. Because the dependency on Package B 2.0.0 is direct dependency to the application in the graph, that version is used:
+
+
+
+>[!Warning]
+> The Direct dependency wins rule can result in a downgrade of the package version, thus potentially breaking other dependencies in the graph. When a package is downgraded, NuGet adds a [warning to alert the user](..\reference\errors-and-warnings\NU1605.md).
+
+This rule also results in greater efficiency with a large dependency graph.
+When a closer dependency in the same subgraph has a higher version than a further one, then NuGet ignores that dependency, and NuGet also ignores all remaining dependencies on that branch of the graph.
+
+In the diagram below, for example, because Package C 2.0.0 is used, NuGet ignores any branches in that subgraph that refer to an earlier version of Package C:
+
+
+
+Through this rule, NuGet tries to honor the intent of the package author.
+In the diagram below, the author of Package A has explicitly downgraded to Package C 1.0.0 from Package C 2.0.0.
+
+
+
+The application owner can choose to upgrade Package C to a version higher than 2.0.0, thus no further downgrading the version for Package C. In this case, no warning is raised.
+
+
+
+#### Cousin dependencies
+
+When different package versions are referred in different subgraphs in the graph from the application, NuGet uses the lowest version that satisfies all version requirements (as with the [lowest applicable version](#lowest-applicable-version) and [floating versions](#floating-versions) rules). In the image below, for example, version 2.0.0 of Package B satisfies the other >=1.0.0 constraint, and is thus used:
+
+
+
+Note that the packages do not need to be on the same distance for the cousin dependencies rule to apply. In the diagram below, Package D 2.0.0 is chosen in the Package C subgraph and Package D 3.0.0 is chosen in the subgraph of Package A. In the Application subgraph, there is no direct dependency to Package D, so the the [lowest applicable version](#lowest-applicable-version) rule is applied and version 3.0.0 is chosen.
+
+
+
+In some cases, it's not possible to meet all version requirements. As shown below, if Package A requires exactly Package B 1.0.0 and Package C requires Package B >=2.0.0, then NuGet cannot resolve the dependencies and gives an error.
+
+
+
+In these situations, the top-level consumer (the application or package) should add its own direct dependency on Package B so that the [Direct dependency wins](#direct-dependency-wins) rule applies.
+
+### Version ranges and prerelease versions with PackageReference
+
+It is not unusual for a package to have both stable and prerelease versions available.
+When resolving a dependency graph, NuGet decides whether to consider prerelease versions for a package based on a single rule:
+`If the project or any packages within the graph request a prerelease version of a package, then include both prerelease or stable versions, otherwise consider stable versions only.`
+
+In practice, under the lowest applicable rule, this means:
+
+| Version Range | Available versions | Selected version |
+|---------------|--------------------|------------------|
+| [1.0.0, 2.0.0) | 1.2.0-beta.1, 1.2.0, | 1.2.0 |
+| [1.0.0, 2.0.0-0) | 1.2.0-beta.1, 1.2.0, | 1.2.0-beta.1 |
+| [1.0.0, 2.0.0) | 1.2.0-beta.1, 2.0.0-beta.3 | None, [NU1103](../reference/errors-and-warnings/NU1103.md) is raised. |
+| [1.0.0, 2.0.0-rc) | 1.2.0-beta.1, 2.0.0-beta.3 | 1.2.0-beta.1 |
+
+## Dependency resolution with packages.config
+
+With `packages.config`, a project's dependencies are written to `packages.config` as a flat list. Any dependencies of those packages are also written in the same list. When packages are installed, NuGet might also modify the `.csproj` file, `app.config`, `web.config`, and other individual files.
+
+With `packages.config`, NuGet attempts to resolve dependency conflicts during the installation of each individual package. That is, if Package A is being installed and depends on Package B, and Package B is already listed in `packages.config` as a dependency of something else, NuGet compares the versions of Package B being requested and attempts to find a version that satisfies all version constraints. Specifically, NuGet selects the lower *major.minor* version that satisfies dependencies.
+
+By default, NuGet 2.8 looks for the lowest patch version (see [NuGet 2.8 release notes](../release-notes/nuget-2.8.md#patch-resolution-for-dependencies)). You can control this setting through the `DependencyVersion` attribute in `NuGet.Config` and the `-DependencyVersion` switch on the command line.
+
+The `packages.config` process for resolving dependencies gets complicated for larger dependency graphs. Each new package installation requires a traversal of the whole graph and raises the chance for version conflicts. When a conflict occurs, installation is stopped, leaving the project in an indeterminate state, especially with potential modifications to the project file itself. This is not an issue when using other package management formats.
+
+### Version ranges and prerelease versions with packages.config
+
+packages.config resolution does not allow mixing of stable and pre-release dependency in a graph.
+If a dependency is expressed with a range like `[1.0.0, 2.0.0)`, pre-release packages are not allowed in the graph.
+
+## Managing dependency assets
+
+When using the PackageReference format, you can control which assets from dependencies flow into the top-level project. For details, see [PackageReference](../consume-packages/package-references-in-project-files.md#controlling-dependency-assets).
+
+When the top-level project is itself a package, you also have control over this flow by using the `include` and `exclude` attributes with dependencies listed in the `.nuspec` file. See [.nuspec Reference - Dependencies](../reference/nuspec.md#dependencies).
+
+## Excluding references
+
+There are scenarios in which assemblies with the same name might be referenced more than once in a project, producing design-time and build-time errors. Consider a project that contains a custom version of `C.dll`, and references Package C that also contains `C.dll`. At the same time, the project also depends on Package B which also depends on Package C and `C.dll`. As a result, NuGet can't determine which `C.dll` to use, but you can't just remove the project's dependency on Package C because Package B also depends on it.
+
+To resolve this, you must directly reference the `C.dll` you want (or use another package that references the right one), and then add a dependency on Package C that excludes all its assets. This is done as follows depending on the package management format in use:
+
+- [PackageReference](../consume-packages/package-references-in-project-files.md): add `ExcludeAssets="All"` in the dependency:
+
+ ```xml
+
+ ```
+
+- `packages.config`: remove the reference to PackageC from the `.csproj` file so that it references only the version of `C.dll` that you want.
+
+## Dependency updates during package install
+
+If a dependency version is already satisfied, the dependency isn't updated during other package installations. For example, consider package A that depends on package B and specifies 1.0 for the version number. The source repository contains versions 1.0, 1.1, and 1.2 of package B. If A is installed in a project that already contains B version 1.0, then B 1.0 remains in use because it satisfies the version constraint. However, if package A had requests version 1.1 or higher of B, then B 1.2 would be installed.
+
+## Resolving incompatible package errors
+
+During a package restore operation, you may see the error "One or more packages are not compatible..." or that a package "is not compatible" with the project's target framework.
+
+This error occurs when one or more of the packages referenced in your project do not indicate that they support the project's target framework; that is, the package does not contain a suitable DLL in its `lib` folder for a target framework that is compatible with the project. (See [Target frameworks](../reference/target-frameworks.md) for a list.)
+
+For example, if a project targets `netstandard1.6` and you attempt to install a package that contains DLLs in only the `lib\net20` and `\lib\net45` folders, then you see messages like the following for the package and possibly its dependents:
+
+```output
+Restoring packages for myproject.csproj...
+Package ContosoUtilities 2.1.2.3 is not compatible with netstandard1.6 (.NETStandard,Version=v1.6). Package ContosoUtilities 2.1.2.3 supports:
+ - net20 (.NETFramework,Version=v2.0)
+ - net45 (.NETFramework,Version=v4.5)
+Package ContosoCore 0.86.0 is not compatible with netstandard1.6 (.NETStandard,Version=v1.6). Package ContosoCore 0.86.0 supports:
+ - 11 (11,Version=v0.0)
+ - net20 (.NETFramework,Version=v2.0)
+ - sl3 (Silverlight,Version=v3.0)
+ - sl4 (Silverlight,Version=v4.0)
+One or more packages are incompatible with .NETStandard,Version=v1.6.
+Package restore failed. Rolling back package changes for 'MyProject'.
+```
+
+To resolve incompatibilities, do one of the following:
+
+- Retarget your project to a framework that is supported by the packages you want to use.
+- Contact the author of the packages and work with them to add support for your chosen framework. Each package listing page on [nuget.org](https://www.nuget.org/) has a **Contact Owners** link for this purpose.
+
+[!INCLUDE [nugetsolver-tool](../includes/nugetsolver-tool.md)]
diff --git a/docs/concepts/MSBuild-props-and-targets.md b/docs/concepts/MSBuild-props-and-targets.md
new file mode 100644
index 000000000..1f40da97a
--- /dev/null
+++ b/docs/concepts/MSBuild-props-and-targets.md
@@ -0,0 +1,78 @@
+---
+title: MSBuild props and targets in a package
+description: Describes MSBuild props and targets in NuGet packages
+author: nkolev92
+ms.author: nikolev
+ms.date: 07/13/2022
+ms.topic: article
+---
+
+# MSBuild .props and .targets in a package
+
+In additional to the more traditional assemblies, NuGet packages may sometimes add custom build targets or properties to projects that consume that package.
+This can be achieved by adding a valid MSBuild file, in the form `.targets` or `.props` (such as `Contoso.Utility.UsefulStuff.targets`) within the build folders of the project.
+
+## Build folders
+
+As NuGet has evolved, various different folders for build `.props` and `.targets` have been added.
+
+| Folder | NuGet Version | Use |
+|--------|---------------|-----|
+| build | 2.5+ | Build logic for every framework of a project. |
+| buildMultiTargeting | 4.0+ | Build logic for the `outer build` for projects that target multiple frameworks. PackageReference only. |
+| buildTransitive | 5.0+ | Build logic for assets that flow transitively to any consuming project. See the [feature](https://github.com/NuGet/Home/wiki/Allow-package--authors-to-define-build-assets-transitive-behavior) page. PackageReference only. |
+
+## Framework specific build folder
+
+All 3 build folder follow the same pattern for deciding the most suitable file based on the project target framework.
+
+Files in the root build folder, `build/.targets` and `build/.props` are considered suitable for all target frameworks.
+
+To provide framework-specific files, first place them within appropriate subfolders, such as the following:
+
+```text
+ \build
+ \netstandard1.4
+ \Contoso.Utility.UsefulStuff.props
+ \Contoso.Utility.UsefulStuff.targets
+ \net462
+ \Contoso.Utility.UsefulStuff.props
+ \Contoso.Utility.UsefulStuff.targets
+```
+
+Prefer using framework-specific build folders whenever appropriate to avoid false positive installations in projects that may not be supported by your package.
+
+Note that if a package does not have any files in the `lib` or `ref` folders and only files under a framework specific build folder, that package will be considered compatible with all projects. Up to date versions of the pack tooling, raise the [NU5127](..\reference\errors-and-warnings\NU5127.md) warning when such packages are created.
+
+## Projects consuming packages with build files
+
+### PackageReference projects
+
+`.props` and `.targets` are not added to the project file but are instead made available through `{projectName}.nuget.g.targets` and `{projectName}.nuget.g.props`. These files are automatically generated when restore is run.
+
+When a project targets more than one framework, the imports to these files are conditioned on the target framework name.
+
+MSBuild `.props` and `.targets` files for multi-framework targeting can be placed in the `\buildMultiTargeting` folder.
+When the imports are generated, a condition that the MSBuild property `$(TargetFramework)` is empty is set.
+
+### packages.config projects
+
+When NuGet installs a package with `\build` files, it adds MSBuild `` elements in the project file pointing to the `.targets` and `.props` files. (`.props` is added at the top of the project file; `.targets` is added at the bottom.) A separate conditional MSBuild `` element is added for each target framework.
+
+## Authoring packages with MSBuild props and targets
+
+You can use any of the following tools to include MSBuild `.props` and `.targets` in your package.
+
+- [NuGet.exe pack](..\create-packages\Creating-a-Package.md#include-msbuild-props-and-targets-in-a-package)
+- [dotnet.exe pack](..\create-packages\creating-a-package-dotnet-cli.md)
+- [MSBuild.exe pack](..\create-packages\creating-a-package-msbuild.md)
+
+### Guidance for the content of MSBuild props and targets
+
+NuGet does not limit how you author `.props` and `.targets` as they will vary based on the need of the package author and the target projects themselves.
+
+There are a few things that must not be done in packages' `.props` and `.targets`, such as not specifying properties and items that affect restore, as those will be automatically excluded.
+
+- Some examples of properties that must not be added or updated: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback etc.
+
+- Some examples of items that must not be added or updated: PackageReference, PackageVersion, PackageDownload, etc.
diff --git a/docs/concepts/NuGet-MCP-Server.md b/docs/concepts/NuGet-MCP-Server.md
new file mode 100644
index 000000000..ccbd97e63
--- /dev/null
+++ b/docs/concepts/NuGet-MCP-Server.md
@@ -0,0 +1,182 @@
+---
+title: Using the NuGet Model Context Protocol (MCP) Server
+description: How to configure and use the NuGet Model Context Protocol (MCP) server.
+author: jeffkl
+ms.author: jeffkl
+ms.topic: conceptual
+ms.date: 10/01/2025
+---
+
+# Using the NuGet Model Context Protocol (MCP) Server
+
+## Requirements
+
+To run the MCP server, you must have **[.NET 10 SDK or later](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)** installed.
+This version of .NET adds a command, `dnx`, which is used to download, install, and run the MCP server from [nuget.org](https://nuget.org).
+
+To verify your .NET version, run the following command in your terminal:
+```bash
+dotnet --info
+```
+
+## Getting started in Visual Studio 2026
+
+In Visual Studio 2026, the NuGet MCP server is built-in but must be enabled once in order to use its functionality.
+
+To enable the NuGet MCP server, follow these steps:
+1. Open Visual Studio 2026.
+1. Open the GitHub Copilot Chat window and make sure you are signed in.
+1. Click the tools icon in the bottom toolbar to bring up the Tools menu.
+1. Find the MCP server named "nuget" and check the box to enable it.
+
+
+
+## Getting started in Visual Studio 2022
+
+> [!NOTE]
+> You must have Visual Studio 2022 17.14 or later in order to configure an MCP server.
+
+In Visual Studio 2022, you must manually add the NuGet MCP server to your configuration.
+There are several configuration files that Visual Studio 2022 uses to define MCP servers.
+See [Use MCP Servers](/visualstudio/ide/mcp-servers) for more information on which file to configure.
+
+Once you have identified the correct configuration file, add the following JSON snippet to your `mcp.json`:
+```json
+{
+ "servers": {
+ "nuget": {
+ "type": "stdio",
+ "command": "dnx",
+ "args": [ "NuGet.Mcp.Server", "--source", "https://api.nuget.org/v3/index.json", "--yes" ]
+ }
+ }
+}
+```
+
+This will configure Visual Studio 2022 to use the latest version of the NuGet MCP server from nuget.org.
+To verify that the MCP server is working correctly, open the GitHub Copilot Chat window and make sure you are signed in.
+Then click the Tools icon in the bottom toolbar to bring up the Tools menu.
+You should see the MCP server named "nuget" in the list of available servers.
+
+
+
+## Getting started in VS Code
+
+To configure the NuGet MCP server in VS Code click the appropriate button below and it will be set up.
+
+[](
+https://vscode.dev/redirect/mcp/install?name=NuGet&config=%7B%22name%22%3A%22NuGet.Mcp.Server%22%2C%22command%22%3A%22dnx%22%2C%22args%22%3A%5B%22NuGet.Mcp.Server%22%2C%22https%3A%2F%2Fapi.nuget.org%2Fv3%2Findex.json%22%2Cnull%2Cnull%5D%7D) [](https://vscode.dev/redirect/mcp/install?name=NuGet&config=%7B%22name%22%3A%22NuGet.Mcp.Server%22%2C%22command%22%3A%22dnx%22%2C%22args%22%3A%5B%22NuGet.Mcp.Server%22%2C%22https%3A%2F%2Fapi.nuget.org%2Fv3%2Findex.json%22%2Cnull%2Cnull%5D%7D&quality=insiders)
+
+> 
+
+To verify that the MCP server is working correctly, open the GitHub Copilot Chat window and make sure you are signed in.
+Then click the Tools icon in the bottom toolbar to bring up the Tools menu.
+You should see the MCP server named "nuget" in the list of available servers.
+
+## Getting started in GitHub Copilot Agent
+
+You can also configure the MCP Server to work with GitHub Copilot as a Coding Agent in your repositories.
+Ensure that you configured your repository to use [GitHub Copilot Coding Agents](https://github.com/settings/copilot/coding_agent).
+
+Browse to your repository and click the Settings tab.
+Expand the Copilot section and click on Coding Agents.
+
+
+
+Scroll down to the **Model Context Protocol (MCP)** section and add the following JSON snippet to your `mcpServers` configuration:
+
+```json
+{
+ "mcpServers": {
+ "NuGet": {
+ "type": "local",
+ "command": "dnx",
+ "args": ["NuGet.Mcp.Server", "--yes"],
+ "tools": ["*"],
+ "env": {}
+ }
+ }
+}
+```
+
+This will make all of NuGet's MCP server tools available. If you want specific tools, you can list them in the `"tools"` parameter array.
+
+Finally, click the **Save MCP configuration** button to save your changes.
+
+Now that the NuGet MCP is configured, you will also need to create a GitHub Actions workflow to install .NET 10 Preview 6 or higher so that the `dnx` command is available to run the MCP server.
+You can do this by creating the following workflow file in your repository at
+
+`.github/workflows/copilot-setup-steps.yml`
+
+The contents of this workflow file should be as follows:
+
+```yml
+name: "Copilot Setup Steps"
+
+# Automatically run the setup steps when they are changed to allow for easy validation, and
+# allow manual testing through the repository's "Actions" tab
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - .github/workflows/copilot-setup-steps.yml
+ pull_request:
+ paths:
+ - .github/workflows/copilot-setup-steps.yml
+
+jobs:
+ # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
+ copilot-setup-steps:
+ runs-on: ubuntu-latest
+
+ # Set the permissions to the lowest permissions possible needed for your steps.
+ # Copilot will be given its own token for its operations.
+ permissions:
+ # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete.
+ contents: read
+
+ # You can define any steps you want, and they will run before the agent starts.
+ # If you do not check out your code, Copilot will do this for you.
+ steps:
+ - name: Install .NET 10.x
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: |
+ 10.x
+ dotnet-quality: preview
+
+ - name: dotnet --info
+ run: dotnet --info
+```
+
+This will ensure that the `dnx` command is available to run the NuGet MCP server when GitHub Copilot runs as a coding agent in your repository.
+
+## Fixing package vulnerabilities
+
+The NuGet MCP server can help you identify and fix package vulnerabilities in your project.
+To use the MCP server to fix vulnerabilities, enter the following prompt in the GitHub Copilot Chat window:
+
+> Fix my package vulnerabilities
+
+The MCP server will analyze your project's dependencies and suggest updates to packages that have known vulnerabilities.
+
+## Updating all packages
+
+The NuGet MCP server can also update your packages to the latest compatible versions.
+To use the MCP server to update all packages, enter the following prompt in the GitHub Copilot Chat window:
+
+> Update all my packages to the latest compatible versions
+
+The MCP server will analyze your project's target framework(s) and suggest updates to the latest version of packages that are compatible with your project.
+
+## Update a package to a specific version
+
+The NuGet MCP server can update a specific package to a version you specify.
+To do so, enter the following prompt in the GitHub Copilot Chat window:
+
+> Update the package [PackageName] to version [VersionNumber]
+
+## Support
+
+If you experience an issue with the NuGet MCP server or have any other feedback, please open an issue on the [NuGet GitHub repository](https://github.com/NuGet/Home/issues/new?template=MCPSERVER.yml).
+Please provide the requested information in the issue template so that we can better understand and address your issue or suggestion.
\ No newline at end of file
diff --git a/docs/concepts/Package-Versioning.md b/docs/concepts/Package-Versioning.md
new file mode 100644
index 000000000..eb29a1da6
--- /dev/null
+++ b/docs/concepts/Package-Versioning.md
@@ -0,0 +1,273 @@
+---
+title: NuGet Package Version Reference
+description: Exact details on specifying version numbers and ranges for other packages upon which a NuGet package depends, and how dependencies are installed.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/23/2018
+ms.topic: reference
+ms.reviewer: anangaur
+---
+
+# Package versioning
+
+A specific package is always referred to using its package identifier and an exact version number. For example, [Entity Framework](https://www.nuget.org/packages/EntityFramework/) on nuget.org has several dozen specific packages available, ranging from version *4.1.10311* to version *6.1.3* (the latest stable release) and a variety of pre-release versions like *6.2.0-beta1*.
+
+When creating a package, you assign a specific version number with an optional pre-release text suffix. When consuming packages, on the other hand, you can specify either an exact version number or a range of acceptable versions.
+
+The following document follows the [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) standard, supported by NuGet 4.3.0+ and Visual Studio 2017 version 15.3+.
+Certain [semantics of SemVer v2.0.0](#semantic-versioning-200) are not supported in older clients.
+
+In this topic:
+
+- [Version basics](#version-basics) including pre-release suffixes.
+- [Version ranges](#version-ranges)
+- [Normalized version numbers](#normalized-version-numbers)
+- [Semantic Versioning 2.0.0](#semantic-versioning-200)
+
+## Version basics
+
+A specific version number is in the form *Major.Minor.Patch[-Suffix]*, where the components have the following meanings:
+
+- *Major*: Breaking changes
+- *Minor*: New features, but backwards compatible
+- *Patch*: Backwards compatible bug fixes only
+- *-Suffix* (optional): a hyphen followed by a string denoting a pre-release version (following the [Semantic Versioning or SemVer](https://semver.org/) convention).
+
+**Examples:**
+
+```
+1.0.1
+6.11.1231
+4.3.1-rc
+2.2.44-beta.1
+```
+
+> [!Important]
+> nuget.org rejects any package upload that lacks an exact version number. The version must be specified in the `.nuspec` or project file used to create the package.
+
+### Pre-release versions
+
+Technically speaking, package creators can use any string as a suffix to denote a pre-release version, as NuGet treats any such version as pre-release and makes no other interpretation. That is, NuGet displays the full version string in whatever UI is involved, leaving any interpretation of the suffix's meaning to the consumer.
+
+That said, package developers generally follow recognized naming conventions:
+
+- `-alpha`: Alpha release, typically used for work-in-progress and experimentation.
+- `-beta`: Beta release, typically one that is feature complete for the next planned release, but may contain known bugs.
+- `-rc`: Release candidate, typically a release that's potentially final (stable) unless significant bugs emerge.
+
+When ordering versions by precedence, NuGet follows the SemVer standard and chooses a version without a suffix first, then applies precedence to pre-release versions in reverse alphabetical order and treats dot notation numbers with numerical order.
+
+> [!Note]
+> Prerelease numbers with dot notation, as in *1.0.1-build.23*, are considered part of the [SemVer 2.0.0](https://semver.org/spec/v2.0.0.html) standard, and as such are [only supported with NuGet 4.3.0+](#semantic-versioning-200).
+
+### [SemVer 2.0 sorting](#tab/semver20sort)
+
+```
+1.0.1
+1.0.1-zzz
+1.0.1-rc.10
+1.0.1-rc.2
+1.0.1-open
+1.0.1-beta
+1.0.1-alpha2
+1.0.1-alpha10
+1.0.1-aaa
+```
+
+Note that 1.0.1-alpha10 is sorted strictly in reverse alphabetical order, whereas 1.0.1-rc.10 is greater precedence than 1.0.1-rc.2.
+
+### [SemVer 1.0 sorting](#tab/semver10sort)
+
+```
+1.0.1
+1.0.1-zzz
+1.0.1-open
+1.0.1-beta05
+1.0.1-beta02
+1.0.1-beta
+1.0.1-alpha2
+1.0.1-alpha10
+1.0.1-aaa
+```
+
+Note that versions such as `1.0.1-rc.10` and `1.0.1-rc.2` are not parsable by older versions of the client, and such packages with those versions won't be available for download with those clients.
+
+If you use numerical suffixes with pre-release tags that might use double-digit numbers (or more), use leading zeroes as in beta01 and beta05 to ensure that they sort correctly when the numbers get larger.
+This recommendation only applies this schema.
+
+Despite the ordering shown above, NuGet does not always consider both stable & prerelease packages during dependency resolution. Those rules are detailed in [Dependency Resolution](./Dependency-Resolution.md).
+
+---
+
+## Version ranges
+
+When referring to package dependencies, NuGet supports using interval notation for specifying version ranges, summarized as follows:
+
+| Notation | Applied rule | Description |
+|----------|--------------|-------------|
+| 1.0 | x ≥ 1.0 | Minimum version, inclusive |
+| [1.0,) | x ≥ 1.0 | Minimum version, inclusive |
+| (1.0,) | x > 1.0 | Minimum version, exclusive |
+| [1.0] | x == 1.0 | Exact version match |
+| (,1.0] | x ≤ 1.0 | Maximum version, inclusive |
+| (,1.0) | x < 1.0 | Maximum version, exclusive |
+| [1.0,2.0] | 1.0 ≤ x ≤ 2.0 | Exact range, inclusive |
+| (1.0,2.0) | 1.0 < x < 2.0 | Exact range, exclusive |
+| [1.0,2.0) | 1.0 ≤ x < 2.0 | Mixed inclusive minimum and exclusive maximum version |
+| (1.0) | invalid | invalid |
+
+### Best Practice
+
+Always specify a version or version range for package dependencies in project files, `packages.config` files, and `.nuspec` files. Without a version or version range, when resolving a dependency, consistent restore results are not guaranteed.
+Avoid specifying an upper bound to version ranges to packages you don't own unless you know of a compatibility problem. Upper bounds to version ranges harm adoption, discourage consumers from getting valuable updates to dependencies, and in some cases may lead them to use unsupported versions of dependencies.
+
+#### References in project files (PackageReference)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+**References in `packages.config`:**
+
+In `packages.config`, every dependency is listed with an exact `version` attribute that's used when restoring packages. The `allowedVersions` attribute is used only during update operations to constrain the versions to which the package might be updated.
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+**References in `.nuspec` files**
+
+The `version` attribute in a `` element describes the range versions that are acceptable for a dependency.
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## Normalized version numbers
+
+> [!Note]
+> This is a breaking change for NuGet 3.4+.
+
+When obtaining packages from a repository during install, reinstall, or restore operations, NuGet 3.4+ treats version numbers as follows:
+
+- Leading zeroes are removed from version numbers:
+ - 1.00 is treated as 1.0
+ - 1.01.1 is treated as 1.1.1
+ - 1.00.0.1 is treated as 1.0.0.1
+
+- A zero in the fourth part of the version number will be omitted
+ - 1.0.0.0 is treated as 1.0.0
+ - 1.0.01.0 is treated as 1.0.1
+
+- SemVer 2.0.0 build metadata is removed
+ - 1.0.7+r3456 is treated as 1.0.7
+
+`pack` and `restore` operations normalize versions whenever possible. For packages already built, this normalization does not affect the version numbers in the packages themselves; it affects only how NuGet matches versions when resolving dependencies.
+
+However, NuGet package repositories must treat these values in the same way as NuGet to prevent package version duplication. Thus a repository that contains version *1.0* of a package should not also host version *1.0.0* as a separate and different package.
+
+## Semantic Versioning 2.0.0
+
+Certain semantics of SemVer v2.0.0 are not supported in older clients.
+NuGet considers a package version to be SemVer v2.0.0 specific if either of the following statements is true:
+
+- The pre-release label is dot-separated, for example, *1.0.0-alpha.1*
+- The version has build-metadata, for example, *1.0.0+githash*
+
+For nuget.org, a package is defined as a SemVer v2.0.0 package if either of the following statements is true:
+
+- The package's own version is SemVer v2.0.0 compliant but not SemVer v1.0.0 compliant, as defined above.
+- Any of the package's dependency version ranges has a minimum or maximum version that is SemVer v2.0.0 compliant but not SemVer v1.0.0 compliant, defined above; for example, *[1.0.0-alpha.1, )*.
+
+If you upload a SemVer v2.0.0-specific package to nuget.org, the package is invisible to older clients and available to only the following NuGet clients:
+
+- NuGet 4.3.0+
+- Visual Studio 2017 version 15.3+
+- Visual Studio 2015 with [NuGet VSIX v3.6.0](https://dist.nuget.org/visualstudio-2015-vsix/latest/NuGet.Tools.vsix)
+- .NET SDK 2.0.0+
+
+Third-party clients:
+
+- JetBrains Rider
+- Paket version 5.0+
+
+
+
+
+## Where NuGetVersion diverges from Semantic Versioning
+
+If you want to programatically use NuGet package versions, it is strongly recommended to use [the package NuGet.Versioning](https://www.nuget.org/packages/NuGet.Versioning). The static method `NuGetVersion.Parse(string)` can be used to parse the version strings, and `VersionComparer` can be used to sort `NuGetVersion` instances.
+
+If you are implementing NuGet functionality in a language that does not run on .NET, here are the known list of differences between `NuGetVersion` and Semantic Versioning, and the reasons why an existing Semantic Versioning library might not work for packages already published on nuget.org.
+
+1. `NuGetVersion` supports a 4th version segment, `Revision`, to be compatible with, or a superset of, [`System.Version`](/dotnet/api/system.version). Therefore, excluding prerelease and metadata labels, a version string is `Major.Minor.Patch.Revision`. As per version normalization described above, if `Revision` is zero, it is omitted from the normalized version string.
+2. `NuGetVersion` only requires the major segment to be defined. All others are optional, and are equivalent to zero. This means that `1`, `1.0`, `1.0.0`, and `1.0.0.0` are all accepted and equal.
+3. `NuGetVersion` uses case insensitive string comparisons for pre-release components. This means that `1.0.0-alpha` and `1.0.0-Alpha` are equal.
diff --git a/docs/concepts/Security-Best-Practices.md b/docs/concepts/Security-Best-Practices.md
new file mode 100644
index 000000000..d28f60fb0
--- /dev/null
+++ b/docs/concepts/Security-Best-Practices.md
@@ -0,0 +1,319 @@
+---
+title: Best practices for a secure software supply chain
+description: Best practices for securing your software supply chain using NuGet & GitHub.
+author: JonDouglas
+ms.author: jodou
+ms.topic: best-practice
+---
+
+# Best practices for a secure software supply chain
+
+Open Source is everywhere.
+It is in many proprietary codebases and community projects.
+For organizations and individuals, the question today is not whether you are or are not using open-source code, but what open-source code you are using, and how much.
+
+If you're not aware of what is in your software supply chain, an upstream vulnerability in one of your dependencies can be fatal, making you, and your customers, vulnerable to a potential compromise.
+In this document, we will dive deeper into what the term “software supply chain” means, why it matters, and how you can help secure your project’s supply chain with best practices.
+
+
+
+## Dependencies
+
+The term software supply chain is used to refer to everything that goes into your software and where it comes from.
+It is the dependencies and properties of your dependencies that your software supply chain depends on.
+A dependency is what your software needs to run.
+It can be code, binaries, or other components, and where they come from, such as a repository or package manager.
+
+It includes who wrote the code, when it was contributed, how it was reviewed for security issues, known vulnerabilities, supported versions, license information, and just about anything that touches it at any point of the process.
+
+Your supply chain also encompasses other parts of your stack beyond a single application, such as your build and packaging scripts or the software that runs the infrastructure your application relies on.
+
+## Vulnerabilities
+
+Today, software dependencies are pervasive.
+It is quite common for your projects to use hundreds of open-source dependencies for functionality that you did not have to write yourself.
+This may mean that most of your application consists of code that you did not author.
+
+
+
+Possible vulnerabilities in your third-party or open-source dependencies, are presumably dependencies you cannot control as tightly as the code you write, which can create potential security risks in your supply chain.
+
+If one of these dependencies has a vulnerability, the chances are you have a vulnerability as well.
+This can be scary as one of your dependencies may change without you even knowing.
+Even if a vulnerability exists in a dependency today, but is not exploitable, it can be exploitable in the future.
+
+Being able to leverage the work of thousands of open-source developers and library authors means that thousands of strangers can effectively contribute directly to your production code.
+Your product, through your software supply chain, is affected by unpatched vulnerabilities, innocent mistakes, or even malicious attacks against dependencies.
+
+## Supply chain compromises
+
+The traditional definition of a supply chain comes from manufacturing; it is the chain of processes required to make and supply something.
+It includes planning, supply of materials, manufacturing, and retail.
+A software supply chain is similar, except instead of materials, it is code.
+Instead of manufacturing, it is development.
+Instead of digging ore from the ground, code is sourced from suppliers, commercial or open source, and, in general, the open-source code comes from repositories.
+Adding code from a repository means your product takes a dependency on that code.
+
+One example of a software supply chain attack occurs when malicious code is purposefully added to a dependency, using the supply chain of that dependency to distribute the code to its victims.
+Supply chain attacks are real.
+There are many methods to attack a supply chain, from directly inserting malicious code as a new contributor, to taking over a contributor’s account without others noticing, or even compromising a signing key to distribute software that is not officially part of the dependency.
+
+A software supply chain attack is in and of itself rarely the end goal, rather it is the beginning of an opportunity for an attacker to insert malware or provide a backdoor for future access.
+
+
+
+## Unpatched software
+
+The use of open source today is significant and is not expected to slow down anytime soon.
+Given that we are not going to stop using open-source software, the threat to supply chain security is unpatched software.
+Knowing that, how can you address the risk that a dependency of your project has a vulnerability?
+
+- **Knowing what is in your environment.** This requires discovering your dependencies and any transitive dependencies to understand the risks of those dependencies such as vulnerabilities or licensing restrictions.
+- **Manage your dependencies.** When a new security vulnerability is discovered, you must determine whether you are impacted, and if so, update to the latest version and security patch available.
+ This is especially important to review changes that introduce new dependencies or regularly auditing older dependencies.
+- **Monitor your supply chain.** This is by auditing the controls you have in place to manage your dependencies.
+ This will help you enforce more restrictive conditions to be met for your dependencies.
+
+
+
+We will cover various tools and techniques that NuGet and GitHub provides, which you can use today to address potential risks inside your project.
+
+## Knowing what is in your environment
+
+### Packages with known vulnerabilities
+
+**📦 Package Consumer | 📦🖊 Package Author**
+
+.NET 8 and Visual Studio 17.8 added [NuGetAudit](Auditing-Packages.md), which will warn about direct packages with known vulnerabilities during restore.
+.NET 9 and Visual Studio 17.12 changed the default to warn about transitive packages as well.
+
+NuGetAudit requires a source to provide a known vulnerabilities database, so if you're not using nuget.org as a package source, you should add it as an [audit source](Auditing-Packages.md#audit-sources).
+
+By the time that NuGet is warning you, the vulnerability is publicly known.
+Attackers can use this public disclosure to develop attacks for targets who have not patched their applications.
+Therefore, when you get a warning that a package your project is using has a known vulnerability, you should quickly take action.
+
+### NuGet dependency graph
+
+**📦 Package Consumer**
+
+You can view your NuGet dependencies in your project by looking directly at the respective project file.
+
+This is typically found in one of two places:
+
+- [`packages.config`](../reference/packages-config.md) – Located in the project root.
+- [``](../consume-packages/package-references-in-project-files.md) – Located in the project file.
+
+Depending on what method you use to manage your NuGet dependencies, you can also use Visual Studio to view your dependencies directly in [Solution Explorer](/visualstudio/ide/solutions-and-projects-in-visual-studio#solution-explorer) or [NuGet Package Manager](../consume-packages/install-use-packages-visual-studio.md).
+
+For CLI environments, you can use the [`dotnet list package` command](/dotnet/core/tools/dotnet-list-package) to list out your project or solution’s dependencies.
+You can also use the [`dotnet nuget why` command](/dotnet/core/tools/dotnet-nuget-why) to understand why transitive packages (those not directly referenced by your project) are being included in your project's package graph.
+
+For more information on managing NuGet dependencies, [see the following documentation](../consume-packages/overview-and-workflow.md).
+
+### GitHub dependency graph
+
+**📦 Package Consumer | 📦🖊 Package Author**
+
+You can use GitHub’s dependency graph to see the packages your project depends on and the repositories that depend on it.
+This can help you see any vulnerabilities detected in its dependencies.
+
+For more information on GitHub repository dependencies, [see the following documentation](https://github.co/dependency-graph).
+
+### Dependency versions
+
+**📦 Package Consumer | 📦🖊 Package Author**
+
+To ensure a secure supply chain of dependencies, you will want to ensure that all of your dependencies & tooling are regularly updated to the latest stable version as they will often include the latest functionality and security patches to known vulnerabilities.
+Your dependencies can include code you depend on, binaries you consume, tooling you use, and other components.
+This may include:
+
+- [Visual Studio](https://visualstudio.microsoft.com/downloads/)
+- [.NET SDK & Runtime](https://dotnet.microsoft.com/download)
+- [NuGet](https://www.nuget.org/downloads)
+- [NuGet packages](../consume-packages/reinstalling-and-updating-packages.md)
+
+## Manage your dependencies
+
+### NuGet deprecated and vulnerable dependencies
+
+**📦 Package Consumer | 📦🖊 Package Author**
+
+You can use the [dotnet CLI](/dotnet/core/tools/dotnet-list-package) to list any known deprecated or vulnerable dependencies you may have inside your project or solution.
+You can use the command `dotnet list package --deprecated` or `dotnet list package --vulnerable` to provide you a list of any known deprecations or vulnerabilities.
+[NuGetAudit](Auditing-Packages.md) can warn you about known vulnerable dependencies, and is enabled by default when [a source provides a vulnerabilities database](Auditing-Packages.md#audit-sources).
+
+### GitHub vulnerable dependencies
+
+**📦 Package Consumer | 📦🖊 Package Author**
+
+If your project is hosted on GitHub, you can leverage [GitHub Security](https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/automatically-scanning-your-code-for-vulnerabilities-and-errors) to find security vulnerabilities and errors in your project and Dependabot will fix them by opening up a pull request against your codebase.
+
+Catching vulnerable dependencies before they are introduced is one goal of the [“Shift Left”](https://en.wikipedia.org/wiki/Shift-left_testing) movement.
+Being able to have information about your dependencies such as their license, transitive dependencies, and the age of dependencies helps you do just that.
+
+For more information about Dependabot alerts & security updates, [see the following documentation](https://docs.github.com/en/github/managing-security-vulnerabilities/about-alerts-for-vulnerable-dependencies).
+
+## NuGet Configuration
+
+**📦 Package Consumer**
+
+Add a `nuget.config` file in the root of your project repository. This is considered a best practice as it promotes repeatability and ensures that different users have the same NuGet configuration.
+We recommend adding `clear` elements to ensure no user or machine specific configuration is applied. [Read more about how settings are applied](../consume-packages/configuring-nuget-behavior.md#how-settings-are-applied).
+
+For example:
+
+```xml
+
+
+
+
+
+
+
+
+
+```
+
+### NuGet feeds
+
+**📦 Package Consumer**
+
+Use package sources that you trust.
+When using multiple public & private NuGet source feeds, a package can be downloaded from any of the feeds.
+To ensure your build is predictable and secure from known attacks such as [Dependency Confusion](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610), knowing what specific feed(s) your packages are coming from is a best practice.
+You can use a single feed or private feed with upstreaming capabilities for protection.
+
+For more information to secure your package feeds, see [3 Ways to Mitigate Risk When Using Private Package Feeds](https://azure.microsoft.com/resources/3-ways-to-mitigate-risk-using-private-package-feeds/en-us/).
+
+When using a private feed, refer to the [security best practices for managing credentials](../consume-packages/consuming-packages-authenticated-feeds.md#security-best-practices-for-managing-credentials).
+
+### Client trust policies
+
+**📦 Package Consumer**
+
+There are policies that you can opt-into in which you require the packages you use to be signed.
+This allows you to trust a package author, as long as it is author signed, or trust a package if it is owned by a specific user or account that is repository signed by NuGet.org.
+
+To configure client trust policies, [see the following documentation](../consume-packages/installing-signed-packages.md).
+
+### Lock files
+
+**📦 Package Consumer**
+
+Lock files store the hash of your package’s content.
+If the content hash of a package you want to install matches with the lock file, it will ensure package repeatability.
+
+To enable lock files, [see the following documentation](../consume-packages/package-references-in-project-files.md#locking-dependencies).
+
+### Package Source mapping
+
+**📦 Package Consumer**
+
+Package Source Mapping allows you to centrally declare which source each package in your solution should restore from in your nuget.config file.
+
+To enable package source mapping, [see the following documentation](../consume-packages/package-source-mapping.md).
+
+## Secure computers
+
+### Directory permissions
+
+**📦 Package Consumer**
+
+On Windows and Mac, and some Linux distributions, user account home directories are private by default.
+However, some Linux distributions make user directories readable by other accounts on the same computer by default.
+Additionally, there are [multiple configuration options to redirect NuGet's global packages folder and HTTP cache to non-default locations](../consume-packages/managing-the-global-packages-and-cache-folders.md).
+Solutions, projects, and repositories might also be created outside of the user's home directory.
+
+If you use any packages that are not on nuget.org, then if any other account on the computer can read NuGet's global packages or HTTP cache directories, or the project's build output directory, then these packages might be disclosed to people who should not have access to those packages.
+
+On Linux, `dotnet nuget update source` will change *nuget.config* file permissions to make it only readable by the file owner.
+However, if you edit the *nuget.config* file in any other way, and the file is in a location that other accounts can read the file, there might be information disclosure about package source URL or package source credentials.
+You should ensure any nuget.config file cannot be read by other users of the same computer.
+
+### Solutions within the downloads directory
+
+**📦 Package Consumer**
+
+Extra care should be taken if working on solutions or projects in your downloads directory.
+NuGet will [accumulate settings from multiple config files](../consume-packages/configuring-nuget-behavior.md), and MSBuild will typically import *Directory.Build.props*, *Directory.NuGet.props*, *Directory.Build.targets*, and potentially other files, from any parent directory, right up to the filesystem root.
+
+The downloads folder has additional risk, since it's usually the default location that web browsers will download files from the internet
+
+### Build Agents
+
+**📦 Package Consumer**
+
+Build agents (CI agents) that are not reset to an initial state after every build have multiple risks that must be considered.
+
+To learn about secure ways to manage credentials, [see the docs on consuming packages from authenticated feeds](../consume-packages/consuming-packages-authenticated-feeds.md).
+
+To learn about modifying the directories that NuGet stores data in, see [the docs on managing the global packages, cache, and temp folders](../consume-packages/managing-the-global-packages-and-cache-folders.md).
+These directories should be configured to a directory that the CI agent cleans after every build.
+
+Note that any packages used by your project might be left in your project's build output directory.
+If your project uses packages from authenticated sources, then other users of the same CI agent might gain unauthorized access to the package assemblies.
+Therefore, you should also clean your repo at the end of your build, even when the build fails or is cancelled.
+
+## Monitor your supply chain
+
+### GitHub secret scanning
+
+**📦🖊 Package Author**
+
+GitHub scans repositories for NuGet API keys to prevent fraudulent uses of secrets that were accidentally committed.
+
+To learn more about secret scanning, see [About secret scanning](https://docs.github.com/en/github/administering-a-repository/about-secret-scanning).
+
+### Author Package Signing
+
+**📦🖊 Package Author**
+
+[Author signing](../reference/signed-packages-reference.md) allows a package author to stamp their identity on a package and for a consumer to verify it came from you.
+This protects you against content tampering and serves as a single source of truth about the origin of the package and the package authenticity.
+When combined with client trust policies, you can verify a package came from a specific author.
+
+To author sign a package, see [Sign a package](../create-packages/sign-a-package.md).
+
+### Reproducible Builds
+
+**📦🖊 Package Author**
+
+Reproducible builds creates binaries that are byte-for-byte identical each time you build it, and contain source code links and compiler metadata that enable a package consumer to recreate the binary directly and validate that the build environment has not been compromised.
+
+To learn more about reproducible builds, see [Producing Packages with Source Link](https://devblogs.microsoft.com/dotnet/producing-packages-with-source-link/) and the [Reproducible Build Validation](https://github.com/dotnet/designs/blob/main/accepted/2020/reproducible-builds.md) spec.
+
+### Two-Factor Authentication (2FA)
+
+**📦🖊 Package Author**
+
+Every account on nuget.org has 2FA enabled.
+This adds an extra layer of security when [logging into your GitHub account](https://docs.github.com/en/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa) or your [NuGet.org account](../nuget-org/individual-accounts.md#add-a-new-individual-account).
+
+### Package ID prefix reservation
+
+**📦🖊 Package Author**
+
+To protect the identity of your packages, you can reserve a package ID prefix with your respective namespace to associate a matching owner if your package ID prefix properly falls under the [specified criteria](../nuget-org/id-prefix-reservation.md#id-prefix-reservation-criteria).
+
+To learn about reserving ID prefixes, see [Package ID prefix reservation](../nuget-org/id-prefix-reservation.md).
+
+### Deprecating and unlisting a vulnerable package
+
+**📦🖊 Package Author**
+
+To protect the .NET package ecosystem when you are aware of a vulnerability in a package you have authored, do your best to deprecate and unlist the package so it is hidden from users searching for packages.
+If you are consuming a package that is deprecated and unlisted, you should avoid using the package.
+
+To learn how to deprecate and unlist a package, see the following documentation on [deprecating](../nuget-org/deprecate-packages.md) and [unlisting packages](../nuget-org/policies/deleting-packages.md#unlisting-a-package).
+
+Also consider reporting the known to the [GitHub Advisories Database](https://github.com/advisories).
+
+## Summary
+
+Your software supply chain is anything that goes into or affects your code.
+Even though supply chain compromises are real and growing in popularity, they are still rare; so the most important thing you can do is protect your supply chain by **being aware of your dependencies, managing your dependencies** and **monitoring your supply chain.**
+
+You learned about various methods that NuGet and [GitHub](/training/modules/maintain-secure-repository-github/) provide that are available to you today to be more effective in viewing, managing, and monitoring your supply chain.
+
+For more information about securing the world's software, see [The State of the Octoverse 2020 Security Report](https://octoverse.github.com/static/github-octoverse-2020-security-report.pdf).
diff --git a/docs/concepts/media/advisories.png b/docs/concepts/media/advisories.png
new file mode 100644
index 000000000..8856d78f8
Binary files /dev/null and b/docs/concepts/media/advisories.png differ
diff --git a/docs/concepts/media/copilot-tools-menu-2022.png b/docs/concepts/media/copilot-tools-menu-2022.png
new file mode 100644
index 000000000..3fe2bdfb5
Binary files /dev/null and b/docs/concepts/media/copilot-tools-menu-2022.png differ
diff --git a/docs/concepts/media/copilot-tools-menu-vs-code.png b/docs/concepts/media/copilot-tools-menu-vs-code.png
new file mode 100644
index 000000000..995a86948
Binary files /dev/null and b/docs/concepts/media/copilot-tools-menu-vs-code.png differ
diff --git a/docs/concepts/media/copilot-tools-menu.png b/docs/concepts/media/copilot-tools-menu.png
new file mode 100644
index 000000000..ec5033751
Binary files /dev/null and b/docs/concepts/media/copilot-tools-menu.png differ
diff --git a/docs/concepts/media/cousin-dependencies-1.png b/docs/concepts/media/cousin-dependencies-1.png
new file mode 100644
index 000000000..fc228e49e
Binary files /dev/null and b/docs/concepts/media/cousin-dependencies-1.png differ
diff --git a/docs/concepts/media/cousin-dependencies-2.png b/docs/concepts/media/cousin-dependencies-2.png
new file mode 100644
index 000000000..e6314a155
Binary files /dev/null and b/docs/concepts/media/cousin-dependencies-2.png differ
diff --git a/docs/concepts/media/cousin-dependencies-3.png b/docs/concepts/media/cousin-dependencies-3.png
new file mode 100644
index 000000000..807623a38
Binary files /dev/null and b/docs/concepts/media/cousin-dependencies-3.png differ
diff --git a/docs/concepts/media/dependencies.png b/docs/concepts/media/dependencies.png
new file mode 100644
index 000000000..ee5ff5b9b
Binary files /dev/null and b/docs/concepts/media/dependencies.png differ
diff --git a/docs/concepts/media/direct-dependency-1.png b/docs/concepts/media/direct-dependency-1.png
new file mode 100644
index 000000000..3004ef451
Binary files /dev/null and b/docs/concepts/media/direct-dependency-1.png differ
diff --git a/docs/concepts/media/direct-dependency-2.png b/docs/concepts/media/direct-dependency-2.png
new file mode 100644
index 000000000..98290bc38
Binary files /dev/null and b/docs/concepts/media/direct-dependency-2.png differ
diff --git a/docs/concepts/media/direct-dependency-3.png b/docs/concepts/media/direct-dependency-3.png
new file mode 100644
index 000000000..f4f38b64b
Binary files /dev/null and b/docs/concepts/media/direct-dependency-3.png differ
diff --git a/docs/concepts/media/direct-dependency-4.png b/docs/concepts/media/direct-dependency-4.png
new file mode 100644
index 000000000..596475c18
Binary files /dev/null and b/docs/concepts/media/direct-dependency-4.png differ
diff --git a/docs/concepts/media/dotnet-nuget-why-1.png b/docs/concepts/media/dotnet-nuget-why-1.png
new file mode 100644
index 000000000..b8422c44e
Binary files /dev/null and b/docs/concepts/media/dotnet-nuget-why-1.png differ
diff --git a/docs/concepts/media/floating-versions-1.png b/docs/concepts/media/floating-versions-1.png
new file mode 100644
index 000000000..95b23a6b0
Binary files /dev/null and b/docs/concepts/media/floating-versions-1.png differ
diff --git a/docs/concepts/media/github-copilot-agent-settings.png b/docs/concepts/media/github-copilot-agent-settings.png
new file mode 100644
index 000000000..2b998ee35
Binary files /dev/null and b/docs/concepts/media/github-copilot-agent-settings.png differ
diff --git a/docs/concepts/media/lowest-applicable-version-1.png b/docs/concepts/media/lowest-applicable-version-1.png
new file mode 100644
index 000000000..c0fec1d60
Binary files /dev/null and b/docs/concepts/media/lowest-applicable-version-1.png differ
diff --git a/docs/concepts/media/lowest-applicable-version-2.png b/docs/concepts/media/lowest-applicable-version-2.png
new file mode 100644
index 000000000..360d5de64
Binary files /dev/null and b/docs/concepts/media/lowest-applicable-version-2.png differ
diff --git a/docs/concepts/media/lowest-applicable-version-3.png b/docs/concepts/media/lowest-applicable-version-3.png
new file mode 100644
index 000000000..92079bfcf
Binary files /dev/null and b/docs/concepts/media/lowest-applicable-version-3.png differ
diff --git a/docs/concepts/media/opensource-percent.png b/docs/concepts/media/opensource-percent.png
new file mode 100644
index 000000000..8c09e2d72
Binary files /dev/null and b/docs/concepts/media/opensource-percent.png differ
diff --git a/docs/concepts/media/pm-ui-transitive-tooltip-1.png b/docs/concepts/media/pm-ui-transitive-tooltip-1.png
new file mode 100644
index 000000000..d83e6bced
Binary files /dev/null and b/docs/concepts/media/pm-ui-transitive-tooltip-1.png differ
diff --git a/docs/concepts/media/vs-solution-explorer-search-options-1.png b/docs/concepts/media/vs-solution-explorer-search-options-1.png
new file mode 100644
index 000000000..870c39a8a
Binary files /dev/null and b/docs/concepts/media/vs-solution-explorer-search-options-1.png differ
diff --git a/docs/concepts/media/vs-solution-explorer-search-results-1.png b/docs/concepts/media/vs-solution-explorer-search-results-1.png
new file mode 100644
index 000000000..00e30fedd
Binary files /dev/null and b/docs/concepts/media/vs-solution-explorer-search-results-1.png differ
diff --git a/docs/concepts/media/vulnerability-lifecycle.png b/docs/concepts/media/vulnerability-lifecycle.png
new file mode 100644
index 000000000..179d33e3a
Binary files /dev/null and b/docs/concepts/media/vulnerability-lifecycle.png differ
diff --git a/docs/concepts/nuget-mcp.md b/docs/concepts/nuget-mcp.md
new file mode 100644
index 000000000..42eeaa5af
--- /dev/null
+++ b/docs/concepts/nuget-mcp.md
@@ -0,0 +1,81 @@
+---
+title: MCP servers in NuGet packages
+description: How can MCP servers be distributed using NuGet?
+author: joelverhagen
+ms.author: jver
+ms.topic: article
+ms.date: 07/23/2025
+---
+
+# MCP servers in NuGet packages
+
+NuGet provides a convenient way to package and distribute MCP servers written in .NET. The C# MCP SDK and .NET offer a robust platform for building MCP servers, and NuGet is ideal for delivering your MCP server to end users as a local tool. Self-contained, platform-specific packages reduce runtime compatibility issues, and AOT compilation can further improve the end-user experience.
+
+For more information about the Model Context Protocol (MCP) in general, see the [introduction on the MCP website](https://modelcontextprotocol.io/introduction). To create your own MCP server and package it using NuGet, see the [quickstart guide](/dotnet/ai/quickstarts/build-mcp-server).
+
+## Applicable scenarios
+
+Shipping your MCP server via NuGet does not apply to all situations. The term "MCP client" is used in this document and refers to an application that orchestrates the interaction between an AI agent or LLM and calls made to an MCP server. Some example MCP clients are [Visual Studio Code](https://code.visualstudio.com/docs/copilot/chat/mcp-servers), [Visual Studio](/visualstudio/ide/mcp-servers), [GitHub Copilot coding agent](https://docs.github.com/copilot/concepts/coding-agent/about-copilot-coding-agent), Claude Code, or Cursor.
+
+Consider the following criteria to determine whether shipping your MCP server as a NuGet package makes sense:
+
+- ✅ You want your MCP server to run **locally** on the user's system (i.e., in the same context as the MCP client).
+ - Local MCP servers, such as those shipped in NuGet packages, run in the same context as the MCP client and communicate with the MCP client via standard IO (stdio) transport. The MCP client is responsible for launching the local MCP server process.
+- ✅ The .NET SDK is available to the MCP client.
+ - NuGet MCP servers are [.NET tool packages](/dotnet/core/tools/global-tools), which are installed and executed using `dnx` from the .NET SDK.
+- ✅ You have a NuGet package feed to host your MCP server package.
+ - NuGet.org can be used to publish MCP server packages and provides a tailored MCP browsing and consumption experience. However, any NuGet package feed, such as Azure Artifacts, can be used for hosting MCP servers if you wish to keep your MCP server package private.
+
+## Benefits of using .NET and NuGet for MCP servers
+
+There are several benefits to using NuGet for hosting your MCP server:
+
+- **Official SDK** - the [MCP C# SDK](https://github.com/modelcontextprotocol/csharp-sdk) provides a familiar interface for implementing your MCP server in C# and makes it easy to expose tools to MCP clients.
+- **Flexible runtime options** - the .NET SDK provides several options for how your MCP server is compiled and packaged. See the [runtime requirements](#runtime-requirements) section for details.
+- **Discoverability and distribution** - NuGet.org provides a way to showcase your MCP server, allowing potential users to find your MCP server and easily use it from inside VS Code or Visual Studio. NuGet.org encourages the use of an embedded [`.mcp/server.json`](https://github.com/modelcontextprotocol/registry/blob/main/docs/server-json/README.md) to declare inputs and an `McpServer` package type to allow MCP servers to be differentiated from other tool or dependency packages.
+- **Familiar authoring workflows** - if you already use NuGet for creating dependency packages, creating and publishing an MCP server will be a very similar experience.
+
+## Package download and execution
+
+To fetch a local MCP server, the code for the server must be located and downloaded using a mechanism (protocol) specific to the package ecosystem. This is generally done with a "single-shot" command which takes the package name and arguments to download and then execute the package as a command-line application.
+
+For NuGet-based MCP servers, we recommend using `dnx` (a new command shipped in .NET 10 Preview 6) to acquire and execute the package. `dnx` currently ships with the .NET SDK, but there [is discussion to include `dnx` in the .NET runtime](https://github.com/dotnet/sdk/issues/49796).
+
+A command to start an MCP server would look something like this:
+
+```bash
+dnx NuGet.Mcp.Server@0.1.2-preview --yes
+```
+
+Environment variables and command-line arguments can both be used to configure your MCP server in custom ways. These inputs allow you to customize the behavior of your MCP server to suit specific needs.
+
+This will download the `NuGet.Mcp.Server` package of version `0.1.2-preview` from your configured package sources (NuGet.org by default), and launch the contained CLI tool. For an MCP server, you may see log messages appear in stderr, but the process will appear to hang. This is expected, since the process is waiting for MCP protocol messages over stdin from your MCP client.
+
+Typically, your MCP client will invoke this command via tool-specific MCP configuration, such as the `mcp.json` file used by Visual Studio Code and Visual Studio.
+
+All of these tools support installing alternate sources. For example, `dnx` supports installing from Azure DevOps using the `--source` parameter, allowing consumption of private MCP servers, as long as the needed credential or credential providers are configured.
+
+## Runtime requirements
+
+Once the package is downloaded, a runtime is needed to execute the code inside the package. .NET tool packages (and by extension NuGet-based MCP servers) support a variety of options for how the tool is compiled and packaged. These options allow you, the MCP server author, to decide which runtime requirements should be placed on the users of your MCP server.
+
+There are three main options for how to package your MCP server:
+
+1. **Framework-dependent**: Requires that the MCP client has access to a compatible .NET runtime. If `dnx` is being used to download and execute the package, a runtime will be available.
+2. **Self-contained**: Bundles the runtime with the package. [Using trimming](/dotnet/core/deploying/trimming/trimming-options) can reduce the size of the package. Self-contained .NET tools use `true`.
+3. **Ahead-of-time (AOT) compiled**: A self-contained package with AOT compilation enabled. See [native AOT deployment](/dotnet/core/deploying/native-aot/) for more information. AOT .NET tools use `true`.
+
+For MCP servers, we recommend using option #2 (self-contained package without AOT) because it eliminates the need for any specific .NET runtime version present in the user's environment. If you can guarantee a compatible runtime version on the intended execution environment, option #1 is reasonable. Option #3 (using AOT) is also a good option, but it forces you or your dependencies to make your code compatible with AOT compilation. The C# MCP SDK is AOT compatible, but other dependencies you intend to use may not yet be AOT compatible.
+
+Consider using the `mcpserver` template in the [Microsoft.Extensions.AI.Templates](https://www.nuget.org/packages/Microsoft.Extensions.AI.Templates) template package to use the latest recommended defaults.
+
+## Comparison to other ecosystems
+
+Other ecosystems have similar requirements and workflows for packaging and running MCP servers:
+
+- **NuGet/.NET**: Uses the `dnx` command to download and execute .NET tool packages. Requires the .NET SDK for `dnx`. Additional runtime dependencies can be bundled into the package.
+- **npm**: Uses the `npx` command to download and execute npm packages, and install dependencies transitively. Requires Node.js.
+- **Python**: Uses the `uvx` command to download and execute Python packages, and install dependencies transitively. Requires a Python runtime.
+- **Docker**: Uses the `docker run` command to download and execute images. Requires the Docker Engine. Docker images can target multiple CPU architectures and provide excellent isolation, but are generally larger than NuGet, npm, or Python packages.
+
+In all of these cases, the MCP client needs to have the necessary ecosystem-specific tool (e.g., `dnx`, `npx`) to download and execute the package-based MCP server.
diff --git a/docs/concepts/package-installation-process.md b/docs/concepts/package-installation-process.md
new file mode 100644
index 000000000..76074a1c4
--- /dev/null
+++ b/docs/concepts/package-installation-process.md
@@ -0,0 +1,49 @@
+---
+title: What happens when a package is installed?
+description: Detailed information about the package installation process
+author: JonDouglas
+ms.author: jodou
+ms.date: 06/20/2019
+ms.topic: article
+---
+
+# What happens when a NuGet package is installed?
+
+Simply said, the different NuGet tools typically create a reference to a package in the project file or `packages.config`, then perform a package restore, which effectively installs the package. The exception is `nuget install`, which only expands the package into a `packages` folder and does not modify any other files.
+
+The general process is as follows:
+
+1. (All tools except `nuget.exe`) Record the package identifier and version into the project file or `packages.config`.
+
+ If the installation tool is Visual Studio or the dotnet CLI, the tool first attempts to install the package. If it's incompatible, the package is not added to the project file or `packages.config`.
+
+2. Acquire the package:
+ - Check if the package (by exact identifer and version number) is already installed in the *global-packages* folder as described on [Managing the global packages and cache folders](../consume-packages/managing-the-global-packages-and-cache-folders.md).
+
+ - If the package is not in the *global-packages* folder, attempt to retrieve it from the sources listed in the [configuration files](../consume-packages/Configuring-NuGet-Behavior.md). [Package Source Mapping](../consume-packages/package-source-mapping.md) configurations are applied at this point. For online sources, attempt first to retrieve the package from the HTTP cache unless `-NoHttpCache` is specified with `nuget.exe` commands or `--no-http-cache` is specified with `dotnet restore`. (Visual Studio and `dotnet add package` always use the cache.) If a package is used from the cache, "CACHE" appears in the output. The cache has an expiration time of 30 minutes.
+
+ - If the package has been specified using a [floating version](../consume-packages/Package-References-in-Project-Files.md#floating-versions), or without a minimum version, NuGet *will* contact all sources to figure out the best match.
+ Example: `1.*`, `(, 2.0.0]`.
+
+ - If the package is not in the HTTP cache, attempt to download it from the sources listed in the configuration. If a package is downloaded, "GET" and "OK" appear in the output. NuGet logs http traffic on normal verbosity.
+
+ - If the package cannot be successfully acquired from any sources, installation fails at this point with an error such as [NU1103](../reference/errors-and-warnings/NU1103.md). Note that errors from `nuget.exe` commands show only the last source checked, but implies that the package wasn't available from any source.
+
+ When acquiring the package, the order of sources in the NuGet configuration may apply:
+
+ - NuGet checks sources local folder and network shares before checking HTTP sources.
+
+3. Save a copy of the package and other information in the *http-cache* folder as described on [Managing the global packages and cache folders](../consume-packages/managing-the-global-packages-and-cache-folders.md).
+
+4. If downloaded, install the package into the per-user *global-packages* folder. NuGet creates a subfolder for each package identifier, then creates subfolders for each installed version of the package.
+
+5. NuGet installs package dependencies as required. This process might update package versions in the process, as described in [Dependency Resolution](../concepts/dependency-resolution.md).
+
+6. Update other project files and folders:
+
+ - For projects using PackageReference, update the package dependency graph stored in `obj/project.assets.json`. Package contents themselves are not copied into any project folder.
+ - Update `app.config` and/or `web.config` if the package uses [source and config file transformations](../create-packages/source-and-config-file-transformations.md).
+
+7. (Visual Studio only) Display the package's readme file, if available, in a Visual Studio window.
+
+Enjoy your productive coding with NuGet packages!
diff --git a/docs/concepts/troubleshooting-installed-packages.md b/docs/concepts/troubleshooting-installed-packages.md
new file mode 100644
index 000000000..d06dfcebc
--- /dev/null
+++ b/docs/concepts/troubleshooting-installed-packages.md
@@ -0,0 +1,87 @@
+---
+title: Troubleshooting Installed Packages
+description: How to find which package source was used for individual packages
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/26/2021
+ms.topic: troubleshooting-general
+---
+
+# Troubleshooting Installed Packages
+
+Sometimes you might want to validate which source a specific package was installed from. Here are some ways you can check.
+
+> [!Note]
+> Some package sources support a concept known as upstream sources. For example, [Azure Artifacts upstream sources](/azure/devops/artifacts/concepts/upstream-sources). NuGet clients do not know whether a package came from an upstream source. Therefore, any logging of the package source will list the configured source, not the upstream source.
+
+## `.nupkg.metadata` file in global packages folder
+
+When a package is extracted into the *global-packages* folder, a file `.nupkg.metadata` is written. Starting from NuGet 5.9.0, NuGet will add the package source. See below to map NuGet versions to Visual Studio or .NET SDK versions. For example:
+
+```json
+{
+ "version": 2,
+ "contentHash": "bw3R9q8cVNhWXNpnvWb0OGP4HadS4zvClq+T1zf7AF+tLY1haZ2AvbHidQekf4PDv1T40c6brZeT/V0IBq7cEQ==",
+ "source": "https://api.nuget.org/v3/index.json"
+}
+```
+
+> [!Note]
+> If your *global-packages* folder has packages extracted before you upgraded to a newer version of tools that has NuGet 5.9.0, the `.nupkg.metadata` file will be version 1 and will not contain the package source. You can [clear your *global-packages* folder](../consume-packages/managing-the-global-packages-and-cache-folders.md#clearing-local-folders) to ensure all packages will contain the package source.
+
+> [!Tip]
+> NuGet writes the `.nupkg.metadata` file to the *global-packages* folder only. Projects using `packages.config` use a solution packages folder, which does not create a `.nupkg.metadata` file.
+
+## Installed package log message
+
+Starting from NuGet 5.9.0, NuGet outputs the package source in the restore message informing that a package was installed. For example:
+
+```text
+Installed Moq 4.16.1 from https://api.nuget.org/v3/index.json with content hash bw3R9q8cVNhWXNpnvWb0OGP4HadS4zvClq+T1zf7AF+tLY1haZ2AvbHidQekf4PDv1T40c6brZeT/V0IBq7cEQ==.
+```
+
+> [!Tip]
+> This message is output at normal/informational verbosity. Visual Studio and the `dotnet` CLI default to minimal verbosity, so this message will not be visible by default. The `msbuild` and `nuget` CLI tools default to normal verbosity, so this message will be visible by default.
+
+## HTTP log message
+
+When a package is not available locally, either in the *global-packages* folder, a fallback folder, or a local file source, NuGet will download it from any configured package source over HTTP. HTTP requests and responses are logged at the normal verbosity level, and you should see only a single request and response per package version. For example:
+
+```text
+info : GET https://api.nuget.org/v3-flatcontainer/moq/index.json
+info : OK https://api.nuget.org/v3-flatcontainer/moq/index.json 56ms
+info : GET https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg
+info : OK https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg 3ms
+```
+
+If the files were recently downloaded, they might be retrieved from NuGet's *http-cache*
+
+```text
+CACHE https://api.nuget.org/v3-flatcontainer/moq/index.json
+CACHE https://api.nuget.org/v3-flatcontainer/moq/4.16.1/moq.4.16.1.nupkg
+```
+
+The URL format may be different for different NuGet HTTP server implementations, and whether it's implementing NuGet V2 or V3 HTTP protocol.
+
+If your `nuget.config` has multiple HTTP sources defined, you will see multiple requests to each package's `index.json` file, one for each source. But there will be only a single `nupkg` download for each version of the package.
+
+## Package signature log message
+
+If the package being downloaded is signed, NuGet will validate the signature and will log the following message at detailed verbosity:
+
+```text
+PackageSignatureVerificationLog: PackageIdentity: Moq.4.16.1 Source: https://api.nuget.org/v3/index.json PackageSignatureValidity: True
+```
+
+This message will be reported whether the package was downloaded from an HTTP package source, or copied from a local package source. It will not be output if the package is already available in the *global-packages* folder or a fallback folder.
+
+> [!Important]
+> Due to [removal of trust of VeriSign CA](https://github.com/dotnet/announcements/issues/180) NuGet has disabled signed package verification on certain platforms, in certain versions of NuGet and the .NET SDK. Therefore, the same packages may have `PackageSignatureVerificationLog` logs, or those logs may be missing, depending on what platform you're running restore on, and which version of .NET or NuGet you're using.
+
+## NuGet Version Map
+
+The following versions of NuGet have important changes regarding package source logging:
+
+|NuGet Version|Visual Studio Version|.NET SDK Version|
+|---|---|---|
+|NuGet 5.9.0|Visual Studio 2019 16.9.0|.NET 5 SDK 5.0.200|
diff --git a/docs/consume-packages/Central-Package-Management.md b/docs/consume-packages/Central-Package-Management.md
new file mode 100644
index 000000000..66f7e9744
--- /dev/null
+++ b/docs/consume-packages/Central-Package-Management.md
@@ -0,0 +1,275 @@
+---
+title: Central Package Management
+description: Manage your dependencies in a central location and learn how to get started with Central Package Management.
+author: jondouglas
+ms.author: jodou
+ms.date: 05/09/2022
+ms.topic: article
+---
+
+# Central Package Management (CPM)
+
+Dependency management is a core feature of NuGet.
+While managing dependencies for a single project is straightforward, it becomes increasingly complex as the number of projects in a solution grows.
+
+If you manage common dependencies for many different projects, you can leverage NuGet's Central Package Management (CPM) features to do all of this from a single, central location.
+
+Central Package Management applies to all ``-based MSBuild projects (including [legacy CSPROJ](https://github.com/dotnet/project-system/blob/main/docs/feature-comparison.md)).
+
+## Enabling Central Package Management
+
+To get started with Central Package Management, create a `Directory.Packages.props` file at the root of your repository and set the MSBuild property `ManagePackageVersionsCentrally` to `true`.
+
+You can create it manually, or use the .NET CLI:
+
+```shell
+dotnet new packagesprops
+```
+
+Inside `Directory.Packages.props`, define `` elements to specify the package IDs and versions used by your projects.
+
+```xml
+
+
+ true
+
+
+
+
+
+
+```
+
+In each project file, define `` elements without the `Version` attribute.
+The version will be resolved from the corresponding `` entry in `Directory.Packages.props`.
+
+```xml
+
+
+ net6.0
+
+
+
+
+
+```
+
+Now you're using Central Package Management and managing your versions in a central location!
+
+## Central Package Management Rules
+
+The `Directory.Packages.props` file has specific rules regarding its location and context within a repository.
+Only one `Directory.Packages.props` file is evaluated for a given project by default.
+
+If you have multiple `Directory.Packages.props` files in your repository, the file closest to a given project's directory will be evaluated for it.
+This allows extra control at various levels of your repository.
+
+Consider the following repository directory structure:
+
+```
+📂 (root)
+ ├─📄 Directory.Packages.props
+ |
+ ├─📂Solution1
+ | ├─ 📄Directory.Packages.props
+ | |
+ | └─ 📂 Project1
+ | └─📄Project1.csproj
+ |
+ └─ 📂 Solution2
+ └─ 📂 Project2
+ └─ 📄 Project2.csproj
+```
+
+`Project1.csproj` will use the `Directory.Packages.props` file in the `Repository\Solution1\` directory.
+If you want to include settings from a parent `Directory.Packages.props`, you must manually import it.
+
+```xml
+
+
+
+
+
+
+```
+
+`Project2.csproj` will evaluate the `Directory.Packages.props` file in the root directory.
+
+> [!NOTE]
+> MSBuild will only automatically import the first `Directory.Packages.props` file it finds in the project directory or any parent directory.
+> If you have multiple such files, you must manually import parent files as needed.
+
+## Getting Started
+
+To fully onboard your repository, follow these steps:
+
+1. Create a new file at the root of your repository named `Directory.Packages.props` that declares your centrally defined package versions and set the MSBuild property `ManagePackageVersionsCentrally` to `true`.
+2. Declare `` items in your `Directory.Packages.props`.
+3. Declare `` items without `Version` attributes in your project files.
+
+For an example of how Central Package Management may look, refer to our [samples repository](https://github.com/NuGet/Samples/tree/main/CentralPackageManagementExample).
+
+## Using Different Versions for Different Target Frameworks
+
+As NuGet packages evolve, package owners may drop support for older target frameworks.
+This can cause issues for developers of libraries that still target older frameworks but want to reference newer versions of packages for newer target frameworks.
+
+For example, if your project targets .NET Standard 2.0, .NET 8.0, and .NET Framework 4.7.2, but `PackageA` no longer supports .NET Standard 2.0 in its latest version, you can specify different versions for each target framework.
+
+```xml
+
+
+ netstandard2.0;net8.0;net472
+
+
+
+
+
+```
+
+In this case, define different versions for each target framework in your `Directory.Packages.props` using [MSBuild conditions](/visualstudio/msbuild/msbuild-conditions):
+
+```xml
+
+
+ true
+
+
+
+
+
+
+```
+
+## Transitive Pinning
+
+You can automatically override a transitive package version without an explicit top-level `` item by opting into a feature known as transitive pinning.
+This promotes a transitive dependency to a top-level dependency implicitly on your behalf when necessary.
+
+Note that downgrades are not allowed when transitive pinning a package.
+If you attempt to pin a package to a lower version than the one requested by your dependencies, restore will raise a [NU1109](../reference/errors-and-warnings/NU1109.md) error.
+
+You can enable this feature by setting the MSBuild property `CentralPackageTransitivePinningEnabled` to `true` in a project or in a `Directory.Packages.props` or `Directory.Build.props` import file:
+
+```xml
+
+ true
+
+```
+
+### Transitive Pinning and Pack
+
+When a package is transitively pinned, your project uses a higher version than the one requested by your dependencies.
+If you create a package from your project, to ensure that your package will work, NuGet will promote the transitively pinned dependencies to explicit dependencies in the nuspec.
+
+In the following example, `PackageA 1.0.0` has a dependency on `PackageB 1.0.0`.
+
+```xml
+
+
+
+
+
+
+```
+
+```xml
+
+
+ true
+ net6.0
+
+
+
+
+
+```
+
+When you use the pack command to create a package, both packages will appear in the dependency group.
+
+```xml
+
+
+
+
+```
+
+Because of this, the use of transitive pinning should be carefully evaluated when authoring a library, as it may lead to dependencies you did not expect.
+
+## Overriding Package Versions
+
+You can override an individual package version by using the `VersionOverride` property on a `` item.
+This will take precedence over any centrally defined ``.
+
+```xml
+
+
+
+
+
+
+```
+
+```xml
+
+
+ net6.0
+
+
+
+
+
+```
+
+You can disable this feature by setting the MSBuild property `CentralPackageVersionOverrideEnabled` to `false` in a project or in a `Directory.Packages.props` or `Directory.Build.props` import file:
+
+```xml
+
+ false
+
+```
+
+When this feature is disabled, specifying a `VersionOverride` on any `` item will result in an error at restore time indicating that the feature is disabled.
+
+## Disabling Central Package Management
+
+To disable Central Package Management for a specific project, set the MSBuild property `ManagePackageVersionsCentrally` to `false`:
+
+```xml
+
+ false
+
+```
+
+## Global Package References
+
+> [!NOTE]
+> This feature is only available in Visual Studio 2022 17.4 or higher, .NET SDK 7.0.100.preview7 or higher, and NuGet 6.4 or higher.
+
+A global package reference is used to specify that a package will be used by every project in a repository.
+This includes packages that do versioning, extend your build, or any other packages that are needed by all projects.
+Global package references are added to the PackageReference item group with the following metadata:
+
+* `IncludeAssets="Runtime;Build;Native;contentFiles;Analyzers"`
+ This ensures that the package is only used as a development dependency and prevents it from being included as a compile-time assembly reference.
+* `PrivateAssets="All"`
+ This prevents global package references from being picked up by downstream dependencies.
+
+`GlobalPackageReference` items should be placed in your `Directory.Packages.props` to be used by every project in a repository:
+
+```xml
+
+
+
+
+
+```
+
+## NU1507 Warning When Using Multiple Package Sources
+
+When using Central Package Management, NuGet will log an [`NU1507`](../reference/errors-and-warnings/nu1507.md) warning if more than one package source is defined in your configuration.
+To resolve this warning, map your package sources with [package source mapping](https://aka.ms/nuget-package-source-mapping) or specify a single package source.
+
+```
+There are 3 package sources defined in your configuration. When using Central Package Management, please map your package sources with package source mapping (https://aka.ms/nuget-package-source-mapping) or specify a single package source.
+```
diff --git a/docs/consume-packages/Finding-and-Choosing-Packages.md b/docs/consume-packages/Finding-and-Choosing-Packages.md
new file mode 100644
index 000000000..fef94e0cd
--- /dev/null
+++ b/docs/consume-packages/Finding-and-Choosing-Packages.md
@@ -0,0 +1,202 @@
+---
+title: Find and evaluate NuGet packages
+description: Find and evaluate publicly available NuGet packages for your project by using advanced nuget.org search filters and syntax.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/03/2025
+ms.topic: how-to
+---
+
+# Find and evaluate NuGet packages for your project
+
+When you start a .NET project, or identify a functional need in your app or service, you can often install existing NuGet packages to save the time and trouble of [creating your own packages](../create-packages/overview-and-workflow.md). Existing packages can come from the [nuget.org](https://www.nuget.org/packages) public collection, or from private sources that your organization or another party provide.
+
+## Find packages
+
+You can find packages directly at [https://nuget.org/packages](https://www.nuget.org/packages), or from the [Visual Studio Package Manager UI](install-use-packages-visual-studio.md) or [Package Manager Console](install-use-packages-powershell.md) with nuget.org as a source. All packages from nuget.org are routinely scanned for viruses.
+
+At [nuget.org/packages](https://www.nuget.org/packages), you see a list of NuGet packages with the most popular packages across all .NET projects listed first. Some of these packages might be useful for your projects.
+
+
+
+To search for a package, enter the package name or search terms in the Search box at the top of the page. You can use [advanced search syntax](#search-syntax) to filter your search.
+
+### Advanced filtering and sorting
+
+At nuget.org/packages, you can refine your search results by making use of the advanced filtering and sorting options.
+
+
+
+Use the **Frameworks** filters to show packages targeting specific .NET frameworks (To learn more, see [Target Frameworks](/dotnet/standard/frameworks)):
+
+- Selecting one of the .NET framework generation checkboxes would filter the search results to packages compatible with any of the individual Target Frameworks within that generation. For example, selecting `.NET` will return packages compatible with any of the modern .NET frameworks, including `net5.0` through `net8.0`.
+
+ 
+
+- Expanding one of these framework generations with the arrows on the right will show you individual Target Framework Monikers (TFMs) that you can filter your results by. For example, selecting `net5.0` will return packages compatible with the '.NET 5.0' framework.
+- By default, packages are filtered by their expanded list of computed compatible frameworks. If you want to filter packages purely by the asset frameworks they explicitly target, deselect the **Include compatible frameworks** checkbox.
+- Combining multiple framework filters will show you search results that match all of your selected filters, i.e. packages that fall in the intersection of your selections. For example, selecting `netcoreapp3.1` and `net45` together will show packages that target **both** '.NET Core 3.1' and '.NET Framework 4.5'. Selecting the `.NET Core` framework generation checkbox and the `net45` checkbox together will return packages that target '.NET Framework 4.5', and at least one of the '.NET Core' TFMs (`netcoreapp1.0` through `netcoreapp3.1`).
+ - Alternatively, if you want to see packages matching **any one** of your framework filters, select the **Any** radio button on the **Framework Filter Mode** option. Now, selecting `netcoreapp3.1` and `net5.0` will show packages that target **either** '.NET Core 3.1' or '.NET 5.0'. Selecting the `netcoreapp3.1` checkbox and the `.NET` framework generation checkbox together will return packages that target '.NET Core 3.1' or any one of the '.NET' TFMs (`net5.0` through `net8.0`).
+- You can learn more on how to evaluate a package's supported frameworks and its compatibility with your project [here](#determine-supported-frameworks).
+
+Use the **Package type** filter to show packages of a specific type:
+
+- **All types** is the default and shows all packages regardless of type.
+- **Dependency** filters to regular NuGet packages that you can install into your project.
+- **.NET tool** filters to [.NET tools](/dotnet/core/tools/global-tools) packages that contain console applications.
+- **Template** filters to [.NET templates](/dotnet/core/install/templates) that you can use to create new projects with the [dotnet new](/dotnet/core/tools/dotnet-new) command.
+
+By default, NuGet lists all versions of packages, including prerelease and beta versions. In the **Options** section, deselect the **Include prerelease** checkbox to list only stable, released package versions.
+
+To apply changes, select **Apply**. To get back to the defaults, select **Reset**.
+
+Use the **Sort by** dropdown on the top-right of the page to sort the list by several criteria:
+
+- **Relevance** is the default, and sorts results according to an internal scoring algorithm.
+- **Downloads** sorts the search results by the total number of downloads, in descending order.
+- **Recently updated** sorts the search results by the latest package version creation date, in descending chronological order.
+
+### Search syntax
+
+Package search queries at nuget.org, from the NuGet CLI, and from within Visual Studio all use the same syntax. Other package sources, like Azure Artifacts or GitHub Package Repository, might use different syntax or might not support advanced filtering.
+
+- You can search the package `id`, `packageid`, `version`, `title`, `tags`, `author`, `description`, `summary`, or `owner` properties by using the syntax `:`.
+
+- Search applies to keywords and descriptions, and is case-insensitive. For example, the following strings all search the `id` property for the string `nuget.core`:
+
+ `id:NuGet.Core` `ID:nuget.core` `Id:NUGET.CORE`
+
+- Searches on the `id` property match substrings, while `packageid` and `owner` use exact, case-insensitive matches. For example:
+
+ `PackageId:jquery` searches for the exact package ID `jquery`. `Id:jquery` searches for all package IDs that contain the string `jquery`.
+
+- You can search for multiple values or properties at the same time. For example:
+
+ `id:jquery id:ui` searches for multiple terms in the `id` property. `id:jquery tags:validation` searches for multiple properties.
+
+- Search ignores unsupported properties, so `invalid:jquery ui` is the same as searching for `ui`, and `invalid:jquery` returns all packages.
+
+### Determine supported frameworks
+
+NuGet installs a package into a project only if the package's supported .NET frameworks include the project's target frameworks. If the package isn't compatible, NuGet issues an error.
+
+There are several ways to determine the frameworks that a package supports:
+
+- On the search page, a package's supported frameworks will appear as badges below the package ID. These badges show the lowest supported framework versions from the **.NET**, **.NET Core**, **.NET Standard**, and **.NET Framework** generations. The package will be compatible with any framework version that's equal to or higher than the badge version shown.
+
+ 'Dark blue' badges represent explicitly targeted frameworks, while 'light blue' badges represent computed compatible frameworks.
+
+ Clicking on a badge will redirect you to the package's details page on nuget.org. The **Frameworks** tab on the package's page will show the full list of supported frameworks.
+
+ 
+
+- On the package's page at nuget.org, supported frameworks appear below the package ID and on the **Frameworks** tab, but not all packages show supported frameworks.
+
+ 
+
+- Download the package manually by selecting **Download package** under **About**. Change the file extension of the downloaded package from *.nupkg* to *.zip*, open the *.zip* folder, and examine its *lib* folder. There are subfolders for each supported framework, each named with a target framework moniker (TFM). For more information, see [Target Frameworks](../reference/target-frameworks.md). If there aren't any subfolders under *lib* and there's only a single DLL, try to install the package to discover its compatibility.
+
+- Try to install the package into a project by using [Install-Package](../reference/ps-reference/ps-ref-install-package.md) in the Visual Studio Package Manager Console. If the package is incompatible, the console output shows the package's supported frameworks.
+
+### Prerelease packages
+
+Many package authors provide preview and beta releases as they continue to improve and seek feedback on latest revisions. By default, nuget.org shows prerelease packages in its package list and search results.
+
+To list and search only stable releases:
+
+ - At nuget.org, deselect the **Include prerelease** checkbox in the advanced search panel.
+ - In the Visual Studio NuGet Package Manager UI, deselect the **Include prerelease** checkbox next to the Search box.
+
+The Visual Studio Package Manager Console, NuGet CLI, and dotnet CLI tools don't include prerelease versions by default. To include prerelease versions:
+
+- In the Package Manager Console, use the `-IncludePrerelease` switch with the `Find-Package`, `Get-Package`, `Install-Package`, `Sync-Package`, and `Update-Package` commands. For more information, see the [PowerShell Reference](../reference/powershell-reference.md).
+
+- For the NuGet CLI, use the `-prerelease` switch with the `install`, `update`, `delete`, and `mirror` commands. For more information, see the [NuGet CLI reference](../reference/nuget-exe-cli-reference.md).
+
+- For the dotnet CLI, specify a prerelease version with the `-v` argument. For more information, see the [dotnet add package reference](/dotnet/core/tools/dotnet-add-package).
+
+
+### Native C++ packages
+
+Visual Studio C++ projects can use native C++ NuGet packages. Installing these packages enable the **Manage NuGet Packages** context-menu command, exposes a `native` target framework, and provides MSBuild integration.
+
+To find native packages on nuget.org/packages, search by using `tag:native`. Such packages typically provide *.targets* and *.props* files, which NuGet imports automatically when adding the packages.
+
+## Evaluate packages
+
+The best way to evaluate a package's usefulness is to try it out. You take a dependency on a package when you use it, so you must make sure it's robust and reliable. However, installing a package and directly testing it is time-consuming. You can learn a lot about a package's quality by using the information on the package's page at nuget.org/packages.
+
+- The **Prefix Reserved** checkmark next to the package ID on the packages list and the package page means the package owners have applied for and been granted a [reserved package ID prefix](../nuget-org/id-prefix-reservation.md). To meet the [ID prefix reservation criteria](../nuget-org/id-prefix-reservation.md#id-prefix-reservation-criteria), package owners must clearly identify themselves and their packages.
+
+ 
+
+- **Downloads** in the package page's right column shows **Total**, **Current version**, and **Per day average** downloads. Large numbers indicate that the package has proven itself among many developers.
+
+ 
+
+ Select **Full stats** next to **Downloads** to see a page that shows package downloads for the past six weeks by version number. Versions that more developers are using are typically better choices.
+
+- The **Used By** tab on the package page shows the top five most popular nuget.org packages and GitHub repositories that depend on this package. Packages and repos that depend on this package are called *dependents*. Dependent packages and repos can be seen as endorsing this package, because they chose to trust and depend on it.
+
+ 
+
+ The *latest stable version* of a dependent package must depend on any version of this package. This definition ensures that listed dependent packages are an up-to-date reflection of package authors' decisions to trust and depend on the package. The dependents list doesn't show prerelease dependents, because they're not considered wholehearted endorsements yet. The following examples show which packages show as dependents:
+
+ | Dependent package version | Dependent package listed as a dependent? |
+ |-|-|
+ | v1.0.0 v1.1.0 (latest stable) depends on this package v1.2.0-preview | TRUE, latest stable version depends on this package |
+ | v1.0.0 depends on this package v1.1.0 (latest stable) v1.2.0-preview | FALSE, latest stable version doesn't depend on this package |
+ | v1.0.0 depends on this package v1.1.0 (latest stable) v1.2.0-preview depends on this package | FALSE, latest stable version doesn't depend on this package |
+
+ The number of stars for a GitHub repository indicates its popularity with GitHub users. For more information about the GitHub star and repository ranking system, see [About stars](https://help.github.com/github/getting-started-with-github/saving-repositories-with-stars#about-stars).
+
+ > [!Note]
+ > The **Used By** section is automatically generated periodically, without human review, and solely for informational purposes.
+
+- The **Versions** tab on the package page shows the **Versions**, **Downloads**, **Last Updated** dates, and serious vulnerabilities of package versions. The version you install shouldn't have any high-severity vulnerabilities. A well-maintained package has recent updates and a long version history. Neglected packages have few and long-ago updates.
+
+ 
+
+The right column of the package page has other informative links:
+
+:::row:::
+ :::column span="":::
+
+ :::column-end:::
+ :::column span="2":::
+- Select **Project website**, if available, to see what support options the author provides. A project with a dedicated site is generally well supported.
+
+- Select **Source repository** to go to the Git source code repository for the package. Many authors maintain their packages in open-source repositories, so users can directly contribute bug fixes and feature improvements. The package's contribution history is a good indicator of how many developers are actively involved.
+
+- Select **\ license** to see the package's MIT or other license. If a package doesn't specify license terms, contact the package owner.
+
+- Select any of the package owners under **Owners** to see other packages they've published. Owners with multiple packages are more likely to continue supporting their work. Select **Contact owners** next to **Owners** to reach out directly to the package developers.
+
+ :::column-end:::
+:::row-end:::
+
+## Retrieve license information
+
+Some NuGet clients and NuGet feeds might not be able to surface licensing information. To maintain backward compatibility in such cases, the license URL points to this document about how to retrieve the license information.
+
+If selecting the license URL for a package brings you to this page, it implies the package contains a license file and:
+
+- You're connected to a feed that doesn't know how to interpret and surface the license information to the client, or
+- You're using a client that doesn't know how to interpret and read the license information the feed provides, or
+- A combination of both of these scenarios.
+
+To read the information in the license file inside the package:
+
+1. Manually download the package, and unzip its contents to a folder.
+1. Open the *.nuspec* file at the root of the folder.
+1. Examine the `` tag, such as `license\license.txt`. The example tag states that the license file is named *license.txt* and is inside a subfolder called *license*.
+1. Navigate to the specified location and open the specified file.
+
+For information about the MSBuild equivalent to setting the license in the *.nuspec*, see [Packing a license expression or a license file](../reference/msbuild-targets.md#packing-a-license-expression-or-a-license-file).
+
+## Next steps
+
+- [Ways to install a NuGet package](overview-and-workflow.md#ways-to-install-a-nuget-package)
+- [Install and manage packages in Visual Studio using the NuGet Package Manager](install-use-packages-visual-studio.md)
+- [Install and manage packages with the Package Manager Console in Visual Studio](install-use-packages-powershell.md)
+- [Install and manage packages with the dotnet CLI](install-use-packages-dotnet-cli.md)
diff --git a/docs/consume-packages/Overview-and-Workflow.md b/docs/consume-packages/Overview-and-Workflow.md
new file mode 100644
index 000000000..b9bc8f527
--- /dev/null
+++ b/docs/consume-packages/Overview-and-Workflow.md
@@ -0,0 +1,48 @@
+---
+title: Overview and workflow of using NuGet packages
+description: An overview of the process of consuming NuGet packages in a project, with links to other specific parts of the process.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/22/2018
+ms.topic: concept-article
+---
+
+# Package consumption workflow
+
+Between nuget.org and private package galleries that your organization might establish, you can find tens of thousands of highly useful packages to use in your apps and services. But regardless of the source, consuming a package follows the same general workflow.
+
+
+
+\* _Visual Studio and `dotnet.exe` only. The `nuget install` command does not modify project files or the `packages.config` file; entries must be managed manually._
+
+For further details, see [Finding and Choosing Packages](../consume-packages/finding-and-choosing-packages.md) and [What happens when a package is installed?](../concepts/package-installation-process.md).
+
+NuGet remembers the identity and version number of each installed package, recording it in either the project file (using [PackageReference](../consume-packages/package-references-in-project-files.md)) or [`packages.config`](../reference/packages-config.md), depending on project type and your version of NuGet. With NuGet 4.0+, PackageReference is preferred, although this is configurable in Visual Studio through the [Package Manager UI](install-use-packages-visual-studio.md). In any case, you can look in the appropriate file at any time to see the full list of dependencies for your project.
+
+> [!Tip]
+> It's prudent to always check the license for each package you intend to use in your software. On nuget.org, you find a **License Info** link on the right side of each package's description page. If a package does not specify license terms, contact the package owner directly using the **Contact owners** link on the package page. Microsoft does not license any intellectual property to you from third party package providers and is not responsible for information provided by third parties.
+
+When installing packages, NuGet typically checks if the package is already available from its cache. You can manually clear this cache from the command line, as described on [Managing the global packages and cache folders](../consume-packages/managing-the-global-packages-and-cache-folders.md).
+
+NuGet also makes sure that the target frameworks supported by the package are compatible with your project. If the package does not contain compatible assemblies, NuGet displays an error. See [Resolving incompatible package errors](../concepts/dependency-resolution.md#resolving-incompatible-package-errors).
+
+When adding project code to a source repository, you typically don't include NuGet packages. Those who later clone the repository or otherwise acquire the project, including build agents on systems like Visual Studio Team Services, must restore the necessary packages prior to running a build:
+
+
+
+[Package Restore](../consume-packages/package-restore.md) uses the information in the project file or `packages.config` to reinstall all dependencies. Note that there are differences in the process involved, as described in [Dependency Resolution](../concepts/dependency-resolution.md). Also, the diagram above does not show a restore command for the Package Manager Console because if you're with the Console you're already in the context of Visual Studio, which typically restores packages automatically and provides the solution-level command as shown.
+
+Occasionally it's necessary to reinstall packages that are already included in a project, which may also reinstall dependencies. This is easy to do using the `nuget reinstall` command or the NuGet Package Manager Console. For details, see [Reinstalling and Updating Packages](../consume-packages/reinstalling-and-updating-packages.md).
+
+Finally, NuGet's behavior is driven by `NuGet.Config` files. Multiple files can be used to centralize certain settings at different levels, as explained in [Configuring NuGet Behavior](../consume-packages/configuring-nuget-behavior.md).
+
+## Ways to install a NuGet Package
+
+NuGet packages are downloaded and installed using any of the methods in the following table.
+
+| Tool | Platforms | Description |
+| --- | --- | --- |
+| [dotnet CLI](install-use-packages-dotnet-cli.md) | All | CLI tool for .NET Core and .NET Standard libraries, and for SDK-style projects that target .NET Framework (see [SDK attribute](/dotnet/core/tools/csproj#additions)). Retrieves the package identified by \ and adds a reference to the project file. Also retrieves and installs dependencies. |
+| Visual Studio | Windows and Mac | Provides a UI through which you can browse, select, and install packages and their dependencies into a project from a specified package source. Adds references to installed packages to the project file.
[Install and manage packages using Visual Studio](install-use-packages-visual-studio.md)
[Including a NuGet package in your project (Mac)](/visualstudio/mac/nuget-walkthrough)
|
+| [Package Manager Console (Visual Studio)](install-use-packages-powershell.md) | Windows only | Retrieves and installs the package identified by \ from a selected source into a specified project in the solution, then adds a reference to the project file. Also retrieves and installs dependencies. |
+| [nuget.exe CLI](install-use-packages-nuget-cli.md) | All | CLI tool for .NET Framework libraries and non-SDK-style projects that target .NET Standard libraries. Retrieves the package identified by \ and expands its contents into a folder in the current directory; can also retrieve all packages listed in a `packages.config` file. Also retrieves and installs dependencies, but makes no changes to project files or `packages.config`. |
diff --git a/docs/consume-packages/Package-References-in-Project-Files.md b/docs/consume-packages/Package-References-in-Project-Files.md
new file mode 100644
index 000000000..d9290e3cd
--- /dev/null
+++ b/docs/consume-packages/Package-References-in-Project-Files.md
@@ -0,0 +1,558 @@
+---
+title: NuGet PackageReference in project files
+description: Details on NuGet PackageReference in project files as supported by NuGet 4.0+ and VS2017 and .NET Core 2.0
+author: nkolev92
+ms.author: nikolev
+ms.date: 4/6/2022
+ms.topic: article
+---
+
+# `PackageReference` in project files
+
+Package references, using `` MSBuild items, specify NuGet package dependencies directly within project files, as opposed to having a separate `packages.config` file. Use of PackageReference doesn't affect other aspects of NuGet; for example, settings in `NuGet.Config` files (including package sources) are still applied as explained in [Common NuGet configurations](configuring-nuget-behavior.md).
+
+With PackageReference, you can also use MSBuild conditions to choose package references per target framework, or other groupings. It also allows for fine-grained control over dependencies and content flow. (For more information, see [NuGet pack and restore as MSBuild targets](../reference/msbuild-targets.md).)
+
+## Project type support
+
+By default, PackageReference is used for .NET projects, .NET Standard projects, and UWP projects targeting Windows 10 Build 15063 (Creators Update) and later, with the exception of C++ UWP projects. .NET Framework projects support PackageReference, but currently default to `packages.config`. To use PackageReference in a .NET Framework project, [migrate](../consume-packages/migrate-packages-config-to-package-reference.md) the dependencies from `packages.config` into your project file, then remove packages.config.
+
+ASP.NET apps that target the full .NET Framework include only [limited support](https://github.com/NuGet/Home/issues/5877) for PackageReference. C++ and JavaScript project types are unsupported.
+
+## Adding a PackageReference
+
+Add a dependency in your project file using the following syntax:
+
+```xml
+
+
+
+
+
+```
+
+## Controlling dependency version
+
+The convention for specifying the version of a package is the same as when using `packages.config`:
+
+```xml
+
+
+
+
+
+```
+
+In the example above, 3.6.0 means any version that is >=3.6.0 with preference for the lowest version, as described in [Package versioning](../concepts/package-versioning.md#version-ranges).
+
+## Using PackageReference for a project with no package dependencies
+
+Advanced: If you have no packages installed in a project (no PackageReferences in project file and no packages.config file), but want the project to be restored as PackageReference style, you can set a Project property RestoreProjectStyle to PackageReference in your project file.
+
+```xml
+
+
+ PackageReference
+
+
+```
+
+This might be useful if you reference projects that are PackageReference styled (existing csproj or SDK-style projects). This will enable packages that those projects refer to, to be "transitively" referenced by your project.
+
+## PackageReference and sources
+
+In PackageReference projects, the transitive dependency versions are resolved at restore time. As such, in PackageReference projects, all sources need to be available for all restores.
+
+## Floating Versions
+
+[Floating versions](../concepts/dependency-resolution.md#floating-versions) are supported with `PackageReference`:
+
+```xml
+
+
+
+
+
+
+```
+
+## Controlling dependency assets
+
+You might be using a dependency purely as a development harness and might not want to expose that to projects that will consume your package. In this scenario, you can use the `PrivateAssets` metadata to control this behavior.
+
+```xml
+
+
+
+
+ all
+
+
+
+
+```
+
+The following metadata tags control dependency assets:
+
+| Tag | Description | Default Value |
+|---------------|--------------------------------------------------------------------|------------------------------|
+| IncludeAssets | These assets will be consumed | all |
+| ExcludeAssets | These assets will not be consumed | none |
+| PrivateAssets | These assets will be consumed but won't flow to the parent project | contentfiles;analyzers;build |
+
+Allowable values for these tags are as follows, with multiple values separated by a semicolon except for `all` and `none`, which must appear by themselves:
+
+| Value | Description |
+| --- | ---
+| compile | Contents of the `lib` folder and controls whether your project can compile against the assemblies within the folder |
+| runtime | Contents of the `lib` and `runtimes` folder and controls whether these assemblies will be copied out to the build output directory |
+| contentFiles | Contents of the `contentfiles` folder |
+| build | `.props` and `.targets` in the `build` folder |
+| buildMultitargeting | *(4.0)* `.props` and `.targets` in the `buildMultitargeting` folder, for cross-framework targeting |
+| buildTransitive | *(5.0+)* `.props` and `.targets` in the `buildTransitive` folder, for assets that flow transitively to any consuming project. See the [feature](https://github.com/NuGet/Home/wiki/Allow-package--authors-to-define-build-assets-transitive-behavior) page. |
+| analyzers | .NET analyzers |
+| native | Contents of the `native` folder |
+| none | None of the above are used. |
+| all | All of the above (except `none`) |
+
+```xml
+
+
+
+
+
+ all
+ contentFiles
+ contentFiles;analyzers
+
+
+
+
+
+ compile
+ contentFiles
+
+
+
+```
+
+Note that because `build` is not included with `PrivateAssets`, targets and props *will* flow to the parent project. Consider, for example, that the reference above is used in a project that builds a NuGet package called AppLogger. AppLogger can consume the targets and props from `Contoso.Utility.UsefulStuff`, as can projects that consume AppLogger.
+
+> [!NOTE]
+> When `developmentDependency` is set to `true` in a `.nuspec` file, this marks a package as a development-only dependency, which prevents the package from being included as a dependency in other packages. With PackageReference *(NuGet 4.8+)*, this flag also means that it will exclude compile-time assets from compilation. For more information, see [DevelopmentDependency support for PackageReference](https://github.com/NuGet/Home/wiki/DevelopmentDependency-support-for-PackageReference).
+
+## Adding a PackageReference condition
+
+You can use a condition to control whether a package is included. Conditions can use any MSBuild variable or a variable defined in the targets or props file. However, at present, only the `TargetFramework` variable is supported.
+
+For example, say you're targeting `netstandard1.4` as well as `net452` but have a dependency that's applicable only for `net452`. In this case you don't want a `netstandard1.4` project that consumes your package to add that unnecessary dependency. To prevent this, you specify a condition on the `PackageReference` as follows:
+
+```xml
+
+
+
+
+
+```
+
+A package built using this project will show that Newtonsoft.Json is included as a dependency only for a `net452` target:
+
+
+
+Conditions can also be applied at the `ItemGroup` level and will apply to all children `PackageReference` elements:
+
+```xml
+
+
+
+
+
+
+```
+
+## GeneratePathProperty
+
+This feature is available with NuGet **5.0** or above and with Visual Studio 2019 **16.0** or above.
+
+Sometimes it is desirable to reference files in a package from an MSBuild target.
+In `packages.config` based projects, the packages are installed in a folder relative to the project file. However in PackageReference, the packages are [consumed](../concepts/package-installation-process.md) from the *global-packages* folder, which can vary from machine to machine.
+
+To bridge that gap, NuGet introduced a property that points to the location from which the package will be consumed.
+
+Example:
+
+```xml
+
+
+
+
+
+
+
+````
+
+Additionally NuGet automatically generates properties for packages containing a tools folder.
+
+```xml
+
+
+
+
+
+
+
+```
+
+MSBuild properties and package identities do not have the same restrictions so the package identity needs to be changed to an MSBuild friendly name, prefixed by the word `Pkg`.
+To verify the exact name of the property generated, look at the generated [nuget.g.props](../reference/msbuild-targets.md#restore-outputs) file.
+
+## PackageReference aliases
+
+In some rare instances, different packages will contain classes in the same namespace. Starting with NuGet 5.7 & Visual Studio 2019 Update 7, equivalent to ProjectReference, PackageReference supports [`Aliases`](/dotnet/api/microsoft.codeanalysis.projectreference.aliases).
+By default, no aliases are provided. When an alias is specified, *all* assemblies coming from the annotated package need to be referenced with an alias.
+
+You can look at sample usage at [NuGet\Samples](https://github.com/NuGet/Samples/tree/main/PackageReferenceAliasesExample).
+
+In the project file, specify the aliases as follows:
+
+```xml
+
+
+
+```
+
+And in the code, use it as follows:
+
+```cs
+extern alias ExampleAlias;
+
+namespace PackageReferenceAliasesExample
+{
+...
+ {
+ var version = ExampleAlias.NuGet.Versioning.NuGetVersion.Parse("5.0.0");
+ Console.WriteLine($"Version : {version}");
+ }
+...
+}
+
+```
+
+## NuGet warnings and errors
+
+*This feature is available with NuGet **4.3** or above and with Visual Studio 2017 **15.3** or above.*
+
+For many pack and restore scenarios, all NuGet warnings and errors are coded, and start with `NU****`. All NuGet warnings and errors are listed in the [reference](../reference/errors-and-warnings.md) documentation.
+
+NuGet observes the following warning properties:
+
+- `TreatWarningsAsErrors`, treat all warnings as errors.
+- `WarningsAsErrors`, treat specific warnings as errors.
+- `NoWarn`, hide specific warnings, either project-wide or package-wide.
+
+Examples:
+
+```xml
+
+ true
+
+...
+
+ $(WarningsAsErrors);NU1603;NU1605
+
+...
+
+ $(NoWarn);NU5124
+
+...
+
+
+
+```
+
+### Suppressing NuGet warnings
+
+While it is recommended that you resolve all NuGet warnings during your pack and restore operations, in certain situations suppressing them is warranted.
+To suppress a warning project wide, consider doing:
+
+```xml
+
+ 5.0.0
+ $(NoWarn);NU5104
+
+
+
+
+```
+
+Sometimes warnings apply only to a certain package in the graph. You can choose to suppress that warning more selectively by adding a `NoWarn` on the PackageReference item.
+
+```xml
+
+ 5.0.0
+
+
+
+
+```
+
+#### Suppressing NuGet package warnings in Visual Studio
+
+When in Visual Studio, you can also [suppress warnings](/visualstudio/ide/how-to-suppress-compiler-warnings#suppress-warnings-for-nuget-packages
+) through the IDE.
+
+## Locking dependencies
+
+*This feature is available with NuGet **4.9** or above and with Visual Studio 2017 **15.9** or above.*
+
+Input to NuGet restore is a set of `PackageReference` items from the project file (top-level or direct dependencies) and the output is a full closure of all the package dependencies including transitive dependencies. NuGet tries to always produce the same full closure of package dependencies if the input PackageReference list has not changed. However, there are some scenarios where it is unable to do so. For example:
+
+- When you use floating versions like ``. While the intention here is to float to the latest version on every restore of packages, there are scenarios where users require the graph to be locked to a certain latest version and float to a later version, if available, upon an explicit gesture.
+- A newer version of the package matching PackageReference version requirements is published. For example:
+
+ - Day 1: if you specified `` but the versions available on the
+ NuGet repositories were 4.1.0, 4.2.0, and 4.3.0. In this case, NuGet would have resolved to 4.1.0 (nearest minimum version).
+
+ - Day 2: Version 4.0.0 gets published. NuGet will now find the exact match and start resolving to 4.0.0.
+
+- A given package version is removed from the repository. Though nuget.org does not allow package deletions, not all package repositories have this constraint. This results in NuGet finding the best match when it cannot resolve to the deleted version.
+
+### Enabling the lock file
+
+In order to persist the full closure of package dependencies, you can opt-in to the lock file feature by setting the MSBuild property `RestorePackagesWithLockFile` for your project:
+
+```xml
+
+
+ true
+
+
+```
+
+If this property is set, NuGet restore will generate a lock file (`packages.lock.json`) at the project root directory that lists all the package dependencies.
+
+> [!Note]
+> Once a project has `packages.lock.json` file in its root directory, the lock file is always used with restore even if the property `RestorePackagesWithLockFile` is not set. So another way to opt-in to this feature is to create a dummy blank `packages.lock.json` file in the project's root directory.
+
+### `restore` behavior with lock file
+
+If a lock file is present for a project, NuGet uses this lock file to run `restore`. NuGet does a quick check to see if there were any changes in the package dependencies as mentioned in the project file (or dependent projects' files), and if there were no changes, it just restores the packages mentioned in the lock file. There is no re-evaluation of package dependencies.
+
+If NuGet detects a change in the defined dependencies as mentioned in the project file(s), it re-evaluates the package graph and updates the lock file to reflect the new package closure for the project.
+
+For CI/CD and other scenarios, where you would not want to change the package dependencies on the fly, you can do so by setting the `lockedmode` to `true`:
+
+For dotnet.exe, run:
+
+```
+> dotnet.exe restore --locked-mode
+```
+
+For msbuild.exe, run:
+
+```
+> msbuild.exe -t:restore -p:RestoreLockedMode=true
+```
+
+You can also set this conditional MSBuild property in your project file:
+
+```xml
+
+
+ true
+
+
+```
+
+If locked mode is `true`, restore will either restore the exact packages as listed in the lock file or fail if you updated the defined package dependencies for the project after lock file was created.
+
+#### Lock files and PrunePackageReference
+
+[PrunePackageReference](#prunepackagereference) changes the dependencies of a project, by removing unnecessary transitive packages.
+While removing these packages should not have an impact at runtime, it will affect lock files.
+If you enable pruning for an existing project, whenever the lock file gets regenerated, it may lead to fewer packages than before pruning.
+The lock file up to date check that powers locked mode is pruning aware, which means if you enabled pruning on a project, the check will account for packages that are pruned.
+However the next time the lock file is regenerated, it will exclude the pruned packages, so you may see a diff that's larger than usual.
+
+### Make lock file part of your source repository
+
+If you are building an application, an executable, and the project in question is at the start of the dependency chain, then do check in the lock file to the source code repository so that NuGet can make use of it during restore.
+
+However, if your project is a library project that you do not ship or a common code project on which other projects depend, you **should not** check in the lock file as part of your source code. There is no harm in keeping the lock file, but the locked package dependencies for the common code project can't be used, as listed in the lock file, during the restore/build of a project that depends on this common-code project.
+
+Example:
+
+```
+ProjectA
+ |------> PackageX 2.0.0
+ |------> ProjectB
+ |------>PackageX 1.0.0
+```
+
+If `ProjectA` has a dependency on a `PackageX` version `2.0.0` and also references `ProjectB` that depends on `PackageX` version `1.0.0`, then the lock file for `ProjectB` will list a dependency on `PackageX` version `1.0.0`. However, when `ProjectA` is built, its lock file will contain a dependency on `PackageX` version **`2.0.0`** and **not** `1.0.0` as listed in the lock file for `ProjectB`. Thus, the lock file of a common code project has little say over the packages resolved for projects that depend on it.
+
+### Lock file extensibility
+
+You can control various behaviors of restore with lock file as described below:
+
+| NuGet.exe option | dotnet option | MSBuild equivalent option | Description |
+|:--- |:--- |:--- |:--- |
+| `-UseLockFile` |`--use-lock-file` | RestorePackagesWithLockFile | Opts into the usage of a lock file. |
+| `-LockedMode` | `--locked-mode` | RestoreLockedMode | Enables locked mode for restore. This is useful in CI/CD scenarios where you want repeatable builds.|
+| `-ForceEvaluate` | `--force-evaluate` | RestoreForceEvaluate | This option is useful with packages with floating version defined in the project. By default, NuGet restore will not update the package version automatically upon each restore unless you run restore with this option. |
+| `-LockFilePath` | `--lock-file-path` | NuGetLockFilePath | Defines a custom lock file location for a project. By default, NuGet supports `packages.lock.json` at the root directory. If you have multiple projects in the same directory, NuGet supports project specific lock file `packages..lock.json` |
+
+## NuGet Dependency Resolver
+
+The NuGet dependency resolver follows the [four rules as described in the dependency resolution document](../../docs/concepts/Dependency-Resolution.md).
+
+In order to improve the performance and scalability of the restore operation, the restore algorithm was rewritten in the 6.12 release.
+As of the 6.12 release, the new restore algorithm is enabled by default for all PackageReference projects.
+While the new restore algorithm is is functionally equivalent to the previous one, as with any software, bugs are possible.
+To revert to the previous implementation, set the MSBuild property `RestoreUseLegacyDependencyResolver` to `true`.
+
+Should you face restore failures in 6.12, .NET 9 or 17.12, that weren't reproducing in earlier versions, please [file an issue on GitHub](https://github.com/NuGet/Home/issues/).
+Any differences between the old and new algorithms may have different impacts, such as during compilation or at runtime.
+There's also a chance that changes don't lead to failures, but different package versions being restored.
+If you think you might be impacted by any changes, here are the steps you can take to verify whether the changes in the NuGet restore algorithm are the root cause.
+
+Restore writes its results in the `MSBuildProjectExtensionsPath` directory, which can be compared with the new and old algorithms to find differences.
+Usually this is the `obj` folder of your build.
+You can use `msbuild.exe` or `dotnet.exe` for the next steps.
+
+1. Remove the `obj` folder for your project.
+1. Run `msbuild -t:restore`
+1. Save the contents of the `obj` to a location indicating that it's the `new` behavior.
+1. Run `msbuild -t:restore -p:RestoreUseLegacyDependencyResolver="true"`.
+1. Save the contents of the `obj` to a location indicating that it's the `legacy` behavior.
+1. Compare the files in the two directories, particularly *project.assets.json*.
+
+ Tools that can highlight differences are especially useful for this (for example, in Visual Studio Code, open both files, and use the right-click "select for compare" and "compare to selected").
+
+If you follow the above method, there should be exactly 1 difference between the `project.assets.json` files:
+
+```diff
+ "projectStyle": "PackageReference",
++ "restoreUseLegacyDependencyResolver": true,
+ "fallbackFolders": [
+```
+
+If there are any more differences, please [file an issue on GitHub](https://github.com/NuGet/Home/issues/) with all the details.
+
+## AssetTargetFallback
+
+The `AssetTargetFallback` property lets you specify additional compatible framework versions for projects that your project references and NuGet packages that your project consumes.
+
+If you specify a package dependency using `PackageReference` but that package doesn't contain assets that are compatible with your projects's target framework, the `AssetTargetFallback` property comes into play. The compatibility of the referenced package is rechecked using each target framework that's specified in `AssetTargetFallback`.
+When a `project` or a `package` is referenced through `AssetTargetFallback`, the [NU1701](../reference/errors-and-warnings/NU1701.md) warning will be raised.
+
+Refer to the table below for examples of how `AssetTargetFallback` affects compatibility.
+
+| Project framework | AssetTargetFallback | Package frameworks | Result |
+|-------------------|---------------------|--------------------|--------|
+| .NET Framework 4.7.2 | | .NET Standard 2.0 | .NET Standard 2.0 |
+| .NET Core App 3.1 | | .NET Standard 2.0, .NET Framework 4.7.2 | .NET Standard 2.0 |
+| .NET Core App 3.1 | | .NET Framework 4.7.2 | Incompatible, fail with [`NU1202`](../reference/errors-and-warnings/NU1202.md) |
+| .NET Core App 3.1 | net472;net471 | .NET Framework 4.7.2 | .NET Framework 4.7.2 with [`NU1701`](../reference/errors-and-warnings/NU1701.md) |
+
+Multiple frameworks can be specified using `;` as a delimiter. To add a fallback framework you can do the following:
+
+```xml
+
+ $(AssetTargetFallback);net472;net471
+
+```
+
+You can leave off `$(AssetTargetFallback)` if you wish to overwrite, instead of add to the existing `AssetTargetFallback` values.
+
+> [!NOTE]
+> If you are using a [.NET SDK based project](/dotnet/core/sdk), appropriate `$(AssetTargetFallback)` values are configured and you do not need to set them manually.
+>
+> `$(PackageTargetFallback)` was an earlier feature that attempted to address this challenge, but it is fundamentally broken and *should* not be used. To migrate from `$(PackageTargetFallback)` to `$(AssetTargetFallback)`, simply change the property name.
+
+## PrunePackageReference
+
+The .NET Runtime is constantly evolving, with performance improvements and new APIs each release.
+New features added to .NET are also sometimes provided as packages, so that developers using older target frameworks can use the library, such as [System.Text.Json](https://www.nuget.org/packages/System.Text.Json).
+This can often lead to a `System.Text.Json 8.0.0` in a project targeting `.NET 9` or `.NET 8`. This dependency is unnecessary and the build conflict resolution would not use the assembly coming from the package since it's already available in the .NET Runtime.
+Starting in [NuGet version 6.13](..\release-notes\NuGet-6.13.md) and .NET SDK 9.0.200, `PrunePackageReference` enables the pruning of these packages at restore time for .NET SDK based projects.
+The first iteration of pruning affected transitive packages only, but starting with .NET SDK 10, package pruning affects direct packages as well.
+
+Package pruning is available as an opt-in feature with the .NET 9 SDK, and is enabled by default for all frameworks of a project that targets `>= .NET 10.0` in the .NET 10 SDK.
+
+Package pruning is only available with the default dependency resolver as [released in 6.12](#nuget-dependency-resolver).
+
+### PrunePackageReference specification
+
+The list of packages to be pruned is defined with the `PrunePackageReference` item.
+
+| Attributes | Description |
+|------------|-------------|
+| Version | Specifies the maximum version to be pruned. `1.0.0` means that all packages up to and including 1.0.0 will be pruned. For `1.0.0`, `0.9.0` and `1.0.0` will be pruned, but `1.0.1` would not. |
+
+The following properties can be used to modify the pruning behavior.
+
+| PropertyName | Description |
+|--------------|-------------|
+| RestoreEnablePackagePruning | Enables package pruning for the packages specified with `PrunePackageReference`. This property is per target framework and the valid values are `true` and `false`. Defaults may differ based on the .NET SDK as defined above. |
+
+The .NET SDK predefines the list of packages to be pruned for you.
+
+### How PrunePackageReference works
+
+When a package is specified to be pruned during restore, it is removed from the dependency graph.
+When a package is pruned, there is a message, visible at detailed verbosity, indicating that the package has been removed for the given target framework.
+
+For transitive packages, meaning dependencies of other packages or projects, the packages are not downloaded and do not appear in any of the outputs of NuGet.
+
+For direct packages, `PrivateAssets='all'` and `IncludeAssets='none'` are implicitly applied.
+
+- `IncludeAssets='none'` ensures that the assemblies from this package are not used during the build. Before pruning existed, the conflict resolution during the build ensured that platform assemblies were preferred over those coming from the packages.
+- `PrivateAssets='all'` ensures that the packages aren't included in packages or through project references.
+
+Example:
+
+A project like below:
+
+```xml
+
+ net9.0;netstandard2.0
+
+
+
+
+
+```
+
+will have a nuspec with the following dependencies:
+
+```xml
+
+
+
+
+
+
+
+```
+
+When a direct PackageReference can be completely removed from your project, and one of the project frameworks are .NET 10 or newer, [NU1510](../reference/errors-and-warnings/NU1510.md) will be raised asking you to remove the package.
+Following this suggestion will reduce the complexity of your project graph.
+
+The following table summarizes all the package pruning behaviors.
+
+| Dependency disposition | Behavior |
+|-----------------|----------|
+| Matches the ID of a transitive package coming through another package | Prune |
+| Matches the ID of a transitive package coming through another project | Prune |
+| Matches the ID of a direct `PackageReference` | Apply `PrivateAssets='all'` and `IncludeAssets='none'` and raise the [NU1510](../reference/errors-and-warnings/NU1510.md) warning when the package can be removed from all frameworks and the project targets .NET 10. |
+| Matches the ID of a `ProjectReference` | Do not prune and raise the [NU1511](../reference/errors-and-warnings/NU1511.md) warning when the project targets .NET 10 |
+
+### PrunePackageReference applications
+
+The benefits of package pruning are two-fold:
+
+- Performance benefits, by virtue of reducing the number of packages within a dependency graph
+- Reduction of false positives by component scanners such as `NuGetAudit`
+
+Pruning is particularly valuable when [auditing](./../concepts/Auditing-Packages.md) packages with `NuGetAuditMode` set to `all`. If you are using .NET 9, we recommend you try out pruning by setting `RestoreEnablePackagePruning` to `true`.
diff --git a/docs/consume-packages/Package-Restore.md b/docs/consume-packages/Package-Restore.md
new file mode 100644
index 000000000..62f1f673f
--- /dev/null
+++ b/docs/consume-packages/Package-Restore.md
@@ -0,0 +1,226 @@
+---
+title: NuGet Package Restore
+description: See an overview of how NuGet restores packages a project depends on, including how to disable restore and constrain versions.
+author: JonDouglas
+ms.author: jodou
+ms.date: 10/20/2023
+ms.topic: how-to
+---
+
+# Restore packages with NuGet Package Restore
+
+NuGet Package Restore restores all of a project's dependencies that are listed in either a project file or a *packages.config* file. You can restore packages manually with `nuget restore`, `dotnet restore`, `msbuild -t:restore`, or through Visual Studio. The `dotnet build` and `dotnet run` commands automatically restore packages, and you can configure Visual Studio to restore packages automatically when it builds a project.
+
+To promote a cleaner development environment and to reduce repository size, Package Restore makes all of a project's dependencies available without having to store them in source control. To configure your source control repository to exclude package binaries, see [Packages and source control](../consume-packages/packages-and-source-control.md).
+
+## Package Restore behavior
+
+Package Restore tries to install all package dependencies to the state that matches the ``s in a project file, such as *.csproj*, or ``s in a *packages.config* file. Package Restore first installs the direct dependencies of a project as needed, then installs any dependencies of those packages throughout the entire dependency graph.
+
+If a needed package isn't already installed, NuGet first attempts to retrieve it from the local [global packages or HTTP cache folders](../consume-packages/managing-the-global-packages-and-cache-folders.md). If the package isn't in the local folders, NuGet tries to download it from all sources configured in Visual Studio at **Tools** > **Options** > **NuGet Package Manager** > **Package Sources**.
+
+During restore, NuGet ignores the order of package sources, and uses the package from the first source that responds to requests. If restore fails, NuGet doesn't indicate the failure until after it checks all sources. NuGet then reports a failure for only the last source in the list. The error implies that the package wasn't present on any of the sources, even though it doesn't list the other failures individually.
+
+For more information about NuGet behavior, see [Common NuGet configurations](Configuring-NuGet-Behavior.md).
+
+## Restore packages
+
+If the package references in your project file or *packages.config* file are correct, use your preferred tool to restore packages:
+
+- [Visual Studio](#restore-using-visual-studio)
+- [dotnet CLI](#restore-using-the-dotnet-cli)
+- [nuget.exe CLI](#restore-using-the-nugetexe-cli)
+- [MSBuild](#restore-using-msbuild)
+- [Azure Pipelines or Azure DevOps Server](#restore-using-azure-pipelines)
+
+After a successful restore:
+
+- For projects that use ``, the package is present in the local *global-packages* folder, and the project *obj/project.assets.json* file is recreated.
+- For projects that use *packages.config*, the package appears in the project's *packages* folder.
+- The project should now build successfully.
+
+If the package references in your project file or your *packages.config* file are incorrect and don't match your desired state, install or update the correct packages instead of using Package Restore.
+
+If you have missing packages or package-related errors after you run Package Restore, such as error icons in Solution Explorer, follow the instructions in [Troubleshooting Package Restore errors](package-restore-troubleshooting.md), or [reinstall or update](../consume-packages/reinstalling-and-updating-packages.md) the packages. In Visual Studio, the Package Manager Console provides several options for reinstalling packages. For more information, see [Use Package-Update](reinstalling-and-updating-packages.md#update-package-command).
+
+
+
+## Restore packages in Visual Studio
+
+In Visual Studio on Windows, you can restore packages automatically or manually. First, configure Package Restore through **Tools** > **Options** > **NuGet Package Manager**.
+
+### Configure Visual Studio Package Restore options
+
+Configure the following Package Restore options at **Tools** > **Options** > **NuGet Package Manager** > **General**.
+
+
+
+
+
+#### Allow NuGet to download missing packages
+
+Select **Allow NuGet to download missing packages** to enable package restore and the **Restore NuGet Packages** command. This selection sets the `packageRestore/enabled` setting to `True` in the [packageRestore section](../reference/nuget-config-file.md#packagerestore-section) of the global *NuGet.Config* file, at *%AppData%\\Roaming\\NuGet* on Windows or *~/.nuget/NuGet/* on Mac or Linux.
+
+```xml
+
+
+
+
+
+```
+
+> [!Note]
+> To globally override the `packageRestore/enabled` setting, you can set the environment variable **EnableNuGetPackageRestore** to True or False before you open Visual Studio or start a build.
+
+To enable or disable Package Restore for all users on a computer, you can add the configuration settings to the global *NuGet.Config* file in Windows at *%ProgramData%\NuGet\Config*, sometimes under a specific *\\\\\\\* Visual Studio folder, or in Mac/Linux at *~/.local/share*. Individual users can then selectively enable restore as needed on a project level. For more details on how NuGet prioritizes multiple config files, see [Common NuGet configurations](../consume-packages/configuring-nuget-behavior.md#how-settings-are-applied).
+
+> [!Important]
+> If you edit the `packageRestore` settings in *NuGet.Config* directly, restart Visual Studio so that the **Options** show the current values.
+
+#### Automatically check for missing packages during build
+
+Select **Automatically check for missing packages during build in Visual Studio** to automatically restore any missing packages when you run a build from Visual Studio. This setting doesn't affect builds run from the MSBuild command line. This selection sets the `packageRestore/automatic` setting to `True` in the `packageRestore` section of the *NuGet.Config* file.
+
+```xml
+
+
+
+
+
+```
+
+You must select **Allow NuGet to download missing packages** as well as **Automatically check for missing packages during build in Visual Studio** in **Options** to enable package restore during build.
+
+
+
+#### Choose the default package management format
+
+NuGet has two package management formats, [PackageReference](Package-References-in-Project-Files.md) and [packages.config](../reference/packages-config.md). Select the format you want to use from the dropdown list under **Package Management**. You can also select whether to allow format selection on first package install.
+
+> [!Note]
+>
+> - If a project doesn't support both package management formats, NuGet uses the package management format that's compatible with the project, which might not be the default you set in the options. NuGet then won't prompt for selection on first install, even if you selected that option.
+>
+> - If you use Package Manager Console to install the first package in a project, NuGet doesn't prompt for format selection, even if that option is selected in **Options**.
+
+
+
+
+### Restore packages manually or automatically
+
+After you enable package restore in **Options**, you can right-click the solution in **Solution Explorer** and select **Restore NuGet Packages** to restore packages anytime.
+
+If you enabled automatic restore in **Options**, Package Restore happens automatically when you create a project from a template or build a project. For NuGet 4.0+, restore also happens automatically when you make changes to a SDK-style project.
+
+For projects that use ``, you can see the package references in Visual Studio **Solution Explorer** under **Dependencies** > **Packages**. Packages that don't install properly when you manually restore or run a build display error icons in **Solution Explorer**. Right-click the project, select **Manage NuGet Packages**, and use the **NuGet Package Manager** to uninstall and reinstall the affected packages. For more information, see [Reinstall and update packages](../consume-packages/reinstalling-and-updating-packages.md).
+
+If you see the error **This project references NuGet package(s) that are missing on this computer**, or **One or more NuGet packages need to be restored but couldn't be because consent has not been granted**, make sure you enabled automatic restore. For older projects, see [Migrate to automatic package restore](#migrate-to-automatic-package-restore-visual-studio). Also see [Troubleshooting package restore errors](Package-restore-troubleshooting.md).
+
+
+
+## Restore by using the dotnet CLI
+
+[!INCLUDE [restore-dotnet-cli](includes/restore-dotnet-cli.md)]
+
+> [!IMPORTANT]
+> To add a missing package reference to the project file, use [dotnet add package](/dotnet/core/tools/dotnet-add-package), which also runs `restore`.
+
+
+
+## Restore by using the NuGet CLI
+
+[!INCLUDE [restore-nuget-exe-cli](includes/restore-nuget-exe-cli.md)]
+
+
+
+## Restore by using MSBuild
+
+You can use [msbuild -t:restore](../reference/msbuild-targets.md#restore-target) to restore packages in NuGet 4.x+ and MSBuild 15.1+, which are included with Visual Studio 2017 and higher.
+
+This command restores packages in projects that use [PackageReference](package-references-in-project-files.md) for package references. Starting with MSBuild 16.5+, the command also supports [packages.config](/nuget/reference/packages-config) package references, when used with `-p:RestorePackagesConfig=true`.
+
+To use MSBuild restore:
+
+1. Open a Developer Command Prompt by searching for *developer command prompt* and starting the prompt from the Windows **Start** menu, which configures all the necessary paths for MSBuild.
+
+1. Switch to the project folder, and enter `msbuild -t:restore`.
+
+1. After the restore completes, enter `msbuild` to rebuild the project. Make sure the MSBuild output indicates that the build completed successfully.
+
+> [!Note]
+> You can use `msbuild -restore` to run `restore`, reload the project, and build, since build is the default target. For more information, see [Restore and build with one MSBuild command](../reference/msbuild-targets.md#restoring-and-building-with-one-msbuild-command).
+
+
+
+
+## Restore with Azure Pipelines or Azure DevOps Server
+
+When you create a build definition in Azure Pipelines, you can include the [NuGet CLI restore](/azure/devops/pipelines/tasks/package/nuget#restore-nuget-packages) or [dotnet CLI restore](/azure/devops/pipelines/tasks/build/dotnet-core-cli) task in the definition before any build tasks. Some build templates include the restore task by default.
+
+Azure DevOps Server and TFS 2013 and later automatically restore packages during build, if you use a TFS 2013 or later Team Build template. You can also include a build step to run a command-line restore option, or optionally migrate the build template to a later version. For more information, see [Set up package restore with Team Foundation Build](../consume-packages/team-foundation-build.md).
+
+## Constrain package versions
+
+NuGet restore through any method honors any version constraints you specify in *packages.config* or the project file.
+
+- In *packages.config*, you can specify an `allowedVersions` range in the dependency. For more information, see [Constraints on upgrade versions](../consume-packages/reinstalling-and-updating-packages.md#constraints-on-upgrade-versions). For example:
+
+ ```xml
+
+ ```
+
+- In a project file, you can specify the version range in the `Version` property of the dependency. For example:
+
+ ```xml
+
+ ```
+
+In both cases, use the notation described in [Package versioning](../concepts/package-versioning.md).
+
+## Force restore from remote package sources
+
+By default, NuGet restore operations use packages from the local *global-packages* and *http-cache* folders, as described in [Manage the global packages and cache folders](managing-the-global-packages-and-cache-folders.md). To avoid using these local packages, use the following options.
+
+To clear all local caches:
+
+- In Visual Studio, select the **Clear All NuGet Cache(s)** button at **Tools** > **Options** > **NuGet Package Manager** > **General**.
+- In the dotnet CLI, use `dotnet nuget locals all --clear`.
+- In the NuGet CLI, use `nuget locals all -clear`.
+
+To avoid using the packages in the *global-packages* folder:
+
+- Clear the folder by using `nuget locals global-packages -clear` or `dotnet nuget locals global-packages --clear`.
+- Temporarily set the **NUGET_PACKAGES** environment variable to a different folder.
+- Create a *NuGet.Config* file that sets `globalPackagesFolder` for `PackageReference`, or `repositoryPath` for *packages.config*, to a different folder. For more information, see [configuration settings](../reference/nuget-config-file.md#config-section).
+- For MSBuild only, specify a different folder with the `RestorePackagesPath` property.
+
+To avoid using packages in the HTTP cache:
+
+- Clear the cache by using `nuget locals http-cache -clear` or `dotnet nuget locals http-cache --clear`.
+- Temporarily set the **NUGET_HTTP_CACHE_PATH** environment variable to a different folder.
+- For `nuget restore`, use the `-NoHttpCache` option, or for `dotnet restore`, use the `--no-http-cache` option. These options don't affect restore operations through the Visual Studio Package Manager or Console.
+
+
+
+## Migrate to automatic package restore
+
+Earlier versions of NuGet supported an MSBuild-integrated package restore. Projects that use the deprecated MSBuild-integrated package restore should migrate to automatic package restore.
+
+These projects typically contain a *.nuget* folder with three files: *NuGet.config*, *nuget.exe*, and *NuGet.targets*. The *NuGet.targets* file causes NuGet to use the MSBuild-integrated approach, so it must be removed.
+
+To migrate to automatic package restore:
+
+1. Enable automatic package restore.
+1. Close Visual Studio.
+1. Delete *.nuget/nuget.exe* and *.nuget/NuGet.targets*.
+1. For each project file, remove the `` element, and remove any references to *NuGet.targets*.
+
+To test automatic package restore:
+
+1. Remove the *packages* folder from the solution.
+1. Open the solution in Visual Studio and start a build. Automatic package restore should download and install each dependency package, without adding it to source control.
+
+## Next steps
+
+- [Troubleshoot package restore](Package-restore-troubleshooting.md)
+- [Manage the global packages, cache, and temp folders](managing-the-global-packages-and-cache-folders.md)
diff --git a/docs/consume-packages/Package-Source-Mapping.md b/docs/consume-packages/Package-Source-Mapping.md
new file mode 100644
index 000000000..5386bb61d
--- /dev/null
+++ b/docs/consume-packages/Package-Source-Mapping.md
@@ -0,0 +1,177 @@
+---
+title: Package Source Mapping
+description: Describes package source mapping functionality and how to onboard
+author: nkolev92
+ms.author: nikolev
+ms.date: 10/18/2023
+ms.topic: how-to
+---
+
+# Package Source Mapping
+
+Package Source Mapping is a tool that can be used to improve your supply chain security, especially if you use a mix of public and private package sources.
+
+By default, NuGet will search all configured package sources when it needs to download a package.
+When a package exists on multiple sources, it may not be deterministic which source the package will be downloaded from.
+With Package Source Mapping, you can filter, per package, which source(s) NuGet will search.
+
+We also have suggestions for other [best practices](..\concepts\Security-Best-Practices.md) to help you fortify your supply chain against attacks.
+
+Package Source Mapping was added in [NuGet 6.0](..\release-notes\NuGet-6.0.md).
+Starting with Visual Studio 17.5, you can add and remove Package Source Mappings with the Visual Studio Options Dialog.
+For detailed information on all Visual Studio NuGet options, see [NuGet Options in Visual Studio](nuget-visual-studio-options.md).
+
+### Visual Studio support
+
+| Visual Studio | Package Source Mapping | Support in Tools -> Options | Support in Package Manager UI |
+|-----|---------------------|---------------------|---------------------|
+| 17.0 - 17.4 | ✅ Available | ❌ Not available | ❌ Not available |
+| 17.5 | ✅ Available | ✅ Available | ❌ Not available |
+| 17.7 Preview 3| ✅ Available | ✅ Available | ✅ Status displayed |
+
+The feature is available across all NuGet integrated tooling.
+
+* [Visual Studio 2022 and later](https://visualstudio.microsoft.com/downloads/)
+* [.NET SDK 6.0.100 and later](https://dotnet.microsoft.com/download/dotnet/6.0)
+* [nuget.exe 6.0.0 and later](https://www.nuget.org/downloads)
+
+Older tooling will ignore the Package Source Mapping configuration. To use this feature, ensure all your build environments use compatible tooling versions.
+
+Package Source Mappings will apply to all project types – including .NET Framework – as long as compatible tooling is used.
+
+## Video walkthrough
+
+For a video-based overview of the Package Source Mapping feature, consider watching the [Secure your NuGet packages with Package Source Mapping](https://www.youtube.com/watch?v=G6P38Dn69Ro) video on YouTube.
+
+## Enabling Package Source Mapping
+
+To opt into this feature, you must have a `nuget.config` file. Having a single `nuget.config` at the root of your repository is considered a best practice. See [nuget.config documentation](../reference/nuget-config-file.md) to learn more.
+
+### Enable by using Visual Studio Options Dialog
+
+1. Open your solution in Visual Studio.
+2. Navigate to the `Package Source Mappings` Options Dialog.
+
+_From the Package Manager UI_
+
+* Select a package from the list to show it in the Details Pane.
+* Press the `Configure` button to open the Package Source Mappings options page.
+
+
+
+_From the Visual Studio Options Dialog_
+
+* Go to the `Tools` menu in the main Visual Studio toolbar, and choose `NuGet Package Manager` -> `Package Manager Settings`.
+* Navigate to the `Package Source Mappings` page.
+
+For details about managing NuGet package source mappings, see [NuGet Options in Visual Studio](nuget-visual-studio-options.md#package-source-mapping).
+
+The NuGet Package Manager window will refresh and reflect the new status of the selected package's source mappings.
+
+
+### Enable by manually editing `nuget.config`
+
+* Declare your desired package sources in your `nuget.config` file.
+* Following your source declarations, add a `` element that specifies the desired mappings for each source.
+* Declare exactly one `packageSource` element for each source in use.
+ * Add as many patterns as you find necessary.
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+Package Source Mapping settings are applied following [nuget.config precedence rules](configuring-nuget-behavior.md#how-settings-are-applied) when multiple `nuget.config` files at various levels (machine-level, user-level, repo-level) are present.
+
+## Package Source Mapping rules
+
+For maximum flexibility and control, NuGet requires that all packages match a package pattern through a well defined precedence.
+
+### Package Pattern requirements
+
+All requested packages must map to one or more sources by matching a defined package pattern. In other words, once you have defined a `packageSourceMapping` element you must explicitly define which sources _every_ package - _including transitive packages_ - will be restored from.
+
+* Both top-level _and transitive_ packages must match defined patterns. There is no requirement that a top level package and its dependencies come from the same source.
+* The same ID pattern can be defined on multiple sources, allowing matching package IDs to be restored from any of the feeds that define the pattern. However, this isn't recommended due to the impact on restore predictability (a given package could come from multiple sources). This may be a valid configuration if you trust all respective sources.
+
+### Package Pattern Syntax
+
+| Pattern | Example syntax | Description |
+|---------|---------|-------------|
+| Package prefix pattern | `*`, `NuGet.*` | Must end with a `*`, where `*` matches 0 or more characters. `*` is the shortest allowed prefix pattern and matches all packages ids. |
+| Package ID pattern | `NuGet.Common`, `Contoso.Contracts` | Exact package ID. |
+
+### Package Pattern precedence
+
+When multiple unique patterns match a package ID, the most specific one will be preferred. Package ID patterns always have the highest precedence while the generic `*` always has the lowest precedence. For package prefix patterns, the longest has precedence.
+
+
+
+### Setting default sources
+
+The `*` pattern can be used to make a declare a de-facto default source - meaning any package that doesn't match other specified patterns will be restored from that source without throwing an error.
+This configuration is advantageous if you primarily use packages from say, `nuget.org`, and only have a few internal packages, or use standard prefixes for all internal packages like `Contoso.*`.
+
+If your team doesn't use standard prefixes for internal package IDs or vets `nuget.org` packages prior to installation, then making a private source the default will suit your needs better.
+
+> [!Note]
+> When the requested package already exists in the global packages folder, no source look-up will happen and the mappings will be ignored. Consider declaring a [global packages folder for your repo](../reference/nuget-config-file.md#config-section) to gain the full security benefits of this feature. Work to improve the experience with the default global packages folder is planned for a next iteration.
+To learn more about how package installation works, see [the conceptual document.](../concepts/package-installation-process.md)
+
+### Get started
+
+There are 2 ways you can fully onboard your repository, [manually](#manual-onboarding) or using the [NuGet.PackageSourceMapper tool](#automated-onboarding-using-tool).
+
+#### Manual onboarding
+
+For manual onboarding you may take the following steps:
+
+1. Declare a new [global packages folder for your repo](../reference/nuget-config-file.md#config-section).
+1. Run [dotnet restore](/dotnet/core/tools/dotnet-restore) to restore dependencies.
+1. Run [`dotnet list package --include-transitive`](/dotnet/core/tools/dotnet-list-package#synopsis) to view all top-level and transitive packages in your solution.
+ * For .NET framework projects using [`packages.config`](../reference/packages-config.md), the `packages.config` file will have a flat list of all direct and transitive packages.
+1. Define mappings such that every package ID in your solution - _including transitive packages_ - matches a pattern for the target source.
+1. Run [dotnet nuget locals global-packages -c](/dotnet/core/tools/dotnet-nuget-locals) to clear global-packages directory.
+1. Run restore to validate that you have configured your mappings correctly. If your mappings don't fully cover every package ID in your solution, the error messages will help you identify the issue.
+1. When restore succeeds, you are done! Optionally consider:
+ * Simplifying the configuration to fewer declarations by using broader package ID prefixes or [setting a default source](#setting-default-sources) where possible.
+ * Verifying the source each package was restored from by checking the [metadata files in the global packages folder or reviewing the restore logs](https://devblogs.microsoft.com/nuget/performance-and-polish-with-nuget-5-9/).
+
+#### Automated onboarding using tool
+
+Many repositories have a large number of packages and doing the work manually can be time consuming. The [NuGet.PackageSourceMapper tool](https://www.nuget.org/packages/NuGet.PackageSourceMapper) can automatically generate a NuGet.config for you, based on your project's known packages and sources.
+
+The package source mapper tool requires you to have completed a successful package restore in which it will read each respective `.nupkg.metadata` file generated as part of your build to best understand how you map your respective packages and sources. Tool not only covers top dependencies it also considers all the transitive dependencies when generating mapping.
+
+Tool has several option how to generate mapping pattern depending on your need, please check [blog post](https://devblogs.microsoft.com/nuget/quickly-map-your-nuget-packages-to-sources) and tool's [readme instruction](https://www.nuget.org/packages/NuGet.PackageSourceMapper#readme-body-tab) for more details.
+
+For an idea of how your source mappings may look like, refer to our [samples repo](https://github.com/NuGet/Samples/tree/main/PackageSourceMappingExample).
+
+> [!Note]
+>
+> * There are no nuget.exe or dotnet.exe commands for managing the package source mapping configuration, see [NuGet/Home#10735](https://github.com/NuGet/Home/issues/10735).
+> * There are no means of mapping packages at package installation time, see [NuGet/Home#10730](https://github.com/NuGet/Home/issues/10730).
+> * There is a limitation when using the `DotNetCoreCLI@2` Azure Pipelines task which can be worked around by using `feed-` prefixes in your source mapping configuration. It is recommended however to use `NuGetAuthenticate` for your authentication needs and call the dotnet cli directly from a script task. See [microsoft/azure-pipelines-tasks#15542](https://github.com/microsoft/azure-pipelines-tasks/issues/15542).
diff --git a/docs/consume-packages/Package-restore-troubleshooting.md b/docs/consume-packages/Package-restore-troubleshooting.md
new file mode 100644
index 000000000..1bac3ac4f
--- /dev/null
+++ b/docs/consume-packages/Package-restore-troubleshooting.md
@@ -0,0 +1,118 @@
+---
+title: Troubleshooting NuGet Package Restore in Visual Studio
+description: A description of common NuGet restore errors in Visual Studio and how to troubleshoot them.
+author: JonDouglas
+ms.author: jodou
+ms.date: 05/25/2018
+ms.topic: troubleshooting-general
+---
+
+# Troubleshooting package restore errors
+
+This article focuses on common errors when restoring packages and steps to resolve them.
+
+Package Restore tries to install all package dependencies to the correct state matching the package references in your project file (*.csproj*) or your *packages.config* file. (In Visual Studio, the references appear in Solution Explorer under the **Dependencies \ NuGet** or the **References** node.) To follow the required steps to restore packages, see [Restore packages](../consume-packages/package-restore.md#restore-packages). If the package references in your project file (*.csproj*) or your *packages.config* file are incorrect (they do not match your desired state following Package Restore), then you need to either install or update packages instead of using Package Restore.
+
+If the instructions here do not work for you, [please file an issue on GitHub](https://github.com/NuGet/docs.microsoft.com-nuget/issues) so that we can examine your scenario more carefully. Do not use the "Is this page helpful?" control that may appear on this page because it doesn't give us the ability to contact you for more information.
+
+## Quick solution for Visual Studio users
+
+If you're using Visual Studio, first enable package restore as follows. Otherwise continue to the sections that follow.
+
+1. Select the **Tools > NuGet Package Manager > Package Manager Settings** menu command.
+1. Set both options under **Package Restore**.
+1. Select **OK**.
+1. Build your project again.
+
+
+
+These settings can also be changed in your `NuGet.Config` file; see the [consent](#consent) section. If your project is an older project that uses the MSBuild-integrated package restore, you may need to [migrate](package-restore.md#migrate-to-automatic-package-restore-visual-studio) to automatic package restore.
+
+
+
+## This project references NuGet package(s) that are missing on this computer
+
+Complete error message:
+
+```output
+This project references NuGet package(s) that are missing on this computer.
+Use NuGet Package Restore to download them. The missing file is {name}.
+```
+
+This error occurs when you attempt to build a project that contains references to one or more NuGet packages, but those packages are not presently installed on the computer or in the project.
+
+- When using the [PackageReference](package-references-in-project-files.md) management format, this error might be a leftover from a packages.config to PackageReference migration and needs to be [manually removed](/nuget/resources/nuget-faq#working-with-packages) from the project file.
+- When using [packages.config](../reference/packages-config.md), the error means that the package is not installed in the `packages` folder at the solution root.
+
+This situation commonly occurs when you obtain the project's source code from source control or another download. Packages are typically omitted from source control or downloads because they can be restored from package feeds like nuget.org (see [Packages and source control](Packages-and-Source-Control.md)). Including them would otherwise bloat the repository or create unnecessarily large .zip files.
+
+The error can also happen if your project file contains absolute paths to package locations, and you move the project.
+
+Use one of the following methods to restore the packages:
+
+- If you've moved the project file, edit the file directly to update the package references.
+- [Visual Studio](package-restore.md#restore-using-visual-studio) ([automatic restore](package-restore.md#restore-packages-automatically-using-visual-studio) or [manual restore](package-restore.md#restore-packages-manually-using-visual-studio))
+- [dotnet CLI](package-restore.md#restore-using-the-dotnet-cli)
+- [nuget.exe CLI](package-restore.md#restore-using-the-nugetexe-cli)
+- [MSBuild](package-restore.md#restore-using-msbuild)
+- [Azure Pipelines](package-restore.md#restore-using-azure-pipelines)
+- [Azure DevOps Server](package-restore.md#restore-using-azure-devops-server)
+
+After a successful restore, the package should be present in the *global-packages* folder. For projects using PackageReference, a restore should recreate the `obj/project.assets.json` file; for projects using `packages.config`, the package should appear in the project's `packages` folder. The project should now build successfully. If not, [file an issue on GitHub](https://github.com/NuGet/docs.microsoft.com-nuget/issues) so we can follow up with you.
+
+
+
+## Assets file project.assets.json not found
+
+Complete error message:
+
+```output
+Assets file '\project.assets.json' not found. Run a NuGet package restore to generate this file.
+```
+
+The `project.assets.json` file maintains a project's dependency graph when using the PackageReference management format, which is used to make sure that all necessary packages are installed on the computer. Because this file is generated dynamically through package restore, it's typically not added to source control. As a result, this error occurs when building a project with a tool such as `msbuild` that does not automatically restore packages.
+
+In this case, run `msbuild -t:restore` followed by `msbuild`, or use `dotnet build` (which restores packages automatically). You can also use any of the package restore methods in the [previous section](#missing).
+
+
+
+## One or more NuGet packages need to be restored but couldn't be because consent has not been granted
+
+Complete error message:
+
+```output
+One or more NuGet packages need to be restored but couldn't be because consent has
+not been granted. To give consent, open the Visual Studio Options dialog, click on
+the NuGet Package Manager node and check 'Allow NuGet to download missing packages
+during build.' You can also give consent by setting the environment variable
+'EnableNuGetPackageRestore' to 'true'. Missing packages: {name}
+```
+
+This error indicates that package restore is disabled in your NuGet configuration.
+
+You can change the applicable settings in Visual Studio as described earlier under [Quick solution for Visual Studio users](#quick-solution-for-visual-studio-users).
+
+You can also edit these settings directly in the applicable `nuget.config` file (typically `%AppData%\NuGet\NuGet.Config` on Windows and `~/.nuget/NuGet/NuGet.Config` on Mac/Linux). Make sure the `enabled` and `automatic` keys under `packageRestore` are set to True:
+
+```xml
+
+
+
+
+
+
+
+```
+
+> [!Important]
+> If you edit the `packageRestore` settings directly in `nuget.config`, restart Visual Studio so that the options dialog box shows the current values.
+
+## Other potential conditions
+
+- You may encounter build errors due to missing files, with a message saying to use NuGet restore to download them. However, running a restore might say, "All packages are already installed and there is nothing to restore." In this case, delete the `packages` folder (when using `packages.config`) or the `obj/project.assets.json` file (when using PackageReference) and run restore again. If the error still persists, use `nuget locals all -clear` or `dotnet nuget locals all --clear` from the command line to clear the *global-packages* and cache folders as described on [Managing the global packages and cache folders](managing-the-global-packages-and-cache-folders.md).
+
+- When obtaining a project from source control, your project folders may be set to read-only. Change the folder permissions and try restoring packages again.
+
+- You may be using an old version of NuGet. Check [nuget.org/downloads](https://www.nuget.org/downloads) for the latest recommended versions. For Visual Studio 2015, we recommend 3.6.0.
+
+If you encounter other problems, [file an issue on GitHub](https://github.com/NuGet/docs.microsoft.com-nuget/issues) so we can get more details from you.
diff --git a/docs/consume-packages/PackageDownload-Functionality.md b/docs/consume-packages/PackageDownload-Functionality.md
new file mode 100644
index 000000000..8b5bb01b3
--- /dev/null
+++ b/docs/consume-packages/PackageDownload-Functionality.md
@@ -0,0 +1,77 @@
+---
+title: Download packages with PackageDownload
+description: Describes the PackageDownload feature, which is a complement to PackageReference.
+author: nkolev92
+ms.author: nikolev
+ms.date: 12/22/2021
+ms.topic: article
+---
+
+# PackageDownload
+
+Starting with Visual Studio 2017 and .NET SDK 1.0.0, NuGet [PackageReference](Package-References-in-Project-Files.md) functionality was added.
+
+`PackageReference` allows you to manage your package dependencies directly in your project file.
+When you run restore, the transitive dependencies are resolved automatically and the applicable references are chosen for each package in the project graph.
+
+In [NuGet version 5.3](..\release-notes\NuGet-5.3.md) a companion feature was introduced for [.NET SDK-style projects](..\resources\check-project-format.md) called `PackageDownload`, which allows you to download the package without including its files in the project.
+
+## PackageDownload specification
+
+PackageDownload is a utility feature for all .NET SDK-style projects, and it works along side `PackageReference`.
+
+`PackageDownload` items support different attributes compared to `PackageReference`. Only attributes listed in the below table are supported.
+
+| Attributes | Description | Example |
+|------------|-------------|---------|
+| Version | Only exact versions, surrounded with `[]` are supported. Multiple versions can be specified separated by `;` | `[1.0.0]`, `[1.0.0];[2.0.0]` |
+
+Packages acquired through PackageDownload will undergo the same [installation process](..\concepts\package-installation-process.md) as packages acquired through PackageReference.
+This means [package signatures](installing-signed-packages.md) are validated, [package source mapping](Package-Source-Mapping.md) is considered.
+All newly acquired PackageDownload packages will be installed in the global packages folder.
+
+| Feature | PackageReference | PackageDownload |
+|-|------------------|-----------------|
+| Package assets selection | Assemblies from packages are automatically added to the project and can be used for compile and runtime | No assets from the package are included in the project. |
+| Dependencies | Automatically resolved, and flattened to a single version | Not considered at all |
+| pack | Included in the package specification | Not included in the package specification. |
+| Transitivity | PackageReference items are automatically propagated to dependant projects | PackageDownload items are ignored by dependant projects |
+| Version | Version ranges such as `1.0.0` or `[1.0.0, )` are supported. Exactly 1 version is allowed. | Only exact versions are supported. More than 1 version can be downloaded. |
+| dotnet list package | All dependencies are included | PackageDownload packages are not shown by `dotnet list package`. |
+
+Due to the fact that PackageDownload are not tied to the project in any way beyond acquisition, multiple versions of the same package can be downloaded.
+
+### PackageDownload limitations
+
+Given that this is an advanced feature with limited applicability, it doesn't have a tooling support equivalent to PackageReference.
+
+- There is no VisualStudio or dotnet.exe functionality to modify PackageDownload items. You can only change them manually in your project files.
+- dotnet add, remove, and list commands do not account for PackageDownload items.
+- PackageDownload items are *not* part of the [packages lock file](package-references-in-project-files.md#locking-dependencies).
+
+### PackageDownload applications
+
+The primary application of PackageDownload is downloading packages that do not follow the traditional NuGet package structure and primarily carry build time dependencies.
+
+Ideally, all your dependencies are expressed through PackageReference, but in scenarios where that's not possible, or often times not practical yet, you can use this feature to simply `download` packages to a certain location, in a similar way that you could achieve that with a `packages.config` file not tied to a project.
+
+Example:
+
+```xml
+
+
+
+
+ packages/
+ $(RestorePackagesPath)obj/
+ net5.0
+ true
+ false
+
+
+
+
+
+
+
+```
diff --git a/docs/consume-packages/Packages-and-Source-Control.md b/docs/consume-packages/Packages-and-Source-Control.md
new file mode 100644
index 000000000..2d7cb5516
--- /dev/null
+++ b/docs/consume-packages/Packages-and-Source-Control.md
@@ -0,0 +1,94 @@
+---
+title: NuGet Packages and Source Control
+description: Considerations for how to treat NuGet packages within version control and source control systems, and how to omit packages with git and TFVC.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/16/2018
+ms.topic: how-to
+---
+
+# Omitting NuGet packages in source control systems
+
+Developers typically omit NuGet packages from their source control repositories and rely instead on [package restore](package-restore.md) to reinstall a project's dependencies before a build.
+
+The reasons for relying on package restore include the following:
+
+1. Distributed version control systems, such as Git, include full copies of every version of every file within the repository. Binary files that are frequently updated lead to significant bloat and lengthens the time it takes to clone the repository.
+1. When packages are included in the repository, developers are liable to add references directly to package contents on disk rather than referencing packages through NuGet, which can lead to hard-coded path names in the project.
+1. It becomes harder to clean your solution of any unused package folders, as you need to ensure you don't delete any package folders still in use.
+1. By omitting packages, you maintain clean boundaries of ownership between your code and the packages from others that you depend upon. Many NuGet packages are maintained in their own source control repositories already.
+
+Although package restore is the default behavior with NuGet, some manual work is necessary to omit packages—namely, the `packages` folder in your project—from source control, as described in this article.
+
+## Omitting packages with Git
+
+Use the [.gitignore file](https://git-scm.com/docs/gitignore) to ignore NuGet packages (`.nupkg`) the `packages` folder, and `project.assets.json`, among other things. For reference, see the [sample `.gitignore` for Visual Studio projects](https://github.com/github/gitignore/blob/master/VisualStudio.gitignore):
+
+The important parts of the `.gitignore` file are:
+
+```gitignore
+# Ignore NuGet Packages
+*.nupkg
+
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Ignore other intermediate files that NuGet might create. project.lock.json is used in conjunction
+# with project.json (NuGet v3); project.assets.json is used in conjunction with the PackageReference
+# format (NuGet v4 and .NET Core).
+project.lock.json
+project.assets.json
+```
+
+## Omitting packages with Team Foundation Version Control
+
+> [!Note]
+> Follow these instructions if possible *before* adding your project to source control. Otherwise, manually delete the `packages` folder from your repository and check in that change before continuing.
+
+To disable source control integration with TFVC for selected files:
+
+1. Create a folder called `.nuget` in your solution folder (where the `.sln` file is).
+ - Tip: on Windows, to create this folder in Windows Explorer, use the name `.nuget.` *with* the trailing dot.
+
+1. In that folder, create a file named `NuGet.Config` and open it for editing.
+
+1. Add the following text as a minimum, where the [disableSourceControlIntegration](../reference/nuget-config-file.md#solution-section) setting instructs Visual Studio to skip everything in the `packages` folder:
+
+ ```xml
+
+
+
+
+
+
+ ```
+
+1. If you are using TFS 2010 or earlier, cloak the `packages` folder in your workspace mappings.
+
+1. On TFS 2012 or later, or with Visual Studio Team Services, create a `.tfignore` file as described on [Add Files to the Server](/vsts/tfvc/add-files-server?view=vsts#tfignore&preserve-view=true). In that file, include the content below to explicitly ignore modifications to the `\packages` folder on the repository level and a few other intermediate files. (You can create the file in Windows Explorer using the name a `.tfignore.` with the trailing dot, but you might need to disable the "Hide known file extensions" option first.):
+
+ ```cli
+ # Ignore NuGet Packages
+ *.nupkg
+
+ # Ignore the NuGet packages folder in the root of the repository. If needed, prefix 'packages'
+ # with additional folder names if it's not in the same folder as .tfignore.
+ packages
+
+ # Omit temporary files
+ project.lock.json
+ project.assets.json
+ *.nuget.props
+ ```
+
+1. Add `NuGet.Config` and `.tfignore` to source control and check in your changes.
diff --git a/docs/consume-packages/Reinstalling-and-Updating-Packages.md b/docs/consume-packages/Reinstalling-and-Updating-Packages.md
new file mode 100644
index 000000000..f4465e821
--- /dev/null
+++ b/docs/consume-packages/Reinstalling-and-Updating-Packages.md
@@ -0,0 +1,185 @@
+---
+title: Reinstall and update NuGet packages in Visual Studio
+description: Learn how to reinstall and update NuGet packages to address broken package references and broken projects in Visual Studio.
+author: JonDouglas
+ms.author: jodou
+ms.date: 11/03/2023
+ms.topic: how-to
+---
+
+# Reinstall and update NuGet packages in Visual Studio
+
+Sometimes package references can break within a Visual Studio project. Uninstalling and reinstalling the same version of the package often restores the references to working order. Updating a package, which installs an updated version, can also resolve the issue. This article describes how to reinstall and update NuGet packages to address broken package references and broken projects.
+
+> [!NOTE]
+> The guidance in this article applies only to projects that use the [packages.config](../reference/packages-config.md) management format. For [PackageReference](../consume-packages/Package-References-in-Project-Files.md) projects, a restore operation automatically fixes broken references.
+
+## Common scenarios
+
+Here are some common scenarios where you might encounter broken package references in your Visual Studio project.
+
+| Scenario | Description | Resolution |
+|---|---|---|
+| **Broken references after package restore** | You open your Visual Studio project and restore NuGet packages, but broken package references remain. | To fix the references, try reinstalling each package separately. |
+| **Broken project due to deleted files** | Deleted (missing) package files cause your project to break. NuGet doesn't prevent deleting items that you add from packages. It can be easy to inadvertently modify contents installed from a package and break your project. | To restore your project, try reinstalling the affected packages. |
+| **Broken project after package update** | A package update breaks your project. Companion updates to a dependency package generally cause this type of failure. | To restore the state of the dependency to its previous working order, try reinstalling the specific dependent package. |
+| **Broken references after project retarget or upgrade** | A project retarget or upgrade process causes broken package references. After you retarget your project, NuGet shows a build error. Build warnings list packages that might need to be reinstalled. Or, after you upgrade your project, NuGet shows an error in the project upgrade log. The log file lists packages that might need to be reinstalled. | To resolve issues due to a change in target framework, try reinstalling one or more packages. |
+| **Package changes under development** | Package authors often need to reinstall the same version of a package they're currently developing to test their changes. | The NuGet Package Manager Console in Visual Studio provides flexible options for updating and reinstalling packages. To reinstall a package under development, you can use the `Update-Package -reinstall` command. |
+
+## Implementation options
+
+You have several choices for how to update and reinstall NuGet packages. Common methods include NuGet Package Manager UI options, the NuGet Package Manager Console, and the NuGet (Command Line Interface) CLI.
+
+### Package Manager UI
+
+In addition to the Console interface, the Package Manager UI also provides menu options to install, update, and uninstall packages.
+
+- To update a package, open the **Updates** tab, choose one or more packages, then select **Update**.
+
+- To reinstall a package, first uninstall the package and then install it again. Open the **Installed** tab, choose a package and record its name, then select **Uninstall**. Switch to the **Browse** tab and search for the package name, choose the package, then select **Install**.
+
+### Package Manager Console
+
+You can access the Package Manager Console under **Tools** > **NuGet Package Manager** > **Package Manager Console**.
+
+- To update a package, the Package Manager Console provides the `Update-Package` command.
+
+- To reinstall a package, you can use the same command with the `-reinstall` parameter. This approach is the easiest option, if it's compatible with your configuration.
+
+For more information, see the [Update-Package command](#update-package-command) and [Package reinstall considerations](#package-reinstall-considerations) sections.
+
+### NuGet CLI
+
+The NuGet CLI, `nuget.exe`, is the command-line utility for Windows that provides all NuGet capabilities.
+
+- To update an installed package, run the `nuget update` command.
+
+- To reinstall all NuGet packages, delete the package folder and then run the `nuget install` command.
+
+- To reinstall a single package, delete the package folder and then run the `nuget install ` command, where the `` argument is the ID of the specific package.
+
+> [!NOTE]
+> For the **dotnet CLI**, the equivalent procedure isn't required. When you run the `dotnet restore` command, the dotnet CLI uses NuGet to determine dependencies and download any necessary NuGet packages. For more information, see [Restore NuGet packages with the dotnet CLI](package-restore.md#restore-using-the-dotnet-cli).
+
+## Constraints on upgrade versions
+
+By default, reinstalling or updating a package _always_ installs the latest version available from the package source. However, projects that use the `packages.config` management format can specifically limit the allowed NuGet package version range.
+
+Suppose your application works only with version 1.x of a package, but not with version 2.0 or later, due to a major change in the package API. To ensure your application works as expected, you want to constrain NuGet package upgrades to versions 1.x only. The limitation helps to prevent accidental updates that might break your application.
+
+To set a constraint, open the `packages.config` file in a text editor. Locate the dependency that you want to limit, and add the `allowedVersions` attribute with your desired version range.
+
+The following example shows how to constrain updates to version 1.x by setting the `allowedVersions` attribute to `[1,2)`:
+
+```xml
+
+
+
+
+
+
+```
+
+In all cases, use the notation described in [Package versioning](../concepts/package-versioning.md#version-ranges).
+
+## Update-Package command
+
+The [Update-Package command](../reference/ps-reference/ps-ref-update-package.md) in the Package Manager Console is the easiest way to reinstall a package and address broken references. However, this approach isn't usable in all scenarios. You can use the command to update an installed package, but not to do an initial install. If you try to update or reinstall a package that isn't already installed in the configuration, the command returns an error. Be sure to review the [Package reinstall considerations](#package-reinstall-considerations) section before working with the command.
+
+Updating packages in a project or solution by using [PackageReference](../Consume-Packages/Package-References-in-Project-Files.md) always updates to the latest version of the package (excluding prerelease packages). Projects that use the `packages.config` management format can limit upgrade versions as described in [Constraints on upgrade versions](#constraints-on-upgrade-versions).
+
+The following sections provide examples for working with the command.
+
+### Reinstall package options
+
+Here's a basic usage of the command to do a reinstall. To identify a specific NuGet package, you can use the optional `-Id` parameter.
+
+```powershell
+# Reinstall the package named
+Update-Package -Id –reinstall
+```
+
+Using the `Update-Package` command is easier than removing a package and then trying to locate the same package in the NuGet gallery with the same version.
+
+### Update package options
+
+The same command without the `-reinstall` parameter updates a package to a newer version, if applicable. The command returns an error if the specified package isn't already installed in a project.
+
+```powershell
+# Update the package named
+Update-Package
+```
+
+### Project and solution options
+
+By default, the `Update-Package` command affects all projects in a solution. To limit the action to a specific project, use the `-ProjectName` parameter. Provide the name of the project as it appears in Visual Studio Solution Explorer.
+
+The following command reinstalls a NuGet package for a specific project in your solution. The name of the specific NuGet package to reinstall is provided in the `` parameter.
+
+```powershell
+# Reinstall the package named in MyProject only
+Update-Package -ProjectName MyProject -reinstall
+```
+
+If you want to reinstall all packages in your project, use the `-ProjectName` parameter by don't specify any particular package. You can follow this same approach to update the packages in your project, as shown in this example:
+
+```powershell
+# Update all packages in MyProject only
+Update-Package -ProjectName MyProject
+```
+
+To update all packages in a solution, just use the `Update-Package` command by itself with no other arguments or parameters.
+
+> [!IMPORTANT]
+> Be sure to use the following form of the command carefully. The command process can take considerable time to perform all of the updates.
+
+```powershell
+# Update all packages in all projects in the solution
+Update-Package
+```
+
+## Package reinstall considerations
+
+If you intend to use the `Update-Package` command to reinstall packages, review the following considerations to ensure compatibility with your configuration scenario.
+
+- Packages and their dependencies might not support a retargeted project target framework.
+- When the `requireReinstallation` attribute is set to `true`, Visual Studio issues build warnings for affected packages.
+- Reinstall of a package and version constraints can introduce dependency version compatibility issues.
+- Reinstall of a specific package can cause dependent packages to break.
+
+### Package doesn't support project target framework
+
+If you retarget your project target framework, one or more packages might not support the new target configuration.
+
+Usually, reinstalling a package with the `Update-Package –reinstall ` command works. A package installed against an old target framework is uninstalled and the same package is installed against the new target framework of the project.
+
+In some cases, a package might not support the new target framework. Here are some of the issues you might encounter:
+
+- If a package supports portable class libraries (PCLs), and you retarget the project to a combination of platforms no longer supported by the package, references to the package can be missing after reinstalling.
+
+- This issue can surface for packages you use directly or for packages installed as dependencies. Any package that you use directly might support the new target framework while their dependencies don't.
+
+- If reinstalling packages after retargeting your application results in build or runtime errors, you might need to revert your target framework or search for alternative packages that properly support your new target framework.
+
+### requireReinstallation attribute set to true
+
+After you retarget your project target framework or upgrade NuGet packages, NuGet might add the `requireReinstallation` attribute to the `packages.config` file for your project. If NuGet detects affected packages during the retargeting or upgrading process, it adds a `requireReinstallation="true"` attribute to the `packages.config` file for all affected package references. As a result, each subsequent build of your project in Visual Studio raises build warnings for those packages. The warnings are presented as a reminder to reinstall the affected package.
+
+### Package dependency version incompatibility
+
+The `Update-Package –reinstall` command reinstalls the **same** version of an installed package and the **latest** version of any dependencies. To address version incompatibility issues, you can set version range constraints to control the configuration. NuGet adheres to the constraints and updates the package dependencies to newer versions only as required to fix an issue.
+
+- If your constraint settings cause a dependency to revert to an earlier version during package reinstall, you can address the issue with the `Update-Package ` command. This command reinstalls the specified dependency without affecting the dependent package.
+
+- You can also use the `Update-Package –reinstall -ignoreDependencies` command. This option reinstalls the same version of the original package, but it doesn't reinstall dependencies. Use this approach when updating package dependencies might result in a broken configuration state.
+
+### Broken dependent package
+
+When you reinstall a specific package, any installed packages that depend on the reinstalled package aren't updated. The versions of these other installed packages remain the same. As a result, reinstalling a dependency can break a dependent package.
+
+## Related articles
+
+- Review the [packages.config](../reference/packages-config.md) management format.
+- Implement [PackageReference](../consume-packages/Package-References-in-Project-Files.md) in project files.
+- Use the [Update-Package command](../reference/ps-reference/ps-ref-update-package.md) in the NuGet Package Manager Console in Visual Studio.
+- Explore [package versioning](../concepts/package-versioning.md#version-ranges) notation formats.
diff --git a/docs/consume-packages/Team-Foundation-Build.md b/docs/consume-packages/Team-Foundation-Build.md
new file mode 100644
index 000000000..7b631ef7e
--- /dev/null
+++ b/docs/consume-packages/Team-Foundation-Build.md
@@ -0,0 +1,200 @@
+---
+title: Walkthrough of NuGet Package Restore with Team Foundation Build
+description: A walkthrough of how NuGet package restore with with Team Foundation Build (both TFS and Visual Studio Team Services).
+author: JonDouglas
+ms.author: jodou
+ms.date: 01/09/2017
+ms.topic: concept-article
+---
+
+# Setting up package restore with Team Foundation Build
+
+This article provides a detailed walkthrough on how to restore packages as part of the [Team Services Build](/vsts/build-release/index) both, for both Git and Team Services Version Control.
+
+Although this walkthrough is specific for the scenario of using Visual Studio Team Services, the concepts also apply to other version control and build systems.
+
+Applies To:
+
+- Custom MSBuild projects running on any version of TFS
+- Team Foundation Server 2012 or earlier
+- Custom Team Foundation Build Process Templates migrated to TFS 2013 or later
+- Build Process Templates With Nuget Restore functionality removed
+
+If you're using Visual Studio Team Services or Team Foundation Server 2013 with its build process templates, automatic package restore happens as part of the build process.
+
+## The general approach
+
+An advantage of using NuGet is that you can use it to avoid checking in binaries to your version control system.
+
+This is especially interesting if you are using a [distributed version control](https://en.wikipedia.org/wiki/Distributed_revision_control) system like git because developers need to clone the entire repository, including the full history, before they can start working locally. Checking in binaries can cause significant repository bloat as binary files are typically stored without delta compression.
+
+NuGet has supported [restoring packages](../consume-packages/package-restore.md) as part of the build for a long time now. The previous implementation had a chicken-and-egg problem for packages that want to extend the build process because NuGet restored packages while building the project. However, MSBuild doesn't allow extending the build during the build; one could argue that this an issue in MSBuild but I would argue that this is an inherent problem. Depending on which aspect you need to extend it might be too late to register by the time your package is restored.
+
+The cure to this problem is making sure that packages are restored as the first step in the build process:
+
+```cli
+nuget restore path\to\solution.sln
+```
+
+When your build process restores packages before building the code, you don't need to check-in `.targets` files
+
+> [!Note]
+> Packages must be authored to allow loading in Visual Studio. Otherwise, you may still want to check in `.targets` files so that other developers can simply open the solution without having to restore packages first.
+
+The following demo project shows how to set up the build in such a way that the `packages` folders and `.targets` files don't need to be checked-in. It also shows how to set up an automated build on the Team Foundation Service for this sample project.
+
+## Repository structure
+
+Our demo project is a simple command line tool that uses the command line argument to query Bing. It targets the .NET Framework 4 and uses many of the [BCL packages](https://www.nuget.org/profiles/dotnetframework/) ([Microsoft.Net.Http](https://www.nuget.org/packages/Microsoft.Net.Http), [Microsoft.Bcl](https://www.nuget.org/packages/Microsoft.Bcl), [Microsoft.Bcl.Async](https://www.nuget.org/packages/Microsoft.Bcl.Async), and [Microsoft.Bcl.Build](https://www.nuget.org/packages/Microsoft.Bcl.Build)).
+
+The structure of the repository looks as follows:
+
+```
+
+ │ .gitignore
+ │ .tfignore
+ │ build.proj
+ │
+ ├───src
+ │ │ BingSearcher.sln
+ │ │
+ │ └───BingSearcher
+ │ │ App.config
+ │ │ BingSearcher.csproj
+ │ │ packages.config
+ │ │ Program.cs
+ │ │
+ │ └───Properties
+ │ AssemblyInfo.cs
+ │
+ └───tools
+ └───NuGet
+ nuget.exe
+```
+
+You can see that we haven't checked-in the `packages` folder nor any `.targets` files.
+
+We have, however, checked-in the `nuget.exe` as it's needed during the build. Following widely used conventions we've checked it in under a shared `tools` folder.
+
+The source code is under the `src` folder. Although our demo only uses a single solution, you can easily imagine that this folder contains more than one solution.
+
+### Ignore files
+
+> [!Note]
+> There is currently a `[known bug in the NuGet client](https://nuget.codeplex.com/workitem/4072)` that causes the client to still add the `packages` folder to version control. A workaround is to disable the source control integration. In order to do that, you need a `Nuget.Config ` file in the `.nuget` folder that is parallel to your solution. If this folder doesn't exist yet, you need to create it. In [`Nuget.Config`](../consume-packages/configuring-nuget-behavior.md), add the following content:
+
+```xml
+
+
+
+
+
+```
+
+To communicate to version control that we don’t intent to check-in the **packages** folders, we've also added ignore files for both git (`.gitignore`) as well as TF version control (`.tfignore`). These files describe patterns of files you don't want to check-in.
+
+The `.gitignore` file looks as follows:
+
+```
+syntax: glob
+*.user
+*.suo
+bin
+obj
+packages
+*.nupkg
+project.lock.json
+project.assets.json
+```
+
+The `.gitignore` file is [quite powerful](https://www.kernel.org/pub/software/scm/git/docs/gitignore.html). For example, if you want to generally not check-in the contents of the `packages` folder but want to go with previous guidance of checking in the `.targets` files you could have the following rule instead:
+
+```
+packages
+!packages/**/*.targets
+```
+
+This will exclude all `packages` folders but will re-include all contained `.targets` files. By the way, you can find a template for `.gitignore` files that is specifically tailored for the needs of Visual Studio developers [here](https://github.com/github/gitignore/blob/master/VisualStudio.gitignore).
+
+TF version control supports a very similar mechanism via the [.tfignore](/vsts/tfvc/add-files-server#customize-which-files-are-ignored-by-version-control) file. The syntax is virtually the same:
+
+```
+*.user
+*.suo
+bin
+obj
+packages
+*.nupkg
+project.lock.json
+project.assets.json
+```
+
+## build.proj
+
+For our demo, we keep the build process fairly simple. We'll create an MSBuild project that builds all solutions while making sure that packages are restored before building the solutions.
+
+This project will have the three conventional targets `Clean`, `Build` and `Rebuild` as well as a new target `RestorePackages`.
+
+- The `Build` and `Rebuild` targets both depend on `RestorePackages`. This makes sure that you can both run `Build` and `Rebuild` and rely on packages being restored.
+- `Clean`, `Build` and `Rebuild` invoke the corresponding MSBuild target on all solution files.
+- The `RestorePackages` target invokes `nuget.exe` for each solution file. This is accomplished by using [MSBuild's batching functionality](/visualstudio/msbuild/msbuild-batching).
+
+The result looks as follows:
+
+```xml
+
+
+
+
+ $(MSBuildThisFileDirectory)bin\
+ Release
+ $(MSBuildThisFileDirectory)src\
+ $(MSBuildThisFileDirectory)tools\
+
+
+
+
+ OutDir=$(OutDir);Configuration=$(Configuration)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## Configuring Team Build
+
+Team Build offers various process templates. For this demonstration, we're using the Team Foundation Service. On-premises installations of TFS will be very similar though.
+
+Git and TF Version Control have different Team Build templates, so the following steps will vary depending on which version control system you are using. In both cases, all you need is selecting the build.proj as the project you want to build.
+
+First, let's look at the process template for git. In the git based template the build is selected via the property `Solution to build`:
+
+
+
+Please note that this property is a location in your repository. Since our `build.proj` is in the root, we simply used `build.proj`. If you place the build file under a folder called `tools`, the value would be `tools\build.proj`.
+
+In the TF version control template the project is selected via the property `Projects`:
+
+
+
+In contrast to the git based template the TF version control supports pickers (the button on the right hand side with the three dots). So in order to avoid any typing errors we suggest you use them to select the project.
diff --git a/docs/consume-packages/configuring-nuget-behavior.md b/docs/consume-packages/configuring-nuget-behavior.md
new file mode 100644
index 000000000..388cafd94
--- /dev/null
+++ b/docs/consume-packages/configuring-nuget-behavior.md
@@ -0,0 +1,289 @@
+---
+title: Common NuGet configurations
+description: NuGet.Config files control NuGet's behavior, and can be modified with nuget config command.
+author: JonDouglas
+ms.author: jodou
+ms.date: 01/10/2022
+ms.topic: article
+---
+
+# Common NuGet configurations
+
+NuGet's behavior is driven by the accumulated settings in one or more config (XML) files that can exist at solution- (project if no solution is used), user-, and computer-wide levels.
+
+## Config file locations and uses
+
+| Scope | `NuGet.Config` file location | Description |
+| --- | --- | --- |
+| Solution | Current folder (aka Solution folder) or any folder up to the drive root.| In a solution folder, settings apply to all projects in subfolders. Note that if a config file is placed in a project folder, it has no effect on that project. When restoring a project on the command line, the project's directory is treated as the solution directory, which can lead to differences in behaviour when restoring the project vs solution. |
+| User | **Windows:** `%appdata%\NuGet\NuGet.Config` **Mac/Linux:** `~/.config/NuGet/NuGet.Config` or `~/.nuget/NuGet/NuGet.Config` (varies by tooling) Additional configs are supported on all platforms. These configs cannot be edited by the tooling. **Windows:** `%appdata%\NuGet\config\*.Config` **Mac/Linux:** `~/.config/NuGet/config/*.config` or `~/.nuget/config/*.config` | Settings apply to all operations, but are overridden by any solution-level settings. |
+| Computer | **Windows:** `%ProgramFiles(x86)%\NuGet\Config` **Mac/Linux:** `/etc/opt/NuGet/Config` (Linux) or `/Library/Application Support` (Mac) by default. If `$NUGET_COMMON_APPLICATION_DATA` is neither null nor empty, then `$NUGET_COMMON_APPLICATION_DATA/NuGet/Config` instead | Settings apply to all operations on the computer, but are overridden by any user- or solution-level settings. |
+
+> [!Note]
+> On Mac/Linux, the user config file location varies by tooling. .NET CLI uses `~/.nuget/NuGet` folder, while Mono uses `~/.config/NuGet` folder.
+
+### On Mac/Linux, the user-level config file location varies by tooling
+On Mac/Linux, the user config file location varies by tooling.
+Majority of users use tools that look for the user config file under the `~/.nuget/NuGet` folder.
+These other tools look for the user config file under the `~/.config/NuGet` folder:
+* Mono
+* NuGet.exe
+* Visual Studio 2019 for Mac (and earlier versions)
+* Visual Studio 2022 for Mac (and later versions), only when working on classic Mono projects.
+
+If the tooling you use involves both locations, consider consolidating them by following these steps to allow you to work with only one user-level config file:
+1. Check the contents of the two user-level config files and keep the one you want under `~/.nuget/NuGet` folder.
+2. Set symbolic link from `~/.nuget/NuGet` to `~/.config/NuGet`. E.g. Run bash command: `ln -s ~/.nuget/NuGet ~/.config/NuGet`.
+
+
+Notes for earlier versions of NuGet:
+- NuGet 3.3 and earlier used a `.nuget` folder for solution-wide settings. This folder is not used in NuGet 3.4+.
+- For NuGet 2.6 to 3.x, the computer-level config file on Windows was located in `%ProgramData%\NuGet\Config[\{IDE}[\{Version}[\{SKU}]]]\NuGet.Config`, where `{IDE}` can be `VisualStudio`, `{Version}` was the Visual Studio version such as `14.0`, and `{SKU}` is either `Community`, `Pro`, or `Enterprise`. To migrate settings to NuGet 4.0+, simply copy the config file to `%ProgramFiles(x86)%\NuGet\Config`. On Linux, this previous location was `/etc/opt`, and on Mac, `/Library/Application Support`.
+
+## Changing config settings
+
+A `NuGet.Config` file is a simple XML text file containing key/value pairs as described in the [NuGet Configuration Settings](../reference/nuget-config-file.md) topic.
+
+Settings are managed using the NuGet CLI [config command](../reference/cli-reference/cli-ref-config.md):
+- By default, changes are made to the user-level config file. (On Mac/Linux, the location of user-level config file varies by tooling)
+- To change settings in a different file, use the `-configFile` switch. In this case files can use any filename.
+- Keys are always case sensitive.
+- Elevation is required to change settings in the computer-level settings file.
+
+> [!Warning]
+> Although you can modify the file in any text editor, NuGet (v3.4.3 and later) silently ignores the entire configuration file if it contains malformed XML (mismatched tags, invalid quotation marks, etc.). This is why it's preferable to manage setting using `nuget config`.
+
+### Setting a value
+
+Windows:
+
+```cli
+# Set globalPackagesFolder in the user-level config file
+dotnet nuget config set globalPackagesFolder "C:\packages"
+
+# Set repositoryPath (available for packages.config only) in the user-level config file
+dotnet nuget config set repositoryPath "C:\packages"
+
+# Set repositoryPath in solution-level files
+dotnet nuget config set repositoryPath "C:\packages" --configfile "C:\my.config"
+dotnet nuget config set repositoryPath "c:\packages" --configfile "..\..\my.config"
+
+# Set repositoryPath in the computer-level file (requires elevation)
+dotnet nuget config set repositoryPath "c:\packages" --configfile "%appdata%\NuGet\NuGet.Config"
+```
+
+Mac/Linux:
+
+```cli
+# Set globalPackagesFolder in the user-level config file
+dotnet nuget config set globalPackagesFolder /home/packages
+
+# Set repositoryPath (available for packages.config only) in the user-level config file
+dotnet nuget config set repositoryPath /home/packages
+
+# Set repositoryPath in solution-level files
+dotnet nuget config set repositoryPath /home/projects/packages --configfile /home/my.Config
+dotnet nuget config set repositoryPath /home/packages --configfile home/myApp/NuGet.Config
+
+# Set repositoryPath in the computer-level file (requires elevation)
+dotnet nuget config set repositoryPath /home/packages --configfile $XDG_DATA_HOME/NuGet.Config
+```
+
+> [!Note]
+> In NuGet 3.4 and later you can use environment variables in any value, as in `repositoryPath=%PACKAGEHOME%` (Windows) and `repositoryPath=$PACKAGEHOME` (Mac/Linux).
+
+### Removing a value
+
+To remove a value, specify a key with an empty value.
+
+```cli
+# Windows
+nuget config -set repositoryPath= -configfile c:\my.Config
+
+# Mac/Linux
+nuget config -set repositoryPath= -configfile /home/my.Config
+```
+
+### Creating a new config file
+
+Using the .NET CLI, create a default nuget.config by running `dotnet new nugetconfig`.
+For more information, see [dotnet CLI commands](../reference/dotnet-commands.md#package-consumption).
+
+Alternatively, manually copy the template below into the new file and then use `nuget config -configFile ` to set values:
+
+```xml
+
+
+
+```
+
+## How settings are applied
+
+Multiple `NuGet.Config` files allow you to store settings in different locations so that they apply to a single solution, or a group of solutions.
+These settings collectively apply to any NuGet operation invoked from the command line or from Visual Studio, with settings that exist "closest" to a solution or the current folder taking precedence.
+If a command line tool is used on a project file, rather than a solution file, then the project directory is used as the "solution directory", which can lead to inconsistent behaviour when there is a `NuGet.Config` file in a subdirectory of the solution file.
+
+Specifically, when a config file is not specified explicitly on the command line, NuGet loads settings from the different config files in the following order:
+
+1. (*Uncommon*) The [`NuGetDefaults.Config` file](#nuget-defaults-file), which contains settings related only to package sources.
+1. The computer-level file.
+1. The user-level file.
+1. Files found in every folder in the path from the drive root to the current folder (where `nuget.exe` is invoked or the folder containing the Visual Studio solution). For example, if a command is invoked in `c:\A\B\C`, NuGet looks for and loads config files in `c:\`, then `c:\A`, then `c:\A\B`, and finally `c:\A\B\C`.
+
+When a config file is explicitly specified on the command line, for example `nuget -configFile my.config` or `dotnet restore --configfile my.config`, only the settings from the specified file will be used.
+
+As NuGet finds settings in these files, they are applied as follows:
+
+1. For single-item elements, NuGet replaced any previously-found value for the same key. This means that settings that are "closest" to the current folder or solution override any others found earlier. For example, the `defaultPushSource` setting in `NuGetDefaults.Config` is overridden if it exists in any other config file.
+1. For collection elements (such as ``), NuGet combines the values from all configuration files into a single collection.
+1. When `` is present for a given node, NuGet ignores previously defined configuration values for that node.
+
+> [!Tip]
+> Add a `nuget.config` file in the root of your solution repository. This is considered a best practice as it promotes repeatability and ensures that different users have the same NuGet configuration.
+
+### Settings walkthrough
+
+Let's say you have the following folder structure on two separate drives:
+
+```
+disk_drive_1
+ User
+disk_drive_2
+ Project1
+ Source
+ Project2
+ Source
+ tmp
+```
+
+You then have four `NuGet.Config` files in the following locations with the given content. (The computer-level file is not included in this example, but would behave similarly to the user-level file.)
+
+File A. User-level file, (`%appdata%\NuGet\NuGet.Config` on Windows, `~/.config/NuGet/NuGet.Config` on Mac/Linux):
+
+```xml
+
+
+
+
+
+
+```
+
+File B. `disk_drive_2/NuGet.Config`:
+
+```xml
+
+
+
+
+
+
+
+
+
+```
+
+File C. `disk_drive_2/Project1/NuGet.Config`:
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+```
+
+File D. `disk_drive_2/Project2/NuGet.Config`:
+
+```xml
+
+
+
+
+
+
+
+```
+
+NuGet then loads and applies settings as follows, depending on where it's invoked:
+
+- **Invoked from `disk_drive_1/users`**: Only the default repository listed in the user-level configuration file (A) is used, because that's the only file found on `disk_drive_1`.
+
+- **Invoked from `disk_drive_2/` or `disk_drive_/tmp`**: The user-level file (A) is loaded first, then NuGet goes to the root of `disk_drive_2` and finds file (B). NuGet also looks for a configuration file in `/tmp` but does not find one. As a result, the default repository on `nuget.org` is used, package restore is enabled, and packages get expanded in `disk_drive_2/tmp`.
+
+- **Invoked from `disk_drive_2/Project1` or `disk_drive_2/Project1/Source`**: The user-level file (A) is loaded first, then NuGet loads file (B) from the root of `disk_drive_2`, followed by file (C). Settings in (C) override those in (B) and (A), so the `repositoryPath` where packages get installed is `disk_drive_2/Project1/External/Packages` instead of `disk_drive_2/tmp`. Also, because (C) clears ``, nuget.org is no longer available as a source leaving only `https://MyPrivateRepo/ES/nuget`.
+
+- **Invoked from `disk_drive_2/Project2` or `disk_drive_2/Project2/Source`**: The user-level file (A) is loaded first followed by file (B) and file (D). Because `packageSources` is not cleared, both `nuget.org` and `https://MyPrivateRepo/DQ/nuget` are available as sources. Packages get expanded in `disk_drive_2/tmp` as specified in (B).
+
+## Additional user wide configuration
+
+Starting with 5.7, NuGet has added support for additional user wide configuration files. This allows third-party vendors to add additional user configuration files without elevation.
+These configuration files are found in the standard user wide configuration folder within a `config` subfolder.
+All files ending with `.config` or `.Config` will be considered.
+These files cannot be edited by the standard tooling.
+
+| OS Platform | Additional Configurations |
+| --- | --- |
+| Windows | `%appdata%\NuGet\config\*.Config` |
+| Mac/Linux | `~/.config/NuGet/config/*.config` or `~/.nuget/config/*.config` |
+
+## NuGet defaults file
+
+The `NuGetDefaults.Config` is uncommon and can only specify package sources from which packages are installed and updated, or control the default target for publishing packages with `nuget push`.
+
+Because administrators can conveniently (using Group Policy, for example) deploy consistent `NuGetDefaults.Config` files to developer and build machines, they can ensure that everyone in the organization is using consistent package sources, whether or not that includes nuget.org.
+
+> [!Important]
+> The `NuGetDefaults.Config` file never causes a package source to be removed from a developer's NuGet configuration. That means if the developer has already used NuGet and therefore has the nuget.org package source registered, it won't be removed after the creation of a `NuGetDefaults.Config` file.
+>
+> Furthermore, neither `NuGetDefaults.Config` nor any other mechanism in NuGet can prevent access to package sources like nuget.org. If an organization wishes to block such access, it must use other means such as firewalls to do so.
+
+### `NuGetDefaults.Config` location
+
+The following table describes where the `NuGetDefaults.Config` file should be stored, depending on the target OS:
+
+| OS Platform | `NuGetDefaults.Config` Location |
+| --- | --- |
+| Windows | **Visual Studio 2017 or NuGet 4.x+:** `%ProgramFiles(x86)%\NuGet` **Visual Studio 2015 and earlier or NuGet 3.x and earlier:** `%PROGRAMDATA%\NuGet` |
+| Mac/Linux | `$XDG_DATA_HOME` (typically `~/.local/share` or `/usr/local/share`, depending on OS distribution)|
+
+### NuGetDefaults.Config settings
+
+- `packageSources`: this collection has the same meaning as `packageSources` in regular config files and specifies the default sources. NuGet uses the sources in order when installing or updating packages in projects using the `packages.config` management format. For projects using the PackageReference format, NuGet uses local sources first, then sources on network shares, then HTTP sources, regardless of the order in the configuration files. NuGet always ignores the order of sources with restore operations.
+
+- `disabledPackageSources`: this collection also has the same meaning as in `NuGet.Config` files, where each affected source is listed by its name and a `true`/`false` value indicating whether it's disabled. This allows the source name and URL to remain in `packageSources` without having it turned on by default. Individual developers can then re-enable the source by setting the source's value to `false` in other `NuGet.Config` files without having to find the correct URL again. This is also useful to supply developers with a full list of internal source URLs for an organization while enabling only an individual team's source by default.
+
+- `defaultPushSource`: specifies the default target for `nuget push` operations, overriding the built-in default of `nuget.org`. Administrators can deploy this setting to avoid publishing internal packages to the public `nuget.org` by accident, as developers specifically need to use `nuget push -Source` to publish to `nuget.org`.
+
+### Example NuGetDefaults.Config and application
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
diff --git a/docs/consume-packages/consuming-packages-authenticated-feeds.md b/docs/consume-packages/consuming-packages-authenticated-feeds.md
new file mode 100644
index 000000000..126662636
--- /dev/null
+++ b/docs/consume-packages/consuming-packages-authenticated-feeds.md
@@ -0,0 +1,149 @@
+---
+title: Consuming packages from authenticated feeds
+description: Consuming packages from authenticated feeds in all NuGet client scenarios
+author: nkolev92
+ms.author: nikolev
+ms.date: 12/22/2023
+ms.topic: how-to
+ms.custom: sfi-ropc-nochange
+---
+
+# Consuming packages from authenticated feeds
+
+Many NuGet operations, such as restore and install, require communication with one or more package sources, which [can be configured in *nuget.config* files](../reference/nuget-config-file.md#packagesources).
+
+> [!NOTE]
+> Use package sources that you trust.
+
+For HTTP feeds, NuGet will make an unauthenticated request, and if the server responds with an HTTP 401 response, NuGet will search for credentials in the following order:
+
+1. [An environment variable `NuGetPackageSourceCredentials_{name}`](#credentials-in-environment-variables).
+1. [Credentials in *nuget.config* files](#credentials-in-nugetconfig-files).
+1. [Use a NuGet credential provider, if your package source provides one](#credential-providers).
+
+The credentials you need to use are determined by the package source.
+Therefore, unless you're using a credential provider, you should check with your package source for what credentials to use.
+It is very common for package sources to forbid you from using your password (that you log into the website with) with NuGet.
+Typically you need to create a Personal Access Token to use as NuGet's password, but you should check the documentation for the NuGet server you're using.
+Some package sources, such as Azure DevOps and GitHub, have scoped access tokens, so you may need to ensure that any tokens you create include the required scope.
+
+## Security best practices for managing credentials
+
+Although NuGet searches for credentials in the order mentioned above, we recommend the following sequence for securely managing credentials when authenticating with private feeds:
+
+1. **Credential Provider**: It is highly recommended to use a credential provider whenever possible.
+This approach avoids storing secrets in plain text and minimizes the risk of accidentally exposing secrets through source control.
+Moreover, it generally reduces the number of places you need to update when a credential expires or changes.
+If the credential provider supports single sign-on, it may decrease the frequency of logins or the number of places where credentials need to be saved.
+Refer to the [credential providers](#credential-providers) section for more information.
+
+1. **Encrypted Credentials in nuget.config**: If a credential provider is not available, you should consider using encrypted credentials.
+This approach provides an extra layer of security by storing the credentials in an encrypted format.
+For more information, refer to the section on [credentials in *nuget.config* files](#credentials-in-nugetconfig-files).
+
+ > [!NOTE]
+ > Be aware that encrypted passwords are only supported on Windows.
+ > Moreover, they can only be decrypted on the same machine and by the same user who originally encrypted them.
+
+1. **Using Environment Variable Macros in nuget.config**: If using encrypted credentials is not possible, consider storing the credentials in the *nuget.config* file with environment variable macros.
+This approach allows you to reference environment variables that contain the actual credentials.
+It enhances transparency and helps end users understand how their credentials are configured.
+For more information, refer to the section on [credentials in *nuget.config* files](#credentials-in-nugetconfig-files).
+
+1. **Using Environment Variables Directly**: As a fallback option, you can store the credentials directly in environment variables.
+However, be aware that this approach may offer less visibility and control compared to using environment variable macros in the *nuget.config* file.
+For more information, refer to the section on [credentials in environment variables](#credentials-in-environment-variables).
+
+1. **Clear Text Credentials in NuGet.Config**: It is highly recommended to use one of the previously mentioned options.
+If these options are not feasible, you can store the credentials in the *nuget.config* file.
+However, this option should only be used in environments where no other secure option is available.
+For more information, refer to the section on [credentials in *nuget.config* files](#credentials-in-nugetconfig-files).
+
+ > [!WARNING]
+ > Storing credentials in clear text in the *nuget.config* file, especially when saving the file in source control, is risky as it increases the chances of accidental credential leaks.
+ > If you must store credentials in the *nuget.config* file, consider using one of the more secure options mentioned above.
+
+By adhering to these best practices, you can securely authenticate private feeds while minimizing the risk of sensitive information exposure.
+
+## Credentials in environment variables
+
+NuGet will search for an environment variable named `NuGetPackageSourceCredentials_{name}`, where `{name}` is the value of `key="name"` in your *nuget.config* file's package source.
+The value of the environment variable must be `Username={username};Password={password}`, and may optionally include `;ValidAuthenticationTypes={types}`.
+If the environment variable doesn't match NuGet's convention, or the value doesn't meet NuGet's expected pattern, NuGet will silently ignore the environment variable, and continue searching for credentials for the package source elsewhere.
+There are no logs to signal that NuGet uses the credential from the environment variable, which can cause difficulties in debugging authentication problems if the environment variable contains an expired secret, and the new secret is added to a *nuget.config* file, since the config file has lower precedence.
+
+> [!TIP]
+> Using environment variables in CI/CD pipelines is an excellent choice to minimize the risk of secrets being captured in logs.
+
+For example, consider the following *nuget.config* file:
+
+```xml
+
+
+
+
+
+
+```
+
+In this case, the source name is `Contoso` and NuGet will look for the environment variable name `NuGetPackageSourceCredentials_Contoso`.
+Some platforms are case-sensitive, so take care about using the correct upper and lower case characters for the environment name and the source name, as defined in your *nuget.config* file.
+
+If the username is `nugetUser` and the password is `secret123`, the environment variable's value should be set to `Username=nugetUser;Password=secret123`.
+If NuGet should only use this credential for HTTP Basic authentication, but not other authentication schemes, you can set the environment variable's value to `Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic`.
+For more information about valid authentication types, see [the docs on package credentials in *nuget.config* files](../reference/nuget-config-file.md#packagesourcecredentials).
+
+> [!NOTE]
+> Environment variables have restrictions on allowed characters, and different operating systems may have different restrictions.
+> For example, spaces are not allowed.
+> Therefore, you use this environment variable feature to specify NuGet credentials for package sources that use any characters that are invalid for your platform's environment variables.
+> In such cases, you should rename the package source in your *nuget.config* file.
+
+## Credentials in *nuget.config* files
+
+*nuget.config* files can contain package source credentials.
+See [the *nuget.config* file reference doc section on package source credentials](../reference/nuget-config-file.md#packagesourcecredentials) for more information, including syntax.
+However, it's easier to use [`dotnet nuget update source`](/dotnet/core/tools/dotnet-nuget-update-source) on the command line to set the credentials.
+
+> [!WARNING]
+> Take care when setting credentials in *nuget.config* files, especially when saving the credential as plain text.
+> If the credential is written to a *nuget.config* file that is in source control, there is an increased risk of accidentally leaking the secret.
+>
+> As [NuGet accumulates settings from multiple files](../consume-packages/configuring-nuget-behavior.md), it is recommended to save credentials to your user *nuget.config* file.
+> We also recommend to save package sources in the solution (source code repository) *nuget.config* file, including a `` element, for build reliability.
+
+The username and plain text password in a *nuget.config* file can use an environment variable by adding `%` to the beginning and end of the environment variable name you would like to use.
+For more information, see [the *nuget.config* reference docs on using environment variables](../reference/nuget-config-file.md#using-environment-variables).
+
+## Credential providers
+
+NuGet has an extensibility model, allowing [plugins to provide NuGet credentials](../reference/extensibility/NuGet-Cross-Platform-Authentication-Plugin.md).
+The [path that credential providers must be installed](../reference/extensibility/NuGet-Cross-Platform-Plugins.md#plugin-installation-and-discovery), for NuGet to discover, is different for .NET Framework (NuGet.exe, MSBuild, and Visual Studio), and the .NET SDK (running on the .NET 5+ runtime).
+
+NuGet has a concept of being run in interactive mode or non-interactive mode.
+When in non-interactive mode, credential providers are asked not to block NuGet.
+While in interactive mode, the credential provider may prompt you to log in.
+Different tools have different defaults, so interactive mode may need to be opt-in or opt-out, depending on your scenario.
+
+|Tool|Default|Toggle|
+|--|--|--|
+|`dotnet` CLI|non-interactive|`--interactive` argument. For example, `dotnet restore --interactive`.|
+|MSBuild|non-interactive|`NuGetInteractive` MSBuild property. For example, `msbuild -t:restore -p:NuGetInteractive=true`.|
+|NuGet.exe|interactive|`-NonInteractive` argument. For example, `nuget.exe restore -NonInteractive`.|
+|Visual Studio|interactive|not possible to run in non-interactive mode.|
+
+[NuGet.exe supports both V1 and V2 credential providers](../reference/extensibility/nuget-exe-Credential-Providers.md), while MSBuild and the .NET SDK only support the cross platform (V2) plugins.
+
+In Visual Studio, NuGet has a [Visual Studio Credential Provider interface](../reference/extensibility/NuGet-Credential-Providers-for-Visual-Studio.md), which credential providers can use to provide a graphical login experience, or call Visual Studio APIs if necessary.
+NuGet in Visual Studio will fall back to the command line credential providers if it can't find a Visual Studio credential provider that handles the source.
+
+Visual Studio 2017 version 15.9, and above, includes a credential provider for [Azure Artifacts](/azure/devops/artifacts/), that works within Visual Studio, MSBuild, and NuGet.exe.
+However, the credential provider for the .NET SDK is not included by Visual Studio, so [must be installed separately](https://github.com/microsoft/artifacts-credprovider?tab=readme-ov-file#setup) to work with the `dotnet` CLI.
+
+### List of credential providers
+
+Here is a list of credential providers we are aware of:
+
+* [AWS CodeArtifact NuGet Credential Provider](https://docs.aws.amazon.com/codeartifact/latest/ug/nuget-cli.html#nuget-configure-cli)
+* [Azure Artifacts Credential Provider](https://github.com/microsoft/artifacts-credprovider). This link is just for the command line credential provider.
+* [MyGet Credential Provider for Visual Studio](http://docs.myget.org/docs/reference/credential-provider-for-visual-studio).
diff --git a/docs/consume-packages/includes/restore-dotnet-cli.md b/docs/consume-packages/includes/restore-dotnet-cli.md
new file mode 100644
index 000000000..6d3b8bd98
--- /dev/null
+++ b/docs/consume-packages/includes/restore-dotnet-cli.md
@@ -0,0 +1,9 @@
+The [dotnet restore](/dotnet/core/tools/dotnet-restore) command restores packages that the project file lists with ``. For more information, see [PackageReference in project files](../../consume-packages/package-references-in-project-files.md).
+
+.NET Core 2.0 and later `dotnet build` and `dotnet run` commands restore packages automatically. As of NuGet 4.0, `dotnet restore` runs the same code as `nuget restore`.
+
+To restore a package with `dotnet restore`:
+
+1. Open a command line and switch to the directory that contains your project file.
+1. Run `dotnet restore`.
+
diff --git a/docs/consume-packages/includes/restore-nuget-exe-cli.md b/docs/consume-packages/includes/restore-nuget-exe-cli.md
new file mode 100644
index 000000000..e3fd938b2
--- /dev/null
+++ b/docs/consume-packages/includes/restore-nuget-exe-cli.md
@@ -0,0 +1,21 @@
+The NuGet CLI [restore](../../reference/cli-reference/cli-ref-restore.md) command downloads and installs any missing packages. The command works on projects that use either [PackageReference](/nuget/consume-packages/package-references-in-project-files) or [packages.config](/nuget/reference/packages-config) for package references.
+
+Like `install`, the `restore` command only adds packages to disk, but doesn't modify the project file or *packages.config*. To add project dependencies, use the Visual Studio Package Manager UI or Console.
+
+To restore packages, run the following command:
+
+```cli
+nuget restore
+```
+
+The `restore` command uses a solution file or a *package.config* file in the specified project path.
+
+For example, to restore all packages for *MySolution.sln* in the current directory, run:
+
+```cli
+nuget restore MySolution.sln
+```
+
+> [!NOTE]
+> For non-SDK-style projects that use `PackageReference`, use [msbuild -t:restore](../package-restore.md#restore-using-msbuild) to restore packages instead.
+
diff --git a/docs/consume-packages/install-use-packages-dotnet-cli.md b/docs/consume-packages/install-use-packages-dotnet-cli.md
new file mode 100644
index 000000000..44e878149
--- /dev/null
+++ b/docs/consume-packages/install-use-packages-dotnet-cli.md
@@ -0,0 +1,96 @@
+---
+title: Install and manage NuGet packages with the dotnet CLI
+description: See how to use the dotnet CLI to install, list, remove, and update NuGet packages.
+author: mikejo5000
+ms.author: mikejo
+ms.date: 03/03/2025
+ms.topic: install-set-up-deploy
+---
+
+# Install and manage NuGet packages with the dotnet CLI
+
+You can use the dotnet CLI tool on Windows, macOS, or Linux to easily install, uninstall, and update NuGet packages in .NET projects and solutions. This article describes the most common dotnet CLI commands for managing NuGet packages.
+
+The dotnet CLI runs on .NET, .NET Core, .NET Standard SDK-style projects, and any other SDK-style projects, for example those that target .NET Framework. For more information, see [.NET project SDKs](/dotnet/core/project-sdk/overview).
+
+For most commands, the CLI tool looks for a project file in the current directory, unless a different project file is specified as an optional switch in the command. For a complete list of commands and their arguments, see [dotnet CLI commands](../reference/dotnet-commands.md).
+
+## Prerequisites
+
+- The [.NET Core SDK](https://www.microsoft.com/net/download/), which provides the `dotnet` command-line tool. Starting in Visual Studio 2017, the dotnet CLI automatically installs with all .NET and .NET Core related workloads.
+
+## Install or update a package
+
+The [dotnet add package](/dotnet/core/tools/dotnet-add-package) command adds a package reference to the project file, and then runs `dotnet restore` to install the package.
+
+1. Open a command line and switch to the directory that contains your project file.
+
+1. Use the following command to install a NuGet package:
+
+ ```dotnetcli
+ dotnet add package
+ ```
+
+ For example, to install the `Newtonsoft.Json` package, use the following command
+
+ ```dotnetcli
+ dotnet add package Newtonsoft.Json
+ ```
+
+1. After the command completes, you can open the project file to see the package reference.
+
+ For example, open the *.csproj* file to see the added `Newtonsoft.Json` package reference:
+
+ ```xml
+
+
+
+ ```
+
+## Install a specific version of a package
+
+The `dotnet add package` command installs the latest version of the package unless you specify a different version.
+
+To install a specific version of a NuGet package, use the optional `-v` or `--version` switch:
+
+```dotnetcli
+dotnet add package -v
+```
+
+For example, to add version 12.0.1 of the `Newtonsoft.Json` package, use this command:
+
+```dotnetcli
+dotnet add package Newtonsoft.Json --version 12.0.1
+```
+
+## List package references
+
+List the package references and versions for your project by using the [dotnet list package](/dotnet/core/tools/dotnet-list-package) command:
+
+```dotnetcli
+dotnet list package
+```
+
+## Remove a package
+
+Use the [dotnet remove package](/dotnet/core/tools/dotnet-remove-package) command to remove a package reference from the project file.
+
+```dotnetcli
+dotnet remove package
+```
+
+For example, to remove the `Newtonsoft.Json` package, use the following command:
+
+```dotnetcli
+dotnet remove package Newtonsoft.Json
+```
+
+## Restore packages
+
+[!INCLUDE [restore-dotnet-cli](includes/restore-dotnet-cli.md)]
+
+## Next steps
+
+- [.NET CLI overview](/dotnet/core/tools)
+- [Install and manage packages in Visual Studio using the NuGet Package Manager](install-use-packages-visual-studio.md)
+- [Install and manage packages with the Package Manager Console](install-use-packages-powershell.md)
diff --git a/docs/consume-packages/install-use-packages-nuget-cli.md b/docs/consume-packages/install-use-packages-nuget-cli.md
new file mode 100644
index 000000000..3b6639dc4
--- /dev/null
+++ b/docs/consume-packages/install-use-packages-nuget-cli.md
@@ -0,0 +1,123 @@
+---
+title: Manage NuGet packages with the NuGet CLI
+description: Instructions for using the NuGet CLI, nuget.exe, to manage NuGet packages.
+author: mikejo5000
+ms.author: mikejo
+ms.date: 03/03/2025
+ms.topic: how-to
+---
+
+# Manage NuGet packages with the NuGet CLI
+
+You can use the `nuget.exe` CLI tool to manage NuGet packages in Visual Studio projects and solutions. This article describes the most common NuGet CLI commands for managing NuGet packages. All these commands work on Windows, and most work on Mac and on Linux with Mono.
+
+The NuGet CLI runs on .NET Framework and non-SDK-style projects, for example non-SDK style projects that target .NET Standard libraries. The NuGet CLI commands can use a project [packages.config](../reference/packages-config.md) file that lists package references. For non-SDK-style projects that use `PackageReference` instead of *packages.config* for package references, use the [dotnet CLI](install-use-packages-dotnet-cli.md) instead.
+
+> [!NOTE]
+> For most non-SDK-style projects that use *packages.config*, it's best to [migrate packages.config to PackageReference](migrate-packages-config-to-package-reference.md), and then use the dotnet CLI instead of the NuGet CLI to manage packages. However, you can't migrate C++ or ASP.NET projects.
+
+For most commands, the NuGet CLI tool uses the current directory, unless you specify a different location in the command. To run NuGet CLI commands, open a command line and switch to the directory that contains your project file.
+
+For a complete list of commands and their arguments, see the [NuGet CLI reference](../reference/nuget-exe-cli-reference.md).
+
+## Prerequisites
+
+Download the NuGet CLI from [nuget.org](https://dist.nuget.org/win-x86-commandline/latest/nuget.exe). Save the *nuget.exe* file to a suitable directory, and make sure the directory is in your PATH environment variable.
+
+> [!NOTE]
+> You can also use the [winget](/windows/package-manager/winget) tool for Windows or [Homebrew](https://brew.sh/) for macOS.
+
+To find out your NuGet CLI version, open a command line and run `nuget help`, or to avoid having to scroll up, use `nuget help | more`. The first line in the help output shows the version.
+
+## Install a package
+
+The NuGet CLI [install](../reference/cli-reference/cli-ref-install.md) command downloads and installs specified NuGet packages.
+
+> [!IMPORTANT]
+> The `install` command doesn't modify the project file or *packages.config* file. The `install` and `restore` commands only add packages to disk, but don't add dependencies to projects. To add project dependencies, add packages through the [Visual Studio Package Manager UI](install-use-packages-visual-studio.md) or [Package Manager Console](install-use-packages-powershell.md), then run `install` or `restore`.
+
+Use the `-OutputDirectory` option to install packages to a specific directory. If you don't specify an output directory, `install` uses the current directory.
+
+```cli
+nuget install -OutputDirectory
+```
+
+For example, to install the `Newtonsoft.json` package to the *packages* subdirectory, use the following command:
+
+```cli
+nuget install Newtonsoft.Json -OutputDirectory packages
+```
+
+Instead of specifying a package to install, you can specify an existing *packages.config* file in the current or another directory. The `install` command installs all the packages listed in the *packages.config* file.
+
+```cli
+nuget install packages.config
+```
+
+For example, the following command installs all the packages listed in *packages.config* in the *config* subdirectory to the *packages* subdirectory:
+
+```cli
+nuget install config\packages.config -OutputDirectory packages
+
+```
+
+## Install a specific version of a package
+
+The `install` command installs the latest version of a package unless you specify a different version. To install a specific version of a package, use the `-Version` option:
+
+```cli
+nuget install -Version
+```
+
+For example, to install version 12.0.1 of the `Newtonsoft.json` package, use:
+
+```cli
+nuget install Newtonsoft.Json -Version 12.0.1
+```
+
+## List packages
+
+Use the [list](../reference/cli-reference/cli-ref-list.md) command to display a list of packages installed in the packages folders. Use the `-Source` option to restrict the list.
+
+```cli
+nuget list -Source
+```
+
+For example, to list packages in the *packages* subdirectory of *MyProject*, use:
+
+```cli
+nuget list -Source C:\Users\%USERNAME%\source\repos\MyProject\packages
+```
+
+You can also use a search term to search for package names, tags, or descriptions:
+
+```cli
+nuget list <"search term"> -Source
+```
+
+## Update all packages
+
+Use the [update](../reference/cli-reference/cli-ref-update.md) command to update all packages in a project *packages.config* file to their latest available versions. It's best to run `restore` before you run `update`.
+
+```cli
+nuget update
+```
+
+## Remove a package
+
+To remove a package, delete that package from the project folder. To reinstall packages, use the `restore` or `install` commands.
+
+Deleting packages from disk doesn't update the project, *packages.config*, or *NuGet.Config* files. The best way to remove packages is through the Visual Studio [Package Manager UI](install-use-packages-visual-studio.md) or [Package Manager Console](install-use-packages-powershell.md).
+
+## Restore packages
+
+[!INCLUDE [restore-nuget-exe-cli](includes/restore-nuget-exe-cli.md)]
+
+For more information, see [Restore packages](package-restore.md).
+
+## Next steps
+
+- [NuGet CLI reference](../reference/nuget-exe-cli-reference.md)
+- [Install and manage packages in Visual Studio using the NuGet Package Manager](install-use-packages-visual-studio.md)
+- [Migrate from packages.config to PackageReference](migrate-packages-config-to-package-reference.md)
+- [Manage packages with the dotnet CLI](install-use-packages-dotnet-cli.md)
diff --git a/docs/consume-packages/install-use-packages-powershell.md b/docs/consume-packages/install-use-packages-powershell.md
new file mode 100644
index 000000000..0e7881326
--- /dev/null
+++ b/docs/consume-packages/install-use-packages-powershell.md
@@ -0,0 +1,205 @@
+---
+title: Manage NuGet packages with the Visual Studio Package Manager Console
+description: See how to work with NuGet packages by using PowerShell commands in the Visual Studio Package Manager Console.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/03/2025
+ms.topic: how-to
+f1_keywords:
+ - "vs.nuget.packagemanager.console"
+---
+
+# Manage packages with the Visual Studio Package Manager Console (PowerShell)
+
+The Package Manager Console in Visual Studio uses PowerShell commands to interact with NuGet packages. You can use the console when there's no way to do an operation through the [Package Manager UI](install-use-packages-visual-studio.md). You can also use [dotnet CLI](../reference/dotnet-commands.md) or [NuGet CLI](#use-the-nugetexe-cli-in-the-console) commands in the console.
+
+This article describes how to find, install, update, and uninstall NuGet packages with PowerShell commands in the Package Manager Console. For the complete Package Manager Console PowerShell command reference, see [PowerShell reference](../reference/powershell-reference.md).
+
+> [!IMPORTANT]
+> The PowerShell commands and arguments in this article are specific to the Visual Studio Package Manager Console. These commands differ from the [PackageManagement module commands](/powershell/module/packagemanagement) you can use in a general PowerShell environment. Each environment has commands that aren't available in the other, and commands with the same name might differ in their specific arguments.
+
+## Console availability
+
+Starting in Visual Studio 2017, NuGet and the NuGet Package Manager install automatically when you create any .NET-related workloads in Visual Studio. You can also install the Package Manager by selecting **Individual components** > **Code tools** > **NuGet package manager** in the Visual Studio Installer.
+
+You can also search for the NuGet Package Manager extension under the **Tools** > **Extensions and Updates** or **Extensions** menus. If you're unable to use the extensions installer in Visual Studio, you can download the extension directly from [https://dist.nuget.org/index.html](https://dist.nuget.org/index.html).
+
+The Package Manager Console is built into the Package Manager for Visual Studio on Windows. Visual Studio Code and Visual Studio for Mac don't include the console. Visual Studio for Mac has a UI for managing NuGet packages, and the equivalent console commands are available through the [NuGet CLI](../reference/nuget-exe-CLI-reference.md). For more information, see [Install and manage NuGet packages in Visual Studio for Mac](/visualstudio/mac/nuget-walkthrough).
+
+## Quickly find and install a package
+
+To use the Package Manager Console to quickly find and install a package:
+
+1. Open your project or solution in Visual Studio, and select **Tools** > **NuGet Package Manager** > **Package Manager Console** to open the Package Manager Console window.
+
+1. In the console, enter `Find-Package` with a keyword to find the package you want to install. For example, to find packages that contain the keyword `elmah`, run the following command. If you already know the package name you want, skip this step.
+
+ ```powershell
+ Find-Package elmah
+ ```
+
+1. Once you find the name, use the `Install-Package` command to install the package. For example, to install the `Elmah.MVC` package, enter:
+
+ ```powershell
+ Install-Package Elmah.MVC
+ ```
+
+For more details about these commands, see the [Find a package](#find-a-package) and [Install a package](#install-a-package) sections.
+
+> [!Tip]
+> Many console operations depend on having a solution with a known path name open in Visual Studio. If you have an unsaved solution, or no solution, you see the error **Solution is not opened or not saved. Please ensure you have an open and saved solution.** To correct the error, create and save a solution, or save an unsaved solution.
+
+## Console controls
+
+To open the Package Manager Console in Visual Studio, select **Tools** > **NuGet Package Manager** > **Package Manager Console** from the top menu. The console is a Visual Studio window that you can arrange and position as you like. For more information, see [Customize window layouts in Visual Studio](/visualstudio/ide/customizing-window-layouts-in-visual-studio).
+
+By default, console commands operate against the specific package source and project shown in the controls at the top of the window:
+
+:::image type="content" source="media/PackageManagerConsoleControls1.png" alt-text="Screenshot that shows the Package Manager Console controls for package source and project.":::
+
+Selecting a different package source or project changes the defaults for subsequent commands. To override these settings for single commands without changing the defaults, most console commands support `-Source` and `-ProjectName` options.
+
+To manage package sources, select the gear icon, which opens the **Tools** > **Options** > **NuGet Package Manager** > **Package Sources** dialog box. The control next to the project selector clears the console's contents.
+
+:::image type="content" source="media/PackageManagerConsoleControls2.png" alt-text="Screenshot that shows the Package Manager Console settings and clear controls.":::
+
+The button on the far right interrupts a long-running command. For example, running `Get-Package -ListAvailable -PageSize 500` lists the top 500 available packages on the default source, such as nuget.org, which could take several minutes.
+
+:::image type="content" source="media/PackageManagerConsoleControls3.png" alt-text="Screenshot that shows the Package Manager Console stop control.":::
+
+## Find a package
+
+To find a package in the default source, use [Find-Package](../reference/ps-reference/ps-ref-find-package.md).
+
+- To find and list packages that contain certain keywords:
+
+ ```powershell
+ Find-Package
+ Find-Package
+ ```
+
+- To find and list packages whose name begins with a string:
+
+ ```powershell
+ Find-Package -StartWith
+ ```
+
+- By default, `Find-Package` returns a list of 20 packages. Use `-First` to show more packages. For example, to show the first 100 packages, use:
+
+ ```powershell
+ Find-Package -First 100
+ ```
+
+- To list all versions of a certain package:
+
+ ```powershell
+ Find-Package -AllVersions -ExactMatch
+ ```
+
+## Install a package
+
+To install a package into the default project, use `Install-Package `. The [Install-Package](../reference/ps-reference/ps-ref-install-package.md) console command takes the following actions:
+
+- Does the steps in [What happens when a NuGet package is installed](../concepts/package-installation-process.md).
+- Displays applicable license terms in the console window with implied agreement. If you don't agree to the terms, you should uninstall the package.
+- Adds a reference to the package in the project file and in **Solution Explorer** under the **References** node. You must save the project before you can see the changes in the project file.
+
+By default, `Install-Package` adds the package to the default project the console window specifies. To add the package to a project that isn't the default, use the `-ProjectName` option. For example, to add the `Elmah.MVC` package to the non-default `UtilitiesLib` project, run the following command:
+
+```powershell
+Install-Package Elmah.MVC -ProjectName UtilitiesLib
+```
+
+## Uninstall a package
+
+To uninstall a package from the default project, use `Uninstall-Package `. If you need to find the package name, use [Get-Package](../reference/ps-reference/ps-ref-get-package.md) to see all packages installed in the default project.
+
+[Uninstall-Package](../reference/ps-reference/ps-ref-uninstall-package.md) takes the following actions:
+
+- Removes references to the package from the project and any management formats. References no longer appear in **Solution Explorer**. You might need to rebuild the project to remove the reference in the *bin* folder.
+- Reverses any changes that installing the package made to *app.config* or *web.config*.
+- Removes previously-installed dependencies if no remaining packages use those dependencies.
+
+To uninstall a package and all its unused dependencies, run:
+
+```powershell
+Uninstall-Package -RemoveDependencies
+```
+
+To uninstall a package even if other packages depend on it, run:
+
+```powershell
+Uninstall-Package -Force
+```
+
+## Update a package
+
+To update a package, use [Get-Package](../reference/ps-reference/ps-ref-get-package.md) and [Update-Package](../reference/ps-reference/ps-ref-update-package.md). You can run the following commands:
+
+- To check if there are newer versions available for any installed packages:
+
+ ```powershell
+ Get-Package -updates
+ ```
+
+- To update a specific package:
+
+ ```powershell
+ Update-Package
+ ```
+
+- To update all packages in a project:
+
+ ```powershell
+ Update-Package -ProjectName
+ ```
+
+- To update all packages in the solution:
+
+ ```powershell
+ Update-Package
+ ```
+
+
+## Use the NuGet CLI in the console
+
+You can also do most console operations with the [NuGet CLI](../reference/nuget-exe-cli-reference.md). However, the PowerShell console commands operate within the context of Visual Studio saved project and solution, and often do more than their equivalent NuGet CLI commands. For example, installing a package through `Install-Package` adds a reference to the project file, but the NuGet CLI command doesn't. For this reason, developers working in Visual Studio typically prefer to use the console commands rather than the NuGet CLI.
+
+To use NuGet CLI commands in the Package Manager Console, install the [NuGet.CommandLine](https://www.nuget.org/packages/NuGet.CommandLine) package.
+
+```powershell
+Install-Package NuGet.CommandLine
+```
+
+The preceding command installs the latest version of the NuGet CLI. To install a specific version, use the `-Version` option. For example, to install Version 4.4.1, enter:
+
+```powershell
+Install-Package NuGet.CommandLine -Version 4.4.1
+```
+
+After you install the `NuGet.CommandLine` package, you can run all NuGet CLI commands through the Package Manager Console.
+
+## Extend the Package Manager Console
+
+Some packages install new commands for the console. For example, `MvcScaffolding` creates commands like `Scaffold`, which generates ASP.NET MVC controllers and views:
+
+:::image type="content" source="media/PackageManagerConsoleInstall.png" alt-text="Screenshot that shows NuGet CLI commands available after installing the NuGet.CommandLine package.":::
+
+## Set up a NuGet PowerShell profile
+
+You can create a PowerShell profile to make your commonly-used commands available in all PowerShell contexts, so you don't lose your PowerShell settings between sessions. NuGet supports a NuGet-specific profile, usually at *%UserProfile%\Documents\WindowsPowerShell\NuGet_profile.ps1*.
+
+To find your user profile location, enter `$profile` in the console:
+
+```powershell
+$profile
+C:\Users\\Documents\WindowsPowerShell\NuGet_profile.ps1
+```
+
+To determine whether a profile exists at that location, enter `test-path $profile`. If the command returns `False`, you need to create the profile with the specified name at that location. For more information, see [Windows PowerShell Profiles](/previous-versions//bb613488(v=vs.85)).
+
+## Next steps
+
+- [Install and manage NuGet packages with the dotnet CLI](install-use-packages-dotnet-cli.md)
+- [Manage packages using the nuget.exe CLI](install-use-packages-nuget-cli.md)
+- [Install and manage packages in Visual Studio using the NuGet Package Manager](install-use-packages-visual-studio.md)
diff --git a/docs/consume-packages/install-use-packages-visual-studio.md b/docs/consume-packages/install-use-packages-visual-studio.md
new file mode 100644
index 000000000..db1eb5d54
--- /dev/null
+++ b/docs/consume-packages/install-use-packages-visual-studio.md
@@ -0,0 +1,191 @@
+---
+title: Install and manage packages in Visual Studio using the NuGet Package Manager
+description: Learn how to use the NuGet Package Manager UI in Visual Studio for working with NuGet packages.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/03/2025
+ms.topic: install-set-up-deploy
+f1_keywords:
+ - "vs.nuget.packagemanager.ui"
+---
+
+# Install and manage packages in Visual Studio using the NuGet Package Manager
+
+The NuGet Package Manager UI in Microsoft Visual Studio for Windows allows you to easily install, uninstall, and update NuGet packages in projects and solutions.
+
+The article is for Windows users only. If you're using Visual Studio for Mac, see [Including a NuGet package in your project](/visualstudio/mac/nuget-walkthrough?toc=/nuget/toc.json).
+
+## Prerequisites
+
+- Install Visual Studio 2022 for Windows with any .NET-related workload.
+
+ You can install the 2022 Community edition for free from [visualstudio.microsoft.com](https://visualstudio.microsoft.com/), or use the Professional or Enterprise edition.
+
+ Visual Studio 2017 and higher automatically includes NuGet Package Manager when a .NET-related workload is installed. To install it individually in Visual Studio Installer, select the **Individual components** tab, and then select **NuGet package manager** under **Code tools** .
+
+ For Visual Studio 2015, if you're missing the NuGet Package Manager, check **Tools** > **Extensions and Updates** and search for the *NuGet Package Manager* extension. If you're unable to use the extensions installer in Visual Studio, download the extension directly from [https://dist.nuget.org/index.html](https://dist.nuget.org/index.html).
+
+- [Register for a free account on nuget.org](../nuget-org/individual-accounts.md#add-a-new-individual-account) if you don't have one already. You must register and confirm the account before you can upload a NuGet package.
+
+## Find and install a package
+
+To find and install a NuGet package with Visual Studio, follow these steps:
+
+1. Load a project in **Solution Explorer**, and then select **Project** > **Manage NuGet Packages**.
+
+ The **NuGet Package Manager** window opens.
+
+1. Select the **Browse** tab to display packages by popularity from the currently selected source (see [Package sources](#package-sources)).
+
+ - To search for a specific package, use the search box on the upper left.
+ - Abbreviated information may be shown beside each package ID to help identify the correct package, and varies based on the selected package source(s).
+ Examples include package download count, author, or owner profile hyperlinks.
+
+ > [!Note]
+ > In Visual Studio 17.11 and higher, package owners are shown as profile hyperlinks when supported by the selected package source.
+ > Package ownership is defined by the package source. For example, see [Manage package owners on nuget.org](../nuget-org/publish-a-package.md#manage-package-owners-on-nugetorg).
+ >
+ > In Visual Studio 17.10 and earlier, the package *author* metadata is shown, which appears as plain-text.
+ > For more information, see [Authors package metadata](../create-packages/package-authoring-best-practices.md#authors).
+
+ - Select a package to see detailed package information.
+ The details pane on the right appears and enables you to select a version to install.
+ 
+ You can see package metadata, information about the owner(s), author(s), license, etc., in the Package Details tab and the package README file (if it is provided by the package author) in the README tab.
+ 
+
+1. In the right pane, select a **Version** from the dropdown list. If you want to include prerelease versions in the **Version** list, select **Include prerelease**.
+
+1. To install the NuGet package, select **Install**. You might be asked to accept license terms or prompted to verify the installation.
+
+ Visual Studio installs the package and its dependencies in the project. When installation is complete, the added packages appear on the **Installed** tab. You can also find packages in the **Dependencies** > **Packages** node of your project in **Solution Explorer**. After you install a package, you can refer to it in the project with a `using` statement.
+
+1. (Optional) NuGet has two formats in which a project can use packages: [PackageReference](package-references-in-project-files.md) and [packages.config](../reference/packages-config.md). To set the default format, select **Tools** > **Options**, expand **NuGet Package Manager**, select **General**, and then choose the **Default package management format**. For more information, see [Choose default package management format](package-restore.md#choose-default-package-management-format).
+
+## Uninstall a package
+
+To uninstall a NuGet package, follow these steps:
+
+1. Load a project in **Solution Explorer**, select **Project** > **Manage NuGet Packages**, and then select the **Installed** tab.
+
+1. Select the package to uninstall in the left pane (use the **Search** box to find it, if necessary), and then select **Uninstall** from the right pane.
+
+ 
+
+## Update a package
+
+To update a NuGet package, follow these steps:
+
+1. Load a project in **Solution Explorer**, and then select **Project** > **Manage NuGet Packages**. For website projects, select the **Bin** folder first.
+
+1. Select the **Updates** tab to see packages that have available updates from the selected **Package source**. Select **Include prerelease** to include prerelease packages in the update list.
+
+1. Select the package to update. On the right pane, select the desired **Version** from the dropdown list, and then select **Update**.
+
+ 
+
+1. For some packages, the **Update** button is disabled and the following message appears: *Implicitly referenced by an SDK. To update the package, update the SDK to which it belongs.* This message indicates that the package is part of a larger framework or SDK and can't be updated independently. Such packages are internally marked with `True`. For example, `Microsoft.NETCore.App` is part of the .NET Core SDK, and the package version is different than the version of the runtime framework used by the application. To download a new version of the .NET Core, [update your .NET Core installation](https://aka.ms/dotnet-download). For more information, see [.NET Core metapackages and versioning](/dotnet/core/packages). This scenario applies to the following commonly used packages:
+ - Microsoft.AspNetCore.All
+ - Microsoft.AspNetCore.App
+ - Microsoft.NETCore.App
+ - NETStandard.Library
+
+ 
+
+1. To update multiple packages to their latest versions, choose them in the NuGet package list, and then select **Update**.
+
+1. You can also update an individual package from the **Installed** tab. For this case, you can also select a **Version** and the **Include prerelease** option.
+
+## Manage packages for the solution
+
+Managing packages for a solution is a convenient means to work with multiple projects simultaneously:
+
+1. Select a solution in **Solution Manager**, and then select **Tools** > **NuGet Package Manager** > **Manage NuGet Packages for Solution**.
+
+1. In the **Manage NuGet Packages for Solution** window, select the projects that are affected by the operations.
+
+ 
+
+### Consolidate tab
+
+Developers typically consider it bad practice to use different versions of the same NuGet package across different projects in the same solution. Visual Studio allows you to use a common version for your NuGet packages. To do so, use the **Consolidate** tab of the **NuGet Package Manager** window to discover where packages with distinct version numbers are used by different projects in the solution.
+
+
+
+In this example, the ClassLibrary1 project is using EntityFramework 6.2.0, whereas ConsoleApp1 is using EntityFramework 6.1.0. To consolidate package versions, follow these steps:
+
+1. From the **Consolidate** tab, select the projects to update in the project list.
+
+1. Select the version to use for all these projects in the **Version** list.
+
+1. Select **Install**.
+
+ The NuGet Package Manager installs the selected package version into all the selected projects, after which the package no longer appears on the **Consolidate** tab.
+
+## Package sources
+
+Visual Studio ignores the order of package sources, and uses the package from whichever source is the first to respond to a request. For more information, see [Restore packages](package-restore.md). For information about how to load a package from a specific source, see [Package source mapping](package-source-mapping.md).
+
+1. To change the source from which Visual Studio loads package metadata, select a source from the **Package source** selector.
+
+ 
+
+1. To manage your package sources, select the **Settings** icon or select **Tools** > **Options**.
+
+ 
+
+1. To manage NuGet package sources, see [NuGet Options in Visual Studio](nuget-visual-studio-options.md#package-sources).
+
+## NuGet Package Manager Options control
+
+When you select a package, the NuGet Package Manager displays an expandable **Options** control below the **Version** selector. For most project types, only the **Show preview window** option is provided.
+
+
+
+The following sections explain the available options.
+
+
+
+
+### Install and update options
+
+These options are available only for certain project types:
+
+- **Dependency behavior**: This option configures how NuGet decides which versions of dependent packages to install. It has the following settings:
+
+ - **Ignore dependencies** skips the installation of dependencies, which typically breaks the package being installed.
+ - **Lowest** [Default] installs the dependency with the minimal version number that meets the requirements of the primary chosen package.
+ - **Highest Patch** installs the version with the same major and minor version numbers, but the highest patch number. For example, if version 1.2.2 is specified then the highest version that starts with 1.2 will be installed
+ - **Highest Minor** installs the version with the same major version number but the highest minor number and patch number. If version 1.2.2 is specified, then the highest version that starts with 1 will be installed
+ - **Highest** installs the highest available version of the package.
+
+- **File conflict action**: This option specifies how NuGet should handle packages that already exist in the project or local machine. It has the following settings:
+
+ - **Prompt** instructs NuGet to ask whether to keep or overwrite existing packages.
+ - **Ignore All** instructs NuGet to skip overwriting any existing packages.
+ - **Overwrite All** instructs NuGet to overwrite any existing packages.
+
+
+
+
+### Uninstall options
+
+These options are available only for certain project types:
+
+- **Remove dependencies**: When selected, removes any dependent packages if they're not referenced elsewhere in the project.
+
+- **Force uninstall even if there are dependencies on it**: When selected, uninstalls a package even if it's still being referenced in the project. This option is typically used in combination with **Remove dependencies** to remove a package and whatever dependencies it installed. Using this option may, however, lead to broken references in the project. In such a case, you might need to [reinstall those other packages](../consume-packages/reinstalling-and-updating-packages.md).
+
+## Related video
+
+- Find NuGet videos on [Channel 9](/shows/nuget-101/) and [YouTube](https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVLvfkFk8O9h6v2Dcdh2bh_).
+
+## See also
+
+For more information about NuGet, see the following articles:
+
+- [What is NuGet?](../what-is-nuget.md)
+- [Package consumption workflow](overview-and-workflow.md)
+- [Find and choose packages](finding-and-choosing-packages.md)
+- [Package references in project files](package-references-in-project-files.md)
+- [Install and use a package using the .NET CLI](../quickstart/install-and-use-a-package-using-the-dotnet-cli.md).
diff --git a/docs/consume-packages/installing-signed-packages.md b/docs/consume-packages/installing-signed-packages.md
new file mode 100644
index 000000000..ad5e83f29
--- /dev/null
+++ b/docs/consume-packages/installing-signed-packages.md
@@ -0,0 +1,102 @@
+---
+title: Manage package trust boundaries
+description: Describes the process of installing signed NuGet packages and configuring package signature trust settings.
+author: JonDouglas
+ms.author: jodou
+ms.date: 11/29/2018
+ms.topic: install-set-up-deploy
+---
+
+# Manage package trust boundaries
+
+Signed packages don't require any specific action to be installed; however, if the content has been modified since it was signed, the installation is blocked with error [NU3008](../reference/errors-and-warnings/NU3008.md).
+
+> [!Warning]
+> Packages signed with untrusted certificates are considered as unsigned and are installed without any warnings or errors like any other unsigned package.
+
+## Configure package signature requirements
+
+> [!Note]
+> Requires NuGet 4.9.0+ and Visual Studio version 15.9 and later on Windows
+
+You can configure how NuGet clients validate package signatures by setting the `signatureValidationMode` to `require` in the [nuget.config](../reference/nuget-config-file.md) file using the [`nuget config`](../reference/cli-reference/cli-ref-config.md) command.
+
+```cmd
+nuget.exe config -set signatureValidationMode=require
+```
+
+```xml
+
+
+
+```
+
+This mode will verify that all packages are signed by any of the certificates trusted in the `nuget.config` file. This file allows you to specify which authors and/or repositories are trusted based on the certificate's fingerprint.
+
+### Trust package author
+
+To trust packages based on the author signature use the [`trusted-signers`](../reference/cli-reference/cli-ref-trusted-signers.md) command to set the `author` property in the nuget.config.
+
+```cmd
+nuget.exe trusted-signers Add -Name MyCompanyCert -CertificateFingerprint CE40881FF5F0AD3E58965DA20A9F571EF1651A56933748E1BF1C99E537C4E039 -FingerprintAlgorithm SHA256
+```
+
+```xml
+
+
+
+
+
+```
+
+>[!TIP]
+>Use the `nuget.exe` [verify command](../reference/cli-reference/cli-ref-verify.md) to get the `SHA256` value of the certificate's fingerprint.
+
+
+### Trust all packages from a repository
+
+To trust packages based on the repository signature use the `repository` element:
+
+```xml
+
+
+
+
+
+```
+
+### Trust Package Owners
+
+Repository signatures include additional metadata to determine the owners of the package at the time of submission. You can restrict packages from a repository based on a list of owners:
+
+```xml
+
+
+
+ microsoft;nuget
+
+
+```
+
+If a package has multiple owners, and any one of those owners is in the trusted list, the package installation will succeed.
+
+### Untrusted Root certificates
+
+In some situations you may want to enable verification using certificates that do not chain to a trusted root in the local machine. You can use the `allowUntrustedRoot` attribute to customize this behavior.
+
+### Sync repository certificates
+
+Package repositories should announce the certificates they use in their [service index](../api/service-index.md). Eventually the repository will update these certificates, e.g. when the certificate expires. When that happens, clients with specific policies will require an update to the configuration to include the newly added certificate. You can easily upgrade the trusted signers associated to a repository by using the `nuget.exe` [trusted-signers sync command](../reference/cli-reference/cli-ref-trusted-signers.md#nuget-trusted-signers-sync--name-name).
+
+### Schema reference
+
+The complete schema reference for the client policies can be found in the [nuget.config reference](../reference/nuget-config-file.md#trustedsigners-section)
+
+## Related articles
+
+- [Signing NuGet Packages](../create-packages/Sign-a-Package.md)
+- [Signed Packages Reference](../reference/Signed-Packages-Reference.md)
diff --git a/docs/consume-packages/managing-the-global-packages-and-cache-folders.md b/docs/consume-packages/managing-the-global-packages-and-cache-folders.md
new file mode 100644
index 000000000..faac424cd
--- /dev/null
+++ b/docs/consume-packages/managing-the-global-packages-and-cache-folders.md
@@ -0,0 +1,189 @@
+---
+title: How to manage the global packages, cache, temp folders in NuGet
+description: How to manage the global package installation folder, the package cache, and the temp folders that exist on a computer, which are used when installing, restoring, and updating packages.
+author: JonDouglas
+ms.author: jodou
+ms.date: 03/19/2018
+ms.topic: how-to
+---
+
+# Managing the global packages, cache, and temp folders
+
+Whenever you install, update, or restore a package, NuGet manages packages and package information in several folders outside of your project structure:
+
+| Name | Location |
+| --- | --- |
+| [global-packages](#global-packages) |
Windows: `%userprofile%\.nuget\packages`
Mac/Linux: `~/.nuget/packages`
Override using the NUGET_PACKAGES environment variable, the `globalPackagesFolder` or `repositoryPath` [configuration settings](../reference/nuget-config-file.md#config-section) (when using PackageReference and `packages.config`, respectively), or the `RestorePackagesPath` MSBuild property (MSBuild only). The environment variable takes precedence over the configuration setting.
|
+| [http-cache](#http-cache) |
Windows: `%localappdata%\NuGet\v3-cache`
Mac/Linux: `~/.local/share/NuGet/v3-cache`
Override using the NUGET_HTTP_CACHE_PATH environment variable.
|
+| [temp](#temp) |
Windows: `%temp%\NuGetScratch`
Mac: `/tmp/NuGetScratch`
Linux: `/tmp/NuGetScratch`
Override using the NUGET_SCRATCH environment variable.
|
+| [plugins-cache](#plugin-cache) **4.8+** |
Windows: `%localappdata%\NuGet\plugins-cache`
Mac/Linux: `~/.local/share/NuGet/plugins-cache`
Override using the NUGET_PLUGINS_CACHE_PATH environment variable.