├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── BUG.yml │ ├── DCR.yml │ ├── DOCS.yml │ ├── FEATURE.yml │ └── config.yml ├── policies │ └── resourceManagement.yml └── workflows │ └── icebox-watcher.yml ├── .gitignore ├── CODE-OF-CONDUCT.md ├── CONTRIBUTING.md ├── Issue-Triage-Policy.md ├── LICENSE.txt ├── Privacy-Policy.md ├── README.md ├── SECURITY.md ├── Terms-Of-Use.md ├── accepted ├── 2020 │ ├── CentralNuGetManagement │ │ ├── CentrallyManagingNuGetPackageVersions-Restore.md │ │ └── CentrallyManagingNuGetPackageVersions.md │ ├── ClientDevProcess.md │ ├── MachineReadableOutputDotNetListPackage.md │ ├── PackageVulnerability │ │ ├── DotnetListPackageVulnerable.md │ │ ├── FlagVulnerablePackages.md │ │ ├── NuGet.orgVulnerabilitiesPhase1.md │ │ └── PMUIVulnerability.md │ ├── SupportPackageRenames.md │ └── Transitive-Dependencies.md ├── 2021 │ ├── BulkRestoreCoordination.md │ ├── CentralPackageManagementTransitive.md │ ├── DotnetNugetTrustedSigners.md │ ├── NuGet-CPPCLI-Support.md │ ├── NuGet.orgTFMs.md │ ├── NuGetConsumePDBInPackageReference.md │ ├── NuGetOrgDetailsPageRedesign.md │ ├── NuGetOrgReportForm-SafetyChanges.md │ ├── NuGetOrgTFMDropdownBadges.md │ ├── NukeInstallationsInstructions.md │ ├── PackageSourceMapping.md │ ├── ProjectBoards.md │ ├── ProjectUpdateEventsInVisualStudio.md │ ├── Screen Shot 2021-05-12 at 10.27.01 AM.png │ ├── Screen Shot 2021-05-12 at 10.27.10 AM.png │ ├── ShowVulnerabilitiesInThePMUI.md │ ├── TransitiveDependenciesInPMUI.md │ ├── VSdeprecationfeature.md │ ├── Verify-Verbosity.md │ ├── VulnerabilityInfoInPMUI.md │ └── meta │ │ └── resources │ │ ├── NuGetPackageDetails │ │ └── sidebar_final.png │ │ └── NuGetReportFormRedesign │ │ └── ExistingForm.png ├── 2022 │ ├── AssetTargetFallback-DependenciesResolution.md │ ├── DotnetListPackageMachineReadableJsonOutput.md │ ├── NuGetExeWarnWhenSDKProjectsGetPacked.md │ ├── TargetFrameworkAndPlatformsFilters.md │ ├── WarningsNotAsErrors.md │ ├── cpm-dotnet-cli-add-package-support.md │ ├── dotnet-nuget-config-spec.md │ ├── dotnet-nuget-why-proposal.md │ ├── duplicate-nuget-item-error-handling.md │ ├── globalpackagereference.md │ ├── version-overrides.md │ └── vulnerabilities-in-restore.md ├── 2023 │ ├── Add-NoHttpCacheOption.md │ ├── Add-dotnet-search.md │ ├── InsecureConnectionsDisableCertificateValidation.md │ ├── NuGetAudit-supress-advisory.md │ ├── NuGetAudit-without-nuget.org-as-packageSource.md │ ├── PMUI-Readme-rendering.md │ ├── dotnet-nuget-setapikey.md │ ├── readme-markdown-install-PMUI.md │ ├── remove-projects-from-list-package-command.md │ └── vscode-commands.md ├── 2024 │ ├── Dotnet-list-package-vulnerable-uses-auditsources.md │ ├── PMUI-Readme-rendering.md │ ├── images │ │ ├── trusted-signing-azure.png │ │ ├── trusted-signing-durable-identity-value-link.png │ │ ├── trusted-signing-durable-identity-value.png │ │ ├── trusted-signing-profile.png │ │ └── trusted-signing-upload.png │ ├── improve-support-for-packages-signed-with-trusted-signing.md │ ├── meta │ │ ├── dotnet-list-package │ │ │ └── dlpAudiSources.png │ │ └── trusted-publishers-oidc-for-nuget-push │ │ │ ├── scope-form.png │ │ │ ├── trust-policy-form.png │ │ │ └── trusted-publishers-flow.png │ ├── prune-package-reference.md │ ├── release-staging-and-deprecation.md │ ├── support-nuget-authentication-plugins-dotnet-tools.md │ ├── trusted-publishers-oidc-for-nuget-push.md │ ├── trusted-publishers-oidc-for-nuget-push.technical.md │ ├── unified-vs-settings.md │ └── vulnerabilities-in-packages.config-restore.md ├── 2025 │ ├── mono.md │ ├── prune-package-reference-rollout.md │ └── when-to-require-implicit-restore.md ├── README.md └── archive │ ├── AdvancedSearchOnNuGet.md │ ├── Deterministic-Pack.md │ ├── DotNetSignCommands.md │ ├── DotNetSources │ ├── Commands.xml │ └── DotNet-Sources-Support.md │ ├── Download-Only-Packages.md │ ├── EmbeddedReadmesTechSpec.md │ ├── FloatingStableAndPrerelease.md │ ├── FloatingVersions-In-PMUI.md │ ├── NuGet-ClientCertificates.md │ ├── NuGet-FrameworkReference-TransitiveFlow.md │ ├── NuGet-FrameworkReference.md │ ├── NuGetExtensibility │ ├── INuGetProjectServices.md │ └── NuGetExtensibilityServices.md │ ├── NuGetOrgReplicationAPI.md │ ├── PMUITabSwitchRefactoring.md │ ├── Package-List-Verbosity.md │ ├── PackageApplicabilityInNuGetPackageManagerUI.md │ ├── PackageIconLicenseDocumentationWithinNupkg.md │ ├── PackageReference-AllStable-Normalization.md │ ├── PackageReference-Extern-Alias.md │ ├── PackageValidation │ ├── BuildPropsConventionIsUpheld.md │ ├── DependenciesInNuspecMatchLibRefFolder.md │ ├── FileNameCaseSensitivity.md │ └── RefAssembliesInNuspecMatchRefFolder.md │ ├── Prerelease-Option.md │ ├── RefreshMetrics.md │ ├── RuntimeJsonFromProject.md │ ├── SearchCommandSpec.md │ ├── SolutionLoad-CsprojPackageReferenceRestore.md │ ├── UserWideConfiguration-AdditionalExtensibilityFolders.md │ └── VisualStudio-PartialRestoreOptimization.md ├── implemented ├── 2021 │ └── NuGet-CPP-CLI-Improvements.md ├── 2022 │ └── Consolidate-NuGetConfig_OnLinux.md ├── 2023 │ ├── package-source-mapping-actions-PMUI.md │ └── package-source-mapping-status-PMUI.md └── 2024 │ └── owner-author-pmui.md └── meta ├── README.md ├── resources ├── AccountDeletionWorkflow │ ├── Account Page - Delete account collapsed.png │ ├── Account Page - Delete account expanded - request submitted.png │ ├── Account Page - Delete account expanded - request.png │ ├── Account Page - Delete account expanded.png │ ├── Slide10.PNG │ ├── Slide11.png │ ├── Slide2.PNG │ ├── Slide3.PNG │ ├── Slide4.PNG │ ├── Slide5.PNG │ ├── Slide6.PNG │ ├── Slide7.PNG │ ├── Slide8.PNG │ ├── Slide9.1.PNG │ ├── Slide9.2.PNG │ ├── readme.md │ └── v2 │ │ ├── Account_delete_01.png │ │ ├── Account_delete_02.png │ │ ├── Account_delete_03.png │ │ ├── Account_delete_05.png │ │ ├── Account_delete_06.png │ │ └── readme.md ├── AssetTargetFallback │ └── ATF-Selection-flow.svg ├── DotnetNugetWhy │ ├── CargoTreeExample.png │ ├── ProjectWithDiamondDependency.png │ ├── ProjectWithFrameworksOptionSpecified.png │ ├── ProjectWithSingleDependencyPath.png │ ├── SolutionWithMultipleProjects.png │ └── SolutionWithProjectsThatHaveEmptyGraphs.png ├── FloatingVersionsInPMUI │ ├── ComboBox1.png │ ├── ComboBoxGif.gif │ ├── ComboBox_Error.PNG │ ├── FloatingVersionInPMUI.png │ ├── PackageManagerForSolution.png │ ├── ProjectFile&SolutionExplorer.png │ ├── ProjectPMUIInstalled.png │ ├── ProjectPMUIUpdates.png │ ├── RangesInPMUI.png │ ├── ShouldUpdateRanges.png │ ├── SolutionPMUIUpdates.png │ └── SolutionView.png ├── FormatChooser.png ├── Issue-triaging │ ├── IssueTriagingFlow.png │ └── Upvotes-Example.png ├── MigratorToolSupport │ ├── Gold bar.PNG │ ├── MainUpgraderUI v3.png │ ├── MainUpgraderUI.bmpr.png │ ├── MainUpgraderUI.png │ ├── NuGetUpgradeLog.html │ ├── PMUI with gold bar migrate.PNG │ ├── PMUI with gold bar.PNG │ ├── manager UI project upgrade option.png │ ├── report.PNG │ ├── right click project menu.png │ ├── upgrade preview window.png │ └── upgrade summary.png ├── MultipleAPIKeys │ ├── InitialMultipleAPIKeys.png │ └── d.md ├── NuGet.orgTFMs │ ├── PackageDetailsWithTFMs.png │ ├── badges.png │ └── compatibility_gaps ├── NuGetPackageDetails │ ├── dependencies.png │ ├── header.png │ ├── headernew.png │ ├── overallformat.png │ ├── overallnew.png │ ├── overallreal.png │ ├── overallv2.png │ ├── readme.png │ └── readmenew.png ├── OwnerAuthor │ ├── Mvc3CodeTemplatesCSharp_byAuthor.png │ ├── Mvc3CodeTemplatesCSharp_byBlank.png │ ├── Mvc3CodeTemplatesCSharp_noLinkAuthor.png │ ├── byOwnerExample.png │ ├── contributorsAuthorExample.png │ ├── detailsPaneOwnerAuthor.png │ ├── fakeOwnerResponse.png │ ├── intellicodeShowsAuthor.png │ ├── noOwnerNuGetOrg.png │ ├── ownerFallbackProjectURL.png │ ├── ownerLongTruncated.png │ ├── ownerNuGetOrgLinks.png │ ├── ownerNuGetOrgLinksNoIcon.png │ └── realOwnerResponse.png ├── PA │ ├── PA_0010.png │ ├── PA_0020.png │ ├── PA_0030.png │ ├── PA_0040.png │ ├── PA_0050.png │ ├── PA_0060.png │ ├── PA_0070.png │ ├── PA_0080.png │ ├── PA_0090.png │ ├── PA_0100.png │ ├── PA_0110.png │ ├── PA_0120.png │ ├── PA_0130.png │ ├── PA_0140.png │ ├── PA_0150.png │ ├── PA_0160.png │ ├── PA_0170.png │ ├── PA_0180.png │ └── readme.md ├── PackageImmutability │ ├── 01.PNG │ ├── 02.PNG │ ├── 03.PNG │ ├── 04.PNG │ ├── 05.PNG │ └── README.md ├── PackageSourceMapping │ ├── PMUI_AllSource_RequiresMapping.png │ ├── PMUI_Checkbox_example.png │ ├── PMUI_NU1100.png │ ├── PMUI_Pin_snapshots.png │ ├── PMUI_RadioButton_example.png │ ├── PMUI_SingleSource_AutoCreate.png │ ├── PMUI_Solution_AutoCreate_Annotated.png │ ├── PMUI_Solution_AutoCreate_Unannotated.png │ ├── PMUI_Solution_RequiresMapping_Annotated.png │ ├── PMUI_Solution_RequiresMapping_Unannotated.png │ ├── PMUI_preview_addedSourceMappings.png │ ├── PMUI_preview_addedSourceMappings2.png │ ├── PMUI_preview_example.png │ ├── StatusInformation.png │ ├── VSOptions.png │ ├── VSOptions1.png │ ├── packageSourceMappingFound.png │ ├── packageSourceMappingNotFoundForPackage.png │ ├── packageSourceMappingNotOnboarded.png │ ├── packageSourceMappingOptionsLink.png │ ├── packageSourceMappingStatusIconOK.png │ ├── packageSourceMappingStatusIconOffline.png │ └── packageSourceMappingStatusInfo.png ├── PackageTypeSearch │ ├── InfoButton-Tooltip.png │ ├── InfoButton.png │ ├── SearchPrompt-Dropdown.png │ └── SearchPrompt.png ├── PackageUploadWorkflow │ ├── Package Upload Workflow.png │ ├── package status page val fail.PNG │ ├── package status page.PNG │ └── readme.md ├── PackageVulnerability │ └── NuGet.orgVulnerabilitiesPhase1 │ │ ├── DetailViewAuthorBanner.png │ │ ├── DetailViewBanner.png │ │ ├── ManagePackagesViewIcon.png │ │ └── VersionListIcon.png ├── ProjectBoards │ ├── featureareas.png │ ├── fullkanban.png │ ├── kanban.png │ └── releaseprojects.png ├── ReadMePMUI │ ├── NoReadmeTab.png │ ├── PullRequestExperience.png │ └── ReadmeTab.png ├── ReadMeSupport │ ├── Display.PNG │ ├── Upload.PNG │ └── readme-markdown-preview-vs.png ├── RepeatableBuildLockFile │ ├── project.lock.json │ ├── project.lock.yaml │ ├── project.lock_modified.json │ └── project.lock_modified.yaml ├── SupportingPackageReference_2.png ├── TargetFrameworkAndPlatformFilters │ ├── CompleteExperience.png │ ├── GenerationsOfNET.png │ ├── SearchByTFM1.png │ ├── SearchByTFM2.png │ ├── SearchByTFM3.png │ ├── SupportedPlatforms.png │ ├── VersionNumbers.png │ └── dotnet-unified-platform.png ├── TransitiveDependencies │ ├── DotNetCLI.png │ ├── SolutionView.png │ ├── TransitiveVSPMUI.png │ └── VSPMUI.png ├── UnifiedSettings │ ├── clear-command-dialog.png │ └── general-prototype.png ├── VulnerabilitiesInRestore │ ├── Challenging.png │ ├── Learned.png │ ├── Notified.png │ ├── ResolveChallenge.png │ └── Resolved.png ├── nuget.png ├── packageSettings.png ├── signing │ └── client policy selection.png ├── upgraderImage.png └── vscode-commands │ ├── addpackage-failuretoast.png │ ├── addpackage-icon.png │ ├── addpackage-rightclick.png │ ├── addpackage-rightclick2.png │ ├── addpackage-searchbox.png │ ├── addpackage-searchbox2.png │ ├── addpackage-versionselect.png │ ├── addpackage.png │ ├── azdo-feeds1.png │ ├── azdo-feeds2.png │ ├── detailedsearch.png │ ├── flowdiagram.png │ ├── privatefeeds1.png │ ├── privatefeeds2.png │ ├── removepackage-confirm.png │ ├── removepackage-searchbox.png │ ├── removepackage-searchbox2.png │ ├── removepackage.png │ ├── removeupdate-icon.png │ ├── removeupdate-rightclick.png │ ├── solutionexplorer-packageicons.png │ ├── updatepackage-versionselect.png │ └── updatepackage.png └── template.md /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | 2 | # These owners will be the default owners for everything in 3 | # the repo. Unless a later match takes precedence, 4 | # review when someone opens a pull request. 5 | # For more on how to customize the CODEOWNERS file - https://help.github.com/en/articles/about-code-owners 6 | 7 | * @NuGet/nuget-client 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/BUG.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report 3 | labels: ["Type:Bug", "Triage:Untriaged"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to file this issue. In order to resolve it, we just need a few details from you. 9 | 10 | The more detail you provide, the more likely it will be for us to be able to identify what is going on and how to solve it! 11 | - type: dropdown 12 | id: product 13 | attributes: 14 | label: NuGet Product Used 15 | multiple: true 16 | description: Which of our NuGet clients does this apply to? 17 | options: 18 | - dotnet.exe 19 | - MSBuild.exe 20 | - NuGet.exe 21 | - Visual Studio Package Management UI 22 | - Visual Studio Package Manager Console 23 | - NuGet SDK 24 | - Other/NA 25 | validations: 26 | required: true 27 | - type: input 28 | id: version 29 | attributes: 30 | label: Product Version 31 | description: Which software version does this apply to? 32 | placeholder: dotnet --info, msbuild -version, nuget.exe ?, etc 33 | validations: 34 | required: true 35 | - type: input 36 | id: lastworking 37 | attributes: 38 | label: Worked before? 39 | description: If so, what was the last working version? 40 | validations: 41 | required: false 42 | - type: dropdown 43 | id: impact 44 | attributes: 45 | label: Impact 46 | multiple: false 47 | description: How does this issue impact you? 48 | options: 49 | - I'm unable to use this version 50 | - It's more difficult to complete my work 51 | - It bothers me. A fix would be nice 52 | - Other 53 | - type: textarea 54 | id: repro 55 | attributes: 56 | label: Repro Steps & Context 57 | description: What steps can the NuGet team take to reproduce this issue? Any other context you want to share? 58 | placeholder: | 59 | Please add as much detail as possible to help us to reproduce your problem. 60 | 61 | 1. step one 62 | 2. step two 63 | 3. ... 64 | 65 | What I expected: 66 | 67 | What I got: 68 | 69 | etc 70 | validations: 71 | required: true 72 | - type: textarea 73 | id: logs 74 | attributes: 75 | label: Verbose Logs 76 | description: If possible, please include verbose logs of the issue. 77 | placeholder: NuGet.exe -verbosity detailed | dotnet.exe --verbosity diag | etc... 78 | render: shell 79 | validations: 80 | required: false 81 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/DCR.yml: -------------------------------------------------------------------------------- 1 | name: Behavior Change 2 | description: When you want NuGet to work differently than it does. 3 | labels: ["Type:DCR", "Triage:Untriaged"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to file this issue. In order to best understand what you're asking and what your needs are, we just need a few details from you. 9 | 10 | Please note that designs are usually affected by our own product development processes, and we can't guarantee any particular timeline for when this change might be made. 11 | 12 | Additionally, keep in mind that Design Change Requests like this one might involve a breaking change, and if it's significant enough, or if it clashes with other product plans, we might have to turn it down. This is more a reflection of our processes and requirements rather than your particular request, so your understanding is appreciated. 13 | - type: dropdown 14 | id: product 15 | attributes: 16 | label: NuGet Product(s) Affected 17 | multiple: true 18 | description: Which of our NuGet clients does this apply to? 19 | options: 20 | - NuGet.exe 21 | - Visual Studio Package Management UI 22 | - Visual Studio Package Manager Console 23 | - MSBuild.exe 24 | - dotnet.exe 25 | - NuGet SDK 26 | - Other/NA 27 | validations: 28 | required: true 29 | - type: textarea 30 | id: current 31 | attributes: 32 | label: Current Behavior 33 | description: Please describe, in your own words, how you think things currently work now. 34 | validations: 35 | required: true 36 | - type: textarea 37 | id: desired 38 | attributes: 39 | label: Desired Behavior 40 | description: What do you think should happen instead? 41 | validations: 42 | required: true 43 | - type: textarea 44 | id: context 45 | attributes: 46 | label: Additional Context 47 | description: Any other context you want to share about this. Why is it important to you? What do other tools do? etc. 48 | validations: 49 | required: false 50 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/DOCS.yml: -------------------------------------------------------------------------------- 1 | name: Documentation Issue 2 | description: Report an issue with the NuGet Client documentation 3 | labels: ["Type:Docs", "Triage:Untriaged"] 4 | 5 | body: 6 | - type: input 7 | attributes: 8 | label: Docs Page URL 9 | description: Please provide the URL of the NuGet documentation page where you found the issue. 10 | placeholder: ex. https://learn.microsoft.com/nuget/consume-packages/install-use-packages-visual-studio 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: description 15 | attributes: 16 | label: Description of the Issue 17 | description: A clear and concise description of the issue. 18 | placeholder: Describe the issue... 19 | 20 | - type: textarea 21 | id: suggested-fix 22 | attributes: 23 | label: Suggested Fix 24 | description: If you have a suggestion for how to fix the issue, please provide it here. 25 | placeholder: Suggest a fix... 26 | 27 | - type: textarea 28 | id: additional-context 29 | attributes: 30 | label: Additional Context 31 | description: Add any other context about the problem here. 32 | placeholder: Provide additional context... 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/FEATURE.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: "When you want a new feature for something that doesn't already exist" 3 | labels: ["Type:Feature", "Triage:Untriaged"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thank you for taking the time to file this issue. In order to best understand what you're asking and what your needs are, we just need a few details from you. 9 | 10 | Please note that designs are usually affected by our own product development processes, and we can't guarantee any particular timeline for when this change might be made. 11 | - type: dropdown 12 | id: product 13 | attributes: 14 | label: NuGet Product(s) Involved 15 | multiple: true 16 | description: Which of our NuGet clients does this apply to? 17 | options: 18 | - NuGet.exe 19 | - Visual Studio Package Management UI 20 | - Visual Studio Package Manager Console 21 | - MSBuild.exe 22 | - dotnet.exe 23 | - NuGet SDK 24 | - Other/NA 25 | validations: 26 | required: true 27 | - type: textarea 28 | id: desired 29 | attributes: 30 | label: The Elevator Pitch 31 | description: Pitch us the feature! What can NuGet do better for you? 32 | validations: 33 | required: true 34 | - type: textarea 35 | id: context 36 | attributes: 37 | label: Additional Context and Details 38 | description: Any other context or details you want to share about this. Why is it important to you? What do other tools do? etc. 39 | validations: 40 | required: false 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Questions and Discussions 4 | url: https://github.com/NuGet/Home/discussions/new 5 | about: "Have something that's more of a question or a discussion? Start a new Discussion thread!" 6 | - name: NuGet.org Issue Tracker 7 | url: https://github.com/NuGet/NuGetGallery/issues/new/choose 8 | about: Please file issues about NuGet.org itself here. 9 | - name: Report Security Issue 10 | url: https://msrc.microsoft.com/ 11 | about: Is your issue related to security? Please submit it securely through MSRC. 12 | -------------------------------------------------------------------------------- /.github/workflows/icebox-watcher.yml: -------------------------------------------------------------------------------- 1 | name: IceBox Upvote Watcher 2 | on: 3 | # Run before 9am Seattle time, so discussion needed labels are added before the working day. 4 | # Run at non-zero minute so we're not running at the same time as everyone else who runs at the zero minute 5 | schedule: 6 | - cron: '34 13 * * *' 7 | # Allow manual triggering, so testing changes is easier 8 | workflow_dispatch: 9 | 10 | permissions: 11 | packages: read 12 | issues: write 13 | 14 | jobs: 15 | Run-IceBox-Watcher: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Install Latest .NET SDK 19 | run: | 20 | curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir $HOME/dotnet 21 | dotnet --info 22 | - name: Set up NuGet authentication 23 | run: dotnet nuget add source --username github-actions --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/nuget/index.json" 24 | 25 | - name: Install GitHubIssueTagger 26 | run: dotnet tool install --global NuGet.Internal.GitHubIssueTagger 27 | 28 | - name: Run IceBox Watcher 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 31 | run: GithubIssueTagger IceBox --add "Triage:NeedsTriageDiscussion" --label "Priority:3" 32 | -------------------------------------------------------------------------------- /CODE-OF-CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | This project has adopted the code of conduct defined by the Contributor Covenant 4 | to clarify expected behavior in our community. 5 | 6 | For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | The NuGet project tracks issues and feature requests using the [GitHub issue tracker](https://github.com/NuGet/Home/issues) for the various [NuGet repositories](https://github.com/NuGet/Home#repos-and-projects). 2 | 3 | ## Before Submitting an Issue 4 | First, please do a search in [open issues](https://github.com/NuGet/Home/issues) to see if the issue or feature request has already been filed. Use this [query](https://github.com/NuGet/Home/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to search for the most popular feature requests. 5 | 6 | If you find your issue already exists, make relevant comments and add your [reaction](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments). Use a reaction in place of a "+1" comment. 7 | 8 | 👍 - upvote 9 | 10 | 👎 - downvote 11 | 12 | The NuGet project is distributed across multiple repositories, try to file the issue against the correct repository [Related Projects](https://github.com/NuGet/Home#repos-and-projects). 13 | 14 | If your issue is a question then please ask the question on [Stack Overflow](https://stackoverflow.com/questions/tagged/nuget) using the tag `nuget`. Additionally, you can ask a question using [Microsoft Q&A](https://docs.microsoft.com/en-us/answers/topics/dotnet-package-management.html) under the `package management` section. 15 | 16 | If you cannot find an existing issue that describes your bug or feature, submit an issue using the guidelines below. 17 | 18 | ## Bug Reports 19 | A bug is a demonstrable problem that is caused by code in the repository. Good bug reports are extremely helpful for our developers who maintain this project. 20 | 21 | Guidelines for bug reports: 22 | 23 | 1. Validate your code - Ensure that your problem isn’t caused by an error in your code. 24 | 1. Use the GitHub issue search - Check if the issue has already been reported. 25 | 1. Check if the issue has been fixed - Try to reproduce the issue using the latest [Preview](https://www.visualstudio.com/vs/preview/) or `dev` Build. 26 | 1. Isolate the problem - Create a [minimal, complete, and verifiable example](https://stackoverflow.com/help/mcve) to demonstrate the problem. 27 | 28 | A good bug report shouldn’t leave others needing to ask you constantly for more information. Please try to be as detailed as possible in your report. Here are some tips that will help when filing an issue: 29 | 30 | * Reproducible steps (1. 2. 3.) and what you expected versus what you actually saw. 31 | * Images, animations, or a link to a video. **Note: Images and animations illustrate repro-steps but do not replace them.** 32 | * A code snippet that demonstrates the issue or a link to a code repository we can easily pull down onto our machine to recreate the issue. 33 | * Any respective build & deployment logs such as Diagnostic Build Output and NuGet Package Manager Console logs. 34 | * Your environment's version information. You can find this through a command like `Help -> About Visual Studio` 35 | 36 | ## Suggestions and Feature requests 37 | 38 | Suggestions and feature requests are welcomed. Before opening a suggestion or feature request, please take a moment to find out whether your idea fits with the scope and goals of the project. It’s up to you to make a strong case to convince the project maintainers and community the merits of the suggestion or feature. Please provide as much detail and context as possible. 39 | 40 | Additionally, do check the existing [Issues](https://github.com/NuGet/Home/issues), [Pull Requests](https://github.com/NuGet/Home/pulls), and [NuGet Designs](https://github.com/NuGet/Home/tree/dev/designs) to see if your idea is already captured. If it is, consider adding feedback to the existing issue, pull request, or contribute directly to the design. 41 | 42 | ## Pull requests 43 | Good pull requests of patches, improvements, new features, etc are great contributions. They should however remain focused in scope and avoid unrelated commits. 44 | 45 | Before embarking on any significant pull request, please ask a maintainer in a GitHub issue if the scope of the pull request would be reasonable to merge into the project. Otherwise you can potentially waste a lot of time working on something that might not be relevant to the project’s goals. 46 | 47 | While creating a pull request, please also include the intent for which you'd like the changes to land. By default, we ask that you pull against the `dev` branch. However if you'd like to see a change in the next service release or preview release of Visual Studio, please communicate with a maintainer of this project to understand if the changes will be able to make the intended release. 48 | 49 | ## Issue Triage Policy 50 | 51 | The NuGet team receives a significant amount of bugs and feature requests and while we'd love to address everyone's concern, this isn't practical. 52 | [Read more about our issue triage policy.](Issue-Triage-Policy.md) 53 | 54 | ## Contributing Fixes 55 | If you are interested in fixing issues and contributing directly to the code base, please see the document [Contribute To NuGet](https://github.com/NuGet/Home/wiki/Contribute-to-NuGet). 56 | 57 | ## Thank You! 58 | 59 | Your contributions to open source, large or small, make great projects like this possible. Thank you for taking the time to contribute to this project. 60 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) .NET Foundation. All rights reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use 4 | these files except in compliance with the License. You may obtain a copy of the 5 | License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software distributed 10 | under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 11 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 12 | specific language governing permissions and limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![NuGet logo](https://raw.githubusercontent.com/NuGet/Home/dev/meta/resources/nuget.png) 2 | 3 | ----- 4 | 5 | # NuGet Home 6 | 7 | The Home repository is the starting point for people to learn about NuGet, the project. If you're new to NuGet, and want to add packages to your own projects, [check our docs](http://docs.nuget.org). This repo contains pointers to the various GitHub repositories used by NuGet and allows folks to learn more about what's coming in NuGet. 8 | 9 | NuGet is being actively developed by the .NET Foundation. NuGet is the package manager for the Microsoft development platform including .NET. The [NuGet client tools](https://github.com/nuget/nuget.client) provide the ability to produce and consume packages. The [NuGet Gallery](https://github.com/NuGet/NuGetGallery) is the central package repository used by all package authors and consumers and has a live deployment at [www.nuget.org](https://www.nuget.org). 10 | 11 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 12 | 13 | ## NuGet Design Proposals 14 | 15 | This repo contains [design proposals](meta/README.md) for NuGet. It focuses on designs for the NuGet client tooling, NuGet.org public repository, and NuGet Package Manager inside Visual Studio. 16 | 17 | ## Documentation and Further Learning 18 | 19 | ### [NuGet Docs](http://docs.microsoft.com/en-us/nuget) 20 | 21 | The NuGet Docs are the ideal place to start if you are new to NuGet. They are categorized in 3 broader topics: 22 | 23 | * [Consume NuGet packages](https://docs.nuget.org/ndocs/consume-packages/overview-and-workflow) in your projects; 24 | * [Create NuGet packages](https://docs.nuget.org/ndocs/create-packages/overview-and-workflow) to learn about packaging and publishing your own NuGet Packages; 25 | * [Contribute to NuGet](https://github.com/NuGet/Home/wiki/Contribute-to-NuGet) gives an overview of how you can contribute to the various NuGet projects. 26 | 27 | ### [NuGet Blog](http://blog.nuget.org/) 28 | 29 | The NuGet Blog is where we announce new features, write engineering blog posts, demonstrate proof-of-concepts and features under development. 30 | 31 | ## Contributing 32 | 33 | There are many ways in which you can participate in the project, for example: 34 | 35 | * [Submit bugs and feature requests, and help us verify as they are checked in](https://github.com/NuGet/Home/wiki/Submitting-Bugs-and-Suggestions) 36 | * [Review NuGet proposals](https://github.com/NuGet/Home/pulls) 37 | * [Review the documentation and make pull requests for anything from typos to new content](https://github.com/NuGet/docs.microsoft.com-nuget) 38 | 39 | If you are interested in fixing issues and contributing directly to the code base, please see the document [Contribute To NuGet](https://github.com/NuGet/Home/wiki/Contribute-to-NuGet), which covers the following: 40 | 41 | * How to build and run from source 42 | * The development workflow, including debugging and running tests 43 | * Coding guidelines 44 | * Submitting pull requests 45 | * [Finding an issue to work on](https://github.com/NuGet/Home/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) 46 | * And much more! 47 | 48 | **Note:** Not all of our repositories are open for contribution yet. Ping us if unsure. 49 | 50 | ## Feedback 51 | 52 | * [Ask a question on Stack Overflow](https://stackoverflow.com/questions/tagged/nuget) 53 | * [Request a new feature](https://github.com/NuGet/Home/wiki/Submitting-Bugs-and-Suggestions#suggestions-and-feature-requests) 54 | * [Upvote popular feature requests](https://github.com/NuGet/Home/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) 55 | * [File an issue](https://github.com/NuGet/Home/wiki/Submitting-Bugs-and-Suggestions#before-submitting-an-issue) 56 | * Follow [@nuget](https://twitter.com/nuget) and let us know what you think! 57 | 58 | If you're having trouble with the NuGet.org Website, file a bug on the [NuGet Gallery Issue Tracker](https://github.com/nuget/NuGetGallery/issues). 59 | 60 | If you're having trouble with the NuGet client tools (the Visual Studio extension, NuGet.exe command line tool, etc.), file a bug on [NuGet Home](https://github.com/nuget/home/issues). 61 | 62 | ## Repos and Projects 63 | 64 | * [NuGet client tools](https://github.com/nuget/nuget.client) - this repo contains the following clients: 65 | * NuGet command-line tool 4.0 and higher 66 | * Visual Studio Extension (2017 and later) 67 | * PowerShell CmdLets 68 | 69 | [NuGet.org](https://www.nuget.org/) is backed by several core services: 70 | 71 | * [NuGetGallery](https://github.com/NuGet/NuGetGallery) - the current NuGet Gallery 72 | * [NuGet.Jobs](https://github.com/NuGet/NuGet.Jobs) - NuGet's back-end jobs and services 73 | * [ServerCommon](https://github.com/NuGet/ServerCommon) - shared libraries for running NuGet.org 74 | 75 | [NuGet.Server](https://github.com/NuGet/NuGet.Server) is a lightweight standalone NuGet server. 76 | 77 | [NuGet Documentation](https://github.com/NuGet/docs.microsoft.com-nuget) contains NuGet's documentation. 78 | 79 | A [full list of all the repos](https://github.com/NuGet) is available as well. 80 | 81 | ## NuGet Packages by the NuGet team 82 | 83 | We dogfood all of our stuff. NuGet uses NuGet to build NuGet, so to speak. All of our NuGet packages, which you can use in your own projects as well, are available from [our NuGet.org profile page](https://www.nuget.org/profiles/nuget). 84 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | Microsoft serves as the primary maintainer of this repository. If you believe you have found a security vulnerability that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /accepted/2020/MachineReadableOutputDotNetListPackage.md: -------------------------------------------------------------------------------- 1 | ## Machine-readable output for `dotnet list package` 2 | 3 | * Status: **Reviewing** 4 | * Authors: [Xavier Decoster](https://github.com/xavierdecoster) 5 | 6 | ## Issue 7 | 8 | [#7752](https://github.com/NuGet/Home/issues/7752) - dotnet list package is difficult to parse 9 | 10 | ## Problem 11 | 12 | Having a machine-readable output for `dotnet list package` would be very convenient, especially when `--outdated` and `--deprecated` come into the picture. Making the output machine-readable unlocks additional tooling and automation scenarios. 13 | 14 | This spec is based on today's (and planned) console output for the `dotnet list package` command. During review, I'd love to capture feedback/input and make sure we understand what data and format would be desired for this machine-readable output. 15 | 16 | ## Who is the customer? 17 | 18 | Everyone who uses `dotnet.exe list package` command to query for installed, outdated or deprecated package information. 19 | 20 | ## Key Scenarios 21 | 22 | * Ability to use new `--json` option for all `dotnet list package` commands to ensure JSON-formatted output is emitted to the console. 23 | 24 | ## Out-of-scope 25 | 26 | * To avoid disk I/O, we won't support saving the machine-readable output to disk as part of this spec. The work-around is for the consumer to read from the console's `stdout` stream. 27 | * At this point, no other CLI commands will be within scope for this feature. 28 | 29 | ## Solution 30 | 31 | A new `--json` command option will be added to the `dotnet list package` command. This command option needs to be forwarded from dotnet CLI to NuGet XPlat. 32 | 33 | ### Help 34 | 35 | The CLI `--help` output should be updated to include the new `--json` command help. 36 | 37 | ``` 38 | Usage: dotnet list package [options] 39 | 40 | Arguments: 41 | The project or solution file to operate on. If a file is not specified, the command will search the current directory for one. 42 | 43 | Options: 44 | -h, --help Show command line help. 45 | --json Output machine-readable JSON to the console. 46 | --outdated Lists packages that have newer versions. 47 | --deprecated Lists packages that have been deprecated. 48 | --framework Chooses a framework to show its packages. Use the option multiple times for multiple frameworks. 49 | --include-transitive Lists transitive and top-level packages. 50 | --include-prerelease Consider packages with prerelease versions when searching for newer packages. Requires the '--outdated' or '--deprecated' option. 51 | --highest-patch Consider only the packages with a matching major and minor version numbers when searching for newer packages. Requires the '--outdated' option. 52 | --highest-minor Consider only the packages with a matching major version number when searching for newer packages. Requires the '--outdated' option. 53 | --config The path to the NuGet config file to use. Requires the '--outdated' or '--deprecated' option. 54 | --source The NuGet sources to use when searching for newer packages. Requires the '--outdated' or '--deprecated' option. 55 | ``` 56 | 57 | ### dotnet list package --json 58 | 59 | ``` 60 | { 61 | "installed": [ 62 | { 63 | "framework": "netcoreapp2.0", 64 | "topLevelPackages": [ 65 | { 66 | "id": "My.Legacy.Package", 67 | "resolvedVersion": "2.0.0" 68 | }, 69 | { 70 | "id": "My.Buggy.Package", 71 | "resolvedVersion": "1.1.0" 72 | }, 73 | { 74 | "id": "My.CompletelyBroken.Package", 75 | "resolvedVersion": "0.9.0" 76 | } 77 | ], 78 | "transitivePackages": null 79 | } 80 | ] 81 | } 82 | ``` 83 | 84 | ### dotnet list package --json --outdated 85 | 86 | ``` 87 | { 88 | "outdated": [ 89 | { 90 | "framework": "netcoreapp2.0", 91 | "topLevelPackages": [ 92 | { 93 | "id": "NuGet.Common", 94 | "requestedVersion": "4.8.0-preview1.5146", 95 | "resolvedVersion": "4.8.0-preview1.5146", 96 | "latestVersion": "4.9.1-zlocal.52990" 97 | } 98 | ], 99 | "transitivePackages": [ 100 | { 101 | "id": "NuGet.Frameworks", 102 | "requestedVersion": "4.8.0-preview3.5278", 103 | "latestVersion": "4.9.1-zlocal.52990" 104 | } 105 | ] 106 | } 107 | ] 108 | } 109 | ``` 110 | 111 | ### dotnet list package --json --deprecated 112 | 113 | ``` 114 | { 115 | "deprecated": [ 116 | { 117 | "framework": "netcoreapp2.0", 118 | "topLevelPackages": [ 119 | { 120 | "id": "My.Legacy.Package", 121 | "resolvedVersion": "2.0.0", 122 | "reasons": ["Legacy"], 123 | "alternativePackage": { 124 | "id": "My.Awesome.Package", 125 | "versionRange": "[3.0.0,)" 126 | } 127 | }, 128 | { 129 | "id": "My.Buggy.Package", 130 | "resolvedVersion": "1.1.0", 131 | "reasons": ["Critical Bugs"], 132 | "alternativePackage": { 133 | "id": "My.NotBuggy.Package", 134 | "versionRange": "*" 135 | } 136 | }, 137 | { 138 | "id": "My.CompletelyBroken.Package", 139 | "resolvedVersion": "0.9.0", 140 | "reasons": ["Legacy", "Critical Bugs"], 141 | "alternativePackage": null 142 | } 143 | ], 144 | "transitivePackages": null 145 | } 146 | ] 147 | } 148 | ``` -------------------------------------------------------------------------------- /accepted/2020/PackageVulnerability/FlagVulnerablePackages.md: -------------------------------------------------------------------------------- 1 | # Flag vulnerable packages - Stage 1 2 | 3 | * Status: **Reviewing** 4 | * Author(s): [Anand Gaurav](https://github.com/anangaur) ([@adgrv](https://twitter.com/adgrv)), [Xavier Decoster](https://github.com/xavierdecoster) ([@xavierdecoster](https://twitter.com/xavierdecoster)) 5 | 6 | ## Issue 7 | 8 | Flag vulnerable packages [#8087](https://github.com/NuGet/Home/issues/8087) 9 | 10 | ## Problem 11 | 12 | Today developers take dependency on a set of packages directly or indirectly (through transitive dependencies) and have no way to understand if any of their dependencies bring in any known vulnerabilities. 13 | 14 | ## Goals 15 | 16 | This is a security feature aiming to fill a gap in the .NET package management ecosystem known as *package vulnerability auditing*. 17 | 18 | NuGet should be able to flag vulnerable packages used in projects/solutions. 19 | 20 | The ultimate goal is to *reduce exposure to known vulnerabilities* in NuGet packages, and *increase adoption rate of fixes* for those known vulnerabilities. 21 | 22 | ## Non-Goals 23 | 24 | * At this point, NuGet.org won't have a way for users to input vulnerability data into the system. All vulnerability data will be sourced from external systems. (no self-reporting) 25 | * This feature is an enhancement to the NuGet v3 protocol. We won't surface this in earlier versions of the NuGet protocol. 26 | * `NuGet.Server` is out-of-scope for this feature at this point. 27 | 28 | ## Scope 29 | 30 | There are multiple scenarios for flagging and reporting vulnerabilities. This feature will be implemented in several stages which will enable a subset of those as discussed below. 31 | 32 | ### Stage 1 - MVP 33 | 34 | For the [MVP](https://en.wikipedia.org/wiki/Minimum_viable_product) of this feature, we'll focus on: 35 | 36 | * Enabling ***consumers** to be informed about known vulnerabilities before installation* of a package. 37 | * Enabling ***authors** to be informed about known vulnerabilities in their packages*. 38 | * Leveraging **existing, curated, and publicly available known vulnerabilities** affecting NuGet packages. 39 | 40 | This should help prevent *new* installs of packages that are known to be vulnerable, and trigger authors into providing a fix through a new package version on nuget.org. 41 | 42 | NuGet will not support self-reporting of vulnerabilities at this time and instead rely on an existing data provider of curated vulnerability information. For the MVP of this feature, all vulnerability data will be sourced from external systems. The initial focus is on leveraging [GitHub's Security Workflow](https://github.com/features/security) and integration with [GitHub's GraphQL API](https://developer.github.com/v4/). This allows us to build an initial end-to-end experience without having to deal with the complexities of curating vulnerability reports. 43 | 44 | #### ✔️ In scope (Stage 1) 45 | 46 | * For CLI: 47 | * A CLI command to **list vulnerabilities** in a project/solution project graph 48 | 49 | * For Visual Studio: 50 | * **Display vulnerability information** in the package graph on `Installed` tab of Package Manager Dialog (PMUI) 51 | * **Display vulnerability information** for *transitive packages* in PMUI (additional UX complexity) - note that this is dependent on transitive packages being displayed in general, which is to be specced separately 52 | 53 | * For nuget.org: 54 | * **Automatically ingest and refresh NuGet package vulnerability data from GitHub** 55 | * **Surface package vulnerability information on-demand**: 56 | * as part of package metadata in `v3` registration blobs (`JSON`) 57 | * by showing vulnerability information on package details page and version history 58 | 59 | #### ❌ Out of scope (Stage 1) 60 | 61 | Some enhancements to this feature are out of scope for the initial implementation of this feature because there are several unknowns still to be clarified. See also the *Open Questions* section below. 62 | 63 | * Enable `restore` to Inform or Warn 64 | * Expose vulnerability metadata in nuget.org *Search* service (not required for MVP) 65 | 66 | ## Solution (Stage 1) 67 | 68 | ### Protocol 69 | 70 | To be able to show vulnerability information for phase 1 in PMUI and CLI clients, we need to update the protocol. 71 | 72 | To this end, the following changes will happen to the package registration JSON blobs (to each *version-specific* blob, not the *index.json*): 73 | 74 | | Name | Type | Required | Description | 75 | |---|---|---|---| 76 | | vulnerabilities | Array of Objects | No | Describes the vulnerabilities information associated with a package | 77 | | vulnerabilities[x].severity | String | Yes | "Low", "Moderate", "High", or "Critical" | 78 | | vulnerabilities[x].advisoryUrl | String | Yes | URL to discover additional information about the security advisory for this vulnerability | 79 | 80 | #### Forward Compatibility 81 | 82 | Clients should just not display the severity if they don't understand the value that is returned. The `severity` element values can be treated *case-insensitive*. 83 | 84 | ### List Vulnerabilities using a CLI command 85 | 86 | [See client spec for `dotnet list package --vulnerable`.](https://github.com/NuGet/Home/blob/dev/proposed/2020/PackageVulnerability/DotnetListPackageVulnerable.md) 87 | 88 | ### Display Vulnerabilities in Visual Studio PMUI 89 | 90 | * `Installed` tab shows a warning icon that leads to vulnerable package, when the package has **High** or **Critical** vulnerabilities 91 | * `Installed` tab also shows transitive packages as an accordion - collapsed, by default. It has a warning icon too when any of the transitive packages have vulnerabilities (**High** or **Critical**) 92 | 93 | ![image](https://user-images.githubusercontent.com/14800916/65348883-057af680-db97-11e9-8a2a-b02be76c9668.png) 94 | 95 | Showing vulnerability in transitive package: 96 | ![image](https://user-images.githubusercontent.com/14800916/65349163-9f42a380-db97-11e9-8de5-c81613e47d5d.png) 97 | 98 | > **Note**: Irrespective of the criticality of the vulnerability, the details pane will always show the vulnerability information - with warning icon for Critical/High vulnerabilities and info for others. Just that Installed tab won't warn in those cases. 99 | -------------------------------------------------------------------------------- /accepted/2020/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1.md: -------------------------------------------------------------------------------- 1 | # NuGet.org Vulnerabilities - Phase 1: 2 | 3 | * Status: Reviewed 4 | * Author(s): [Jon Douglas](https://github.com/JonDouglas) 5 | * Issue: [7650](https://github.com/NuGet/Home/issues/7650) 6 | 7 | ## Package Details Page 8 | 9 | NuGet.org should show a banner on a package with regards to the vulnerability and these 5 details: 10 | 1. The Advisory Title 11 | 2. The Affected Package Name 12 | 3. The Severity of the Vulnerability 13 | 4. The Date of the Advisory 14 | 5. The Status of the Advisory 15 | 16 | ...or with a link to the advisory URL either on nuget.org/advisories or directly to github.com/advisories: 17 | 18 | ![](../../resources//PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewBanner.png) 19 | 20 | The banner for package vulnerability will only show the specific version of the package. If the package contains the current version that is affected by the advisory, it will display the banner as well. 21 | 22 | When an author who is signed in views their package, they will see a different banner on what actions they should take: 23 | 24 | ![](../../resources//PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewAuthorBanner.png) 25 | 26 | In the event that the package version contains multiple vulnerabilities, the same banner will remain, however the “learn more” link will turn into individual links for each CVE listed against the package version. 27 | 28 | A package author might be able to see that a package they manage is vulnerable with a severity & instructions on what courses of action they might take via a documentation piece. 29 | 30 | ![](../../resources//PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/ManagePackagesViewIcon.png) 31 | 32 | Like the author screen, any version with a vulnerability will show an icon indicating the vulnerability for users to see at a glance. 33 | 34 | ![](../../resources//PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/VersionListIcon.png) 35 | 36 | ## Goals and Non-Goals 37 | ### Goals 38 | - Reduce exposure to discovered vulnerabilities within packages & dependencies. 39 | - Increase adoption of fixed upstream packages & dependencies. 40 | - Increase awareness of the importance of package quality & best practices for authoring packages to reduce potential for vulnerabilities. 41 | - Semantic Versioning 42 | - Encouraging frequent package updatesPhase 1 Spec: 43 | - Better usage of dependency constraints 44 | - Improved versioning & security policies 45 | - An output format that has a standard format for third-party monitoring tools to import. 46 | ### Non-Goals 47 | - Creation of insourced vulnerability dataset / system. 48 | - Required actions to take on vulnerabilities. 49 | 50 | ## Alternatives Considered 51 | - https://ossindex.sonatype.org/ 52 | 53 | ## Cross-cutting Concerns 54 | ### Policy 55 | NuGet currently has three policy documents: 56 | - https://docs.microsoft.com/en-us/nuget/policies/governance 57 | - https://docs.microsoft.com/en-us/nuget/policies/ecosystem 58 | - https://docs.microsoft.com/en-us/nuget/nuget-org/policies/data-requests 59 | 60 | NuGet.org currently has four policy documents: 61 | - https://docs.microsoft.com/en-us/nuget/nuget-org/policies/data-requests 62 | - https://docs.microsoft.com/en-us/nuget/nuget-org/policies/dispute-resolution 63 | - https://docs.microsoft.com/en-us/nuget/nuget-org/policies/deleting-packages 64 | - https://docs.microsoft.com/en-us/nuget/nuget-org/policies/export-control 65 | 66 | For the concern around policy, NuGet should be more upfront with what the policy around security is. There are small blurbs regarding Prohibited use, but nothing surrounding the idea of a Security Policy. 67 | 68 | NuGet should strive to provide a cohesive security policy documentation in which covers: 69 | - Reporting security problems to NuGet 70 | - NuGet’s security point of contact. 71 | - Critical Updates / Security Notices from NuGet Systems 72 | - Responding to Security Threats and Critical Updates by NuGet 73 | - Vulnerability Scanning within NuGet 74 | - Password & 2FA Policies 75 | 76 | ### Advisory 77 | NuGet currently does not provide a location of a security advisory for the public to read through. Any known security advisory should be made aware on a page such as NuGet.org/advisories. These advisories should show when the vulnerability was published and reported, additionally the advisory should include an overview of the advisory, a fix/remediation to the vulnerability, and any links to advisories upstream such as GitHub Advisory / National Vulnerability Database. Users should be able to see the versions of the package that are affected by the vulnerability, and the versions that are unaffected by the vulnerability. -------------------------------------------------------------------------------- /accepted/2020/PackageVulnerability/PMUIVulnerability.md: -------------------------------------------------------------------------------- 1 | 2 | # PMUI Display vulnerability information in the package graph 3 | 4 | * Status: [In Review] / Reviewed / Implementing / Implemented 5 | * Author(s): [drewgillies](https://github.com/drewgillies) 6 | * Issues: 7 | [1](https://github.com/NuGet/Home/issues/9850) Surface basic vulnerability metadata in PM UI view models 8 | [2](https://github.com/NuGet/Home/issues/8755) Display vulnerability info on Installed tab of PMUI 9 | 10 | ## Problem Background 11 | 12 | The [Flag Vulnerable Packages spec](https://github.com/NuGet/Home/wiki/Flag-vulnerable-packages) covers a number of MVP initiatives of which this is one. The problem being solved is feature parity with existing package services (npm) couples with a need to service our customers' security needs. 13 | 14 | ## Who are the customers 15 | 16 | All publishers of NuGet.org packages, all consumers of NuGet.org packages. 17 | 18 | ## Goals 19 | 20 | When a customer browses their installed packages in the PMUI, the MVP is for them to see notifications on their installed tab for vulnerable packages. 21 | 22 | ## Non-Goals 23 | 24 | Notifications on the Browse tab 25 | Restore warnings 26 | 27 | ## Solution 28 | 29 | The package vulnerability data is now available in registration metadata, alongside data for deprecations which is currently in use. 30 | 31 | The plan is the extend the design used for surfacing deprecation notifications in the past, to also include vulnerability information. This includes models, view models and views. The work is likely to be very similar in all areas. The strengths of this approach are a reasonably fast time to market, and low risk. 32 | 33 | ## Future Work 34 | 35 | Next steps are also to show transitive vulnerabilities, and beyond that we can continue to extend functionality into the Browse tab and other locations as customer engagement and general strategy determines. 36 | 37 | ## Open Questions 38 | 39 | There is an open question on the design employed by deprecations, which is well described in the thread on [this PR](https://github.com/NuGet/NuGet.Client/pull/3540), and the main points are: 40 | - a data model should be properties only, not properties and async fetch methods 41 | - this approach is opaque and could be a lot cleaner 42 | - there are performance concerns in the case where a user has disabled http caching because of repeated calls to NuGet.Protocol 43 | These are critiques of the design employed by the deprecation work (also pre-existing it) and this work extends that design. 44 | 45 | ## Considerations 46 | 47 | An approach consistent with answering the above concern is under consideration but is likely to be rejected at this stage due to: 48 | - the work amounts to large refactoring in the codebase--cost and risk 49 | - it will mean a subtractive and therefore breaking change to the public API on existing functionality, and if existing APIs are preserved and added to only, the original design is largely preserved as well 50 | - it may be worth returning to this question and refactoring the client codebase in favor of a deprecation approach to the outgoing APIs at some stage, but this is likely to delay the feature work beyond that which is desired 51 | 52 | ### References 53 | 54 | [Epic](https://github.com/NuGet/Home/issues/8087) 55 | [UX spec](https://www.figma.com/file/8gCQx9iAQfPXTtxoks6Qd7/%F0%9F%9B%A1%EF%B8%8F-NuGet-Vulnerable-Packages----Maryanne) 56 | -------------------------------------------------------------------------------- /accepted/2021/NuGetOrgReportForm-SafetyChanges.md: -------------------------------------------------------------------------------- 1 | # NuGet.Org Reporting Form Changes for Online Safety 2 | 3 | - Author name [Drew Gillies](https://github.com/drewgillies) (@drewgillies) 4 | - Start Date 2021-05-24 5 | - GitHub Issue https://github.com/nuget/nugetgallery/issues/8462 6 | - Status: Implemented 7 | 8 | ## Summary 9 | 10 | In order to provide adequate access to reporting tools for our customers in the event of a breach of online safety, we need to update our reporting form. It will cover a number of new categories and provide additional information per our online safety policies. 11 | 12 | ## Existing Form 13 | ![](./meta/resources/NuGetReportFormRedesign/ExistingForm.png) 14 | 15 | ## Alteration: New reasons in dropdown 16 | ### Existing, with form adjustments based on choice: 17 | - _**The package is infringing my copyright or trademark**_ 18 | - _Additional text for **Details** field:_ If you are reporting... 19 | - _Additional text below **Details** field for **Good Faith Belief**, **Authority to Act**, **512(f) Acknowledgement** 20 | - Additional field: **Signature** 21 | - _**The package contains malicious code**_ 22 | - No form adjustments 23 | - _**The package has a bug/failed to install**_ 24 | - _Additional test displayed about **Details** field:_ Unfortunately we cannot provide support for bugs in NuGet Packages. Please contact owner(s) for assistance. 25 | - _All other fields and submit button removed_ 26 | - _**Other**_ 27 | 28 | ### Reasons and form adjustments to be added: 29 | - _**Child sexual exploitation or abuse**_ 30 | - No new fields 31 | - _Additional text above **Details** field:_ Note: Please complete this form and submit it so we can proceed with an appropriate response regarding the NuGet package (e.g. removing it). In addition, please proceed to https://report.cybertip.org/ to report the matter in more detail. 32 | - _**Terrorism or violent extremism**_ 33 | - No new fields 34 | - _Additional text above **Details** field:_ Note: Please complete this form and submit it so we can proceed with an appropriate response regarding the NuGet package (e.g. removing it). In addition, please proceed to https://www.microsoft.com/en-au/concern/terroristcontent to report the matter in more detail. 35 | - _**This package contains hate speech**_ 36 | - No form adjustments 37 | - _**This package contains content related to imminent harm**_ 38 | - No new fields 39 | - _Additional text above **Details** field:_ Note: please ensure when reporting this type of abuse that you've considered whether the following are present: 40 | - A targeted person or group (including self) 41 | - An identified actor--i.e. person intending to commit the offense 42 | - Details of the threat 43 | - Time and/or place where the act will be carried out 44 | - _**The package contains non-consensual intimate imagery (i.e. "revenge porn")**_ 45 | - No new fields 46 | - _Additional text above **Details** field:_ Note: Please complete this form and submit it so we can proceed with an appropriate response regarding the NuGet package (e.g. removing it). In addition, please proceed to https://www.microsoft.com/en-us/concern/revengeporn to report the matter in more detail. 47 | - _**Other nudity or pornography (not "revenge porn")**_ 48 | - No form adjustments 49 | 50 | ### Technical Details 51 | - The categories in the dropdown map to `[dbo].[Issues].[Reason]` in the support requrest database and are stored as text - no adjustments required to tables to support the new reasons. 52 | - There are no new fields required to support the new reasons, so we shouldn't see any backend adjustments there either--these have process implications only. 53 | - [This enum](https://github.com/NuGet/NuGetGallery/blob/c11f41be85390ec653dc117990e4975a27412e41/src/NuGetGallery.Services/Models/ReportPackageReason.cs#L1) will need to be extended to cover the new reasons, and its new entries propagated throughout code. 54 | 55 | 56 | ## Alteration: Include a link to the NuGet Terms of Use 57 | - Ensure we have a prominently displayed link on the Report Abuse form to the [Terms of Use](https://www.nuget.org/policies/Terms) 58 | - _Add this text to the start of the the "Please provide a detailed abuse report..." paragraph:_ If our [Terms of Use](https://www.nuget.org/policies/Terms) have been violated by this package, please provide a detailed abuse report... 59 | 60 | 61 | 62 | ## Open questions 63 | - We may need to include a new reason for security vulnerability reporting, which will remove all fields and redirect the customer to a page external to this app for reporting them. Investigation pending. 64 | - We may remove the reporting of DMCA issues, leaving the reason (this package is infringing...) intact but removing all fields and referring customer to an external page. Investigation pending. -------------------------------------------------------------------------------- /accepted/2021/NuGetOrgTFMDropdownBadges.md: -------------------------------------------------------------------------------- 1 | # Display Target Framework Info on NuGet.org 2 | - Author Name: Jiachen Jiang (@jiachenjiang_) 3 | - Start Date: 2021-05-24 4 | - GitHub Issue: () GitHub PR () 5 | 6 | ### Description: What is it? 7 | When a developer opens the package details page or tab on NuGet.org or NuGet tooling, they will see what frameworks the package can support (target frameworks, or TFMs) in two places. 8 | - Badges in the header, which show basic target framework information at a glance 9 | - Dropdown/tab that shows all supported target framework for the current version 10 | 11 | ### Problem: What problem is this solving? 12 | Developers cannot use the package details page to determine what frameworks a NuGet package can support. In 2021, we live in a world where there are three evolutions of .NET coexisting on NuGet; .NET Framework, .NET Core, and .NET 5. 13 | Developers should be able to determine whether a package works for their project without having to first download it or rely on the author’s documentation. 14 | 15 | ### Why: How do we know this is a real problem and worth solving? 16 | Finding a package that is compatible with your project is a challenge for the average developer in the .NET ecosystem. Over 21% of developers fail to install a package today. One of the top NuGet errors issued in telemetry is NU1202, which shows that we allow developers to install packages that are not compatible with their project or solution’s target framework. 17 | 18 | ### Success: How do we know if we’ve solved this problem? 19 | - Conducting user studies with new .NET developers 20 | - By gauging excitement/disappointment after blogging about this feature & analyzing sentiment on Twitter/GitHub/DevCom/etc. 21 | 22 | ### Audience: Who are we building for? 23 | We are building this for the .NET developer who is browsing & making decisions about including a NuGet package into their project based on target framework & supported platform criteria. 24 | 25 | More specifically, we are building this for the new .NET developer who may not be familiar with TFMs and their usage. They would benefit from simplicity/clarity of information and links to additional resources. 26 | 27 | ### What: What does this look like in the product? 28 | 29 | #### Badges 30 | 31 | ![](../../meta/resources/NuGet.orgTFMs/badges.png) 32 | 33 | **Requirements** 34 | - Will show 35 | - net 36 | - netcore 37 | - netstandard 38 | - Change .NET to 'Frameworks' 39 | - does not conflict with branding 40 | - If the package does not have any of the above frameworks, do not show badge 41 | - This is fine because the badges are currently on the package details page, so users can always access the Frameworks tab to understand why 42 | - Once we port to search page, we can consider visually showing an explanation why there are no badges 43 | 44 | **Non-Requirements** 45 | - Badges on Search Page 46 | - More – link to Framework tab on Package Details page 47 | - Asked for and makes sense, but right now we are limited to Package Details page 48 | - In addition, users expect badges on search page at same time as filtering 49 | - Our telemetry about usage on Package Details will guide our next steps 50 | - All other supported TFMs – those will be shown in the dropdown/tab 51 | - Breaking apart net* into netcore and netstandard 52 | - Requires additional mapping work that might not be necessary 53 | - Text-heavy presentation 54 | - Filters 55 | 56 | #### Dropdown/Tab 57 | 58 | **Requirements** 59 | - lowest .NET frameworks 60 | - Description that explains compatibility with “following and later” 61 | - Not “and higher”, feedback from design 62 | - We can assume no gaps in compatibility 63 | - all other TFMs 64 | - not immediately visible, hidden behind 'See more' 65 | - Users must be able to tell that clicking on the link will lead them to these uncommon frameworks 66 | - There might be gaps in compatibility so versions should be listed (example below, ignore the .NET frameworks) 67 | ![](../../meta/resources/Nuget.orgTFMs/compatibility_gaps) 68 | - If the package is a .NET tool, template, or other kind of project type, the dropdown should display a message explaining that no frameworks can be found because of the type, not because there really are no supported frameworks 69 | - Right now, a similar dropdown (dependencies) just shows that there are no dependencies, which is confusing to users unfamiliar with other package types 70 | - Emphasize vertical orientation instead of horizontal 71 | - For easy port to mobile view 72 | 73 | 74 | **Non-Requirements** 75 | 76 | - Detailed package type work 77 | - Based on the type, the location of dependencies and frameworks (or even if it makes sense for the package to have them) differs 78 | - Right now we will show a message 79 | - In the future we can do design work that better informs users of the differences/nuances of package types 80 | - TFM information for all versions 81 | - Was asked by customers, but makes more sense to show TFM for the current version since customers can look at different versions of the package 82 | - Listing out the versions for .NET TFMs 83 | - Implies that there are gaps in compatibility 84 | - Nikolche and Kat confirmed that there are no edge cases that would break the usage of ‘+’ or (or higher) 85 | - Lots of information all at once 86 | - Version range syntax 87 | - Looks really mathematical and not easy to read (see right) 88 | 89 | 90 | -------------------------------------------------------------------------------- /accepted/2021/NukeInstallationsInstructions.md: -------------------------------------------------------------------------------- 1 | # Title 2 | 3 | - Author Name [Matthias Koch (@matkoch)](https://github.com/matkoch) 4 | - Start Date 2021-04-21 5 | - GitHub Issue https://github.com/NuGet/Home/issues/10784 6 | - GitHub PR https://github.com/NuGet/Home/pull/10782 7 | - Status: Implemented 8 | 9 | ## Summary 10 | 11 | Add package installation instructions for using .NET tools with NUKE. 12 | 13 | ## Motivation 14 | 15 | Conventionally, users add references to packages using the common `PackageReference` approach. This has two downsides: Firstly, it doesn't allow to reference multiple versions. Secondly, it sometimes breaks the build project, when packages ship more than just the `./tools` folder. This has been the case for `DocFX` for instance. 16 | 17 | The command helps developers to add a NuGet package in the _right_ way. So I personally expect less confusion on their side, and as a nice bonus it will also teach more folks about the existence of the `PackageDownload` feature. 18 | 19 | ## Explanation 20 | 21 | ### Functional explanation 22 | 23 | NUKE ships with a lot wrapper APIs for third-party tools, like `ReportGenerator`, `GitVersion.Tool` and many more. These APIs are available, but could fail at runtime, because the required package is not referenced. When I want to use the `ReportGeneratorTasks` for instance, I may head over to NuGet.org, check what particular version I need, copy the command, and execute it in my terminal from whereever I am. It doesn't have to be the build project directory. The command can be used repository-wide, as there is only one build project. 24 | 25 | ### Technical explanation 26 | 27 | There are no technical details for NuGet other that we might need to set a `NUGET_USER_AGENT` or similar. 28 | 29 | On our side, the command simply adds the `PackageReference` item to the `csproj` file using `Microsoft.Build` infrastructure, and then performs a `dotnet restore` on the build project which triggers the download to the global NuGet cache. It is only converted to `PackageDownload` if the package contains a `./tools` directory. 30 | 31 | ## Drawbacks 32 | 33 | NUKE is not strictly a NuGet package manager. The instructions however _are_ useful for package consumers. 34 | 35 | ## Rationale and alternatives 36 | 37 | The alternative is to provide a `dotnet packagedownload` command. However, this command might be confusing in relation to the existing `dotnet package` command. Also, even compared to this hypothetical command, `nuke :add-package` covers a broader range, since it can be called from any directory in the repository, and the command will know where to add the `PackageDownload`. 38 | 39 | ## Prior Art 40 | 41 | The Paket team successfully pioneered adding a new tab. The Cake team has successfully pushed [their proposal](https://github.com/NuGet/NuGetGallery/issues/8381). As I already mentioned in the issue, I'm not particularly fond of showing installation instructions for build-irrelevant packages. In any case, I'm limiting my proposal to packages with `DotnetTool` as a `packageType`. For everything else, i.e. `PackageReference`, the IDE capabilities should suffice. 42 | 43 | ## Unresolved Questions 44 | 45 | If the NuGet team needs usage statistics, we would need to allow setting the `User-Agent` from outside the dotnet CLI process. NUKE uses a minimal bootstrapping and native tooling with the benefit of having less places that could potentially break. 46 | 47 | ## Future Possibilities 48 | 49 | I'm looking forward for the NuGet team to add more metadata to packages. This way we might also show the instructions for packages that have a `./tools` folder. 50 | 51 | One more future possibility unrelated to NuGet, is that we may add a `nuke :update-packages` command or similar. 52 | 53 | -------------------------------------------------------------------------------- /accepted/2021/ProjectBoards.md: -------------------------------------------------------------------------------- 1 | - Status: Implemented 2 | 3 | # Using GitHub Project Boards for Customer Visibility and Tracking 4 | 5 | Our project boards will need to be created and accessed at the organizational level, not in any one repo (i.e. not in Home), because this is a restriction on project boards--if they're in a repo, they will be locked only to issues from that repo. Here's where ours will live: [https://github.com/orgs/NuGet/projects](https://github.com/orgs/NuGet/projects) 6 | 7 | We can use a simple or extended kanban column sets with automations (these are simply a template choice when a board is created), as we can see used in projects in other organizations: 8 | - https://github.com/dotnet/msbuild/projects 9 | - https://github.com/dotnet/roslyn/projects 10 | 11 | ...and there's nothing stopping us from a complete rework of columns for any given project if that's helpful. Let's keep in mind simplicity where we can, and kanban columns are a pretty well-known approach. Here's a very simple example with automations, and additional status columns could be added if useful: 12 | 13 | ![](../../meta/resources/ProjectBoards/kanban.png) 14 | 15 | Automations can extend to reviewing columns as well, e.g.: 16 | 17 | ![](../../meta/resources/ProjectBoards/fullkanban.png) 18 | 19 | ## A project per feature area 20 | Because issues can belong to multiple projects, and because automation in project boards will cause issues to move through various kanban columns, the overhead is low in tracking them separate locations. 21 | 22 | ![](../../meta/resources/ProjectBoards/featureareas.png) 23 | 24 | 25 | ## Release Tracking 26 | We can track releases in projects too, adding issues to release that we intend to target. 27 | 28 | ![](../../meta/resources/ProjectBoards/releaseprojects.png) 29 | 30 | ## Epics, Wikis and Specs 31 | Our epics will continue to be our landing points for customers. In the case of PVA, it's [here](https://github.com/NuGet/Home/issues/8087) and will have links to project boards. Wikis can be linked to from epics also. 32 | 33 | Specs can continue to accumulate in the Home repo's [designs](https://github.com/NuGet/Home/tree/dev/designs) folder, and we should ensure that they are linked to by their respoective issues. This ties their discoverability to their relevance to a customer. If we wish to show a spec in a project board, we can add cards which display the link. 34 | 35 | -------------------------------------------------------------------------------- /accepted/2021/Screen Shot 2021-05-12 at 10.27.01 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2021/Screen Shot 2021-05-12 at 10.27.01 AM.png -------------------------------------------------------------------------------- /accepted/2021/Screen Shot 2021-05-12 at 10.27.10 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2021/Screen Shot 2021-05-12 at 10.27.10 AM.png -------------------------------------------------------------------------------- /accepted/2021/VSdeprecationfeature.md: -------------------------------------------------------------------------------- 1 | # Title 2 | 3 | - Author Name: Meera Haridasa http://github.com/meeraharidasa 4 | - 2021-05-12 5 | - GitHub Issue (GitHub Issue link) N/A 6 | - GitHub PR (GitHub PR link) N/A 7 | - Status: Implemented 8 | 9 | ## Summary 10 | 11 | 12 | 13 | Changes to VS NuGet package manager that will make deprecated packages more obvious improve the rate at which customers move to the latest packages. 14 | - Deprecation message within the search result with a clickable link to the latest package 15 | - Updated deprecation message within the right hand side details pane where “More info” takes you to the NuGet.org site for that package and has another clickable link for the latest package 16 | - Warning icon next to the version number in the search result 17 | 18 | 19 | ## Motivation 20 | 21 | 22 | 23 | Customers don’t move to the latest libraries because they don’t realize they are using outdated ones. Our current deprecation indicators are too subtle and don’t appear in enough places. This means: 24 | • Customer may be using libraries that are no longer supported – which is a security risk and means they don’t get the benefits of the latest libraries. 25 | • Library publishers, such as the Azure SDK team, see slow adoption of their newer libraries. 26 | 27 | The expected outcome is for the Azure SDK team to see an increase in adoption rates for Track 2 packages. 28 | 29 | 30 | ## Explanation 31 | 32 | ### Functional explanation 33 | 34 | 35 | If you are a developer trying to install the latest package in the NuGet package manager, you will be notified when a package has been deprecated. As you open the package manager, if a certain package is deprecated, 36 | you'll see a warning icon next to the version number, a deprecation message along inside the description of the package linking to the newest package and when you click on the package itself, 37 | there is an updated message that also links to the newest package. 38 | 39 | 40 | 41 | 42 | ![alt text](https://github.com/meeraharidasa/Home/blob/dev/proposed/2021/Screen%20Shot%202021-05-12%20at%2010.27.10%20AM.png) 43 | ![alt text](https://github.com/meeraharidasa/Home/blob/dev/proposed/2021/Screen%20Shot%202021-05-12%20at%2010.27.01%20AM.png) 44 | 45 | 46 | ### Technical explanation 47 | 48 | 49 | 50 | There is no technical explanation of this feature other than implementing the capability for these items to display the messages while searching for a package. 51 | 52 | ## Drawbacks 53 | 54 | 55 | An increase to track 2 libraries may not be based on user's not seeing deprecated pakcages, but we have gathered enough customer evidence and done Quick Pulses to confidently say 56 | that we don't have a great end-to-end deprecation story. This will be helping that out. 57 | 58 | ## Rationale and alternatives 59 | 60 | 61 | 62 | 63 | 64 | This is the best design because its simple and gets the point across to our customers. We have iterated on many different designs and worked with UX Board to see 65 | which one would be the best in the long run. Other designs were not chosen because they invovled other aspects such as the Solution Explorer and Properties pane which 66 | are hard to change. 67 | 68 | The impact of not doing this keeps the unresolved question of how do we explain our deprecated story to customers? In the Quick Pulse that we ran, 100% of customers 69 | say that they would want the deprecation end-to-end to be more clear and visible to them in VS. 70 | 71 | ## Prior Art 72 | 73 | 74 | 75 | 76 | 77 | 78 | There are no previous proposals on this issue, we are trying to tackle this customer pain point by starting off with this feature and then hopefully adding more 79 | to the deprecated journey for customers. Once this feature is implemented, we can track progress and see if this is successful in navigating customers to the latest packages 80 | and then iterate through a more robust feature then. 81 | 82 | ## Unresolved Questions 83 | 84 | 85 | 86 | 87 | 88 | The designs have been approved by UX Board and the team is trying to figure out when engineering has time to implement this. Related issues might be addressing a 89 | deprecation story for customers that already have old libraries installed and navigating them to the latest packages. This feature would involve other parts of VS such as 90 | the Solution Explorer and Properties pane, which if we want to change, this feature should first show success. 91 | 92 | ## Future Possibilities 93 | 94 | 95 | Creating a full end-to-end story for deprecation within VS that makes the transition smooth for both customers who are installing a package and those who are trying to upgrade 96 | to the latest package. 97 | -------------------------------------------------------------------------------- /accepted/2021/meta/resources/NuGetPackageDetails/sidebar_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2021/meta/resources/NuGetPackageDetails/sidebar_final.png -------------------------------------------------------------------------------- /accepted/2021/meta/resources/NuGetReportFormRedesign/ExistingForm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2021/meta/resources/NuGetReportFormRedesign/ExistingForm.png -------------------------------------------------------------------------------- /accepted/2022/WarningsNotAsErrors.md: -------------------------------------------------------------------------------- 1 | # Honor WarningsNotAsErrors 2 | 3 | - Author Name 4 | - Start Date 2022-10-01 5 | - GitHub Issue 6 | - GitHub PR 7 | 8 | ## Summary 9 | 10 | 11 | `WarningsNotAsErrors` is an existing [compiler option](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings) that allows users with treat warnings as errors, to not get errors for every warning raised by their build. 12 | NuGet supports `TreatWarningsAsErrors`, `WarningsAsErrors` and `NoWarn`. In this proposal we want to add support for `WarningsNotAsErrors`. 13 | 14 | ## Motivation 15 | 16 | 17 | 18 | `TreatWarningsAsErrors` is very commonly used feature in the .NET world. NoWarn allows you to suppress certain warning, but that is often too strong. `WarningsNotAsErrors` provides a middle ground, where the users are aware of the warning, but it doesn't fail their build. 19 | This feature is supported by the compiler, and we want to provide parity for both pack and restore. 20 | 21 | ## Explanation 22 | 23 | ### Functional explanation 24 | 25 | 26 | 27 | The proposed behavior here matches the compiler behavior. All the scenarios are best represented in a table. 28 | 29 | The precedence order for the 3 properties by NuGet can summarized as: 30 | `NoWarn > WarningsAsErrors > WarningsNotAsErrors`. 31 | 32 | For the following table assume `NU1603` is being raised during restore. 33 | 34 | | TreatWarningsAsErrors | NoWarn | WarningsAsErrors | WarningsNotAsErrors | Behavior | Explanation | 35 | |-----------------------|--------|------------------|---------------------|----------|-------------| 36 | | true | | | | All warnings are treated as errors | | 37 | | true | NU1603 | | | Succeeds with no warning. | NoWarn prevents NU1603 from being raised. | 38 | | false | | NU1603 | | NU1603 is upgraded to an error. | Only a certain list of warnings are being treated as errors | 39 | | true | | | NU1603 | Succeeds with a warning. | Only NU1603 is a warning. If any other warning is raised, it'll be upgraded to an error | 40 | | true | NU1603 | | NU1603 | Succeeds. No warning. | NoWarn takes precedence over both WarningAsErrors and WarningNotAsErrors. | 41 | | false | NU1603 | NU1603 | | Succeeds. No warning. | NoWarn takes precedence over both WarningAsErrors and WarningNotAsErrors. | 42 | | false | | NU1603 | NU1603 | NU1603 is upgraded to an error | WarningsAsErrors takes precedence over WarningsNotAsErrors. This is likely not an intentional user scenario. | 43 | | true | | NU1603 | NU1603 | NU1603 is upgraded to an error | WarningsNotAsErrors takes precedence over TreatWarningsAsErrors, but WarningsAsErrors takes precedence over WarningsNotAsErrors | 44 | 45 | ### Technical explanation 46 | 47 | We already have a concept for [holding warning properties](https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.ProjectModel/WarningProperties.cs), and [logic](https://github.com/NuGet/NuGet.Client/blob/f4e0ae1ca207f9f4a388b73c2f7edf18b2078f2a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/WarningPropertiesCollection.cs#L75) that handles the no warn and upgrade warnings. 48 | We will just extend that. 49 | 50 | ## Drawbacks 51 | 52 | 53 | - N/A 54 | 55 | ## Rationale and alternatives 56 | 57 | 58 | 59 | 60 | - N/A 61 | 62 | ## Prior Art 63 | 64 | 65 | 66 | 67 | 68 | 69 | - The compiler has already implemented the feature. 70 | 71 | ## Unresolved Questions 72 | 73 | 74 | 75 | 76 | 77 | - Should this feature be enabled in 6.5, 7.0.200 of the .NET SDK. 78 | - This is a behavior change where if someone was using `WarningsNotAsErrors` for NuGet, updating their tooling with change behavior. 79 | - However, given that it currently doesn't work, it is not very likely that users would have that in their project. 80 | - WarningsNotAsErrors is the lowest precedence setting supported by NuGet. 81 | - Any behavior change can be consider a breaking change by people, but given the low likelihood this has as a new feature, I think it should be safe to merge in 6.5. 82 | 83 | ## Future Possibilities 84 | 85 | 86 | -------------------------------------------------------------------------------- /accepted/2023/Add-NoHttpCacheOption.md: -------------------------------------------------------------------------------- 1 | # Add NoHttpCache option 2 | 3 | - [Nigusu](https://github.com/Nigusu-Allehu) 4 | - [GitHub Issue](https://github.com/NuGet/Home/issues/9180) 5 | 6 | ## Summary 7 | 8 | 9 | The proposal seeks to eliminate user confusion regarding the `-NoCache`, `--no-cache`, and `RestoreNoCache` options in nuget.exe, dotnet.exe, and msbuild.exe respectively by introducing new options: `-NoHttpCache`, `--no-http-cache`, `RestoreNoHttpCache`, which clearly specify that they disables only HTTP cache caching, not the global packages folder. To ensure a smooth transition and avoid additional confusion, the old options will not be deprecated but will co-exist with the new option. Updated documentation will provide guidance on the specific functions of each option, allowing users to make informed decisions based on their caching needs. 10 | ## Motivation 11 | 12 | 13 | The motivation behind introducing the new `--no-http-cache` option is to enhance user experience with clarity. Existing options like `-NoCache`, `--no-cache`, and `RestoreNoCache` have proven to be ambiguous, leading to misunderstandings about their functionality. 14 | 15 | ## Explanation 16 | 17 | ### Functional explanation 18 | 19 | 20 | 21 | Imagine you're working on a .NET project and you're using various CLI tools like dotnet.exe, nuget.exe, and msbuild.exe. You've been using the `-NoCache`, `--no-cache`, or `RestoreNoCache` options to disable caching, but you're a bit confused because it doesn't seem to affect the global packages folder. Well, that's because these options were designed to disable only the HTTP cache, not the global packages folder. 22 | 23 | To make things clearer, a new CLI option has been introduced: `--no-http-cache`. When you use this flag, it explicitly disables only the HTTP cache, leaving the global packages folder untouched. The previous options are still there; And they will have messages to help move people towards the better named options. In addition, we will be hiding the existing `--no-cache` option from the CLI help output. The `--no-http-cache` option will be shown in the CLI help output. This will help guide users to the new option. 24 | 25 | Here's a simple restore example: 26 | 27 | Old way (still works): `dotnet restore --no-cache` 28 | New way (clearer): `dotnet restore --no-http-cache` 29 | ### Technical explanation 30 | 31 | 32 | The proposal is to add a new option `-NoHttpCache` which will set the exact same `NoCache` option boolean. For now if either of these options are set, `NoCache` will be set to true. 33 | ## Drawbacks 34 | 35 | 36 | 37 | ## Rationale and alternatives 38 | 39 | 40 | 41 | 42 | This design is the best because it introduces explicitness without breaking existing workflows; the older flags are not deprecated and still work as before. Alternative designs like modifying the behavior of existing flags or deprecating them were considered but ruled out because we do not want to confuse our users. 43 | 44 | ## Prior Art 45 | 46 | 47 | 48 | 49 | 50 | * None 51 | ## Unresolved Questions 52 | 53 | 54 | 55 | 56 | To ensure a smooth transition, the current `-NoCache` options will be preserved. However, we would also like our users to know this option will only stop Http caching and that there is a new option `-NoHttpCache` which is clearer and does the same thing. As a result, printing a log message that warns users when they use the `-NoCache` option is ideal. I am not sure if the following is a sufficient message \ 57 |   `"NoCache is deprecated in favor of the appropriately named NoHttpCache."` 58 | 59 | ## Future Possibilities 60 | 61 | 62 | * None 63 | -------------------------------------------------------------------------------- /accepted/2023/readme-markdown-install-PMUI.md: -------------------------------------------------------------------------------- 1 | # Markdown Readme shown after Package Installation 2 | * Start Date: 6/20/23 3 | * Authors: Donnie Goodson ([donnie-msft](https://github.com/donnie-msft)) 4 | * Issue: https://github.com/NuGet/Home/issues/12674 5 | 6 | ## Summary 7 | 8 | Currently, installing a package containing a Readme file using NuGet Package Manager in Visual Studio (PM UI) will result in that readme being opened if it is a `.txt` file. Packages can also contain `.md` Readme files with markdown content, but these files are not opened automatically after install. The goal of this spec is to make a consistent experience for markdown readmes. 9 | 10 | ## Motivation 11 | 12 | Customers who expect a Readme to open after package installation with the PM UI currently do not see a markdown readme file automatically. As we continue growing a community of package authors who include markdown readme files, it's natural that PM UI should open them, when available. 13 | 14 | Expanding our supported file types for this feature serve as an entry point for us to gain technical experience integrating a markdown rendering strategy into the product. 15 | 16 | ## Explanation 17 | 18 | ### Functional Explanation 19 | 20 | When performing a package action in the PM UI, if that package has a markdown readme file, open the file as if the customer chose it from File -> Open in VS. 21 | 22 | The VS editor already provides a markdown `Preview` button when a markdown file is opened. The proposal is that this markdown preview is sufficient to make a useful and consistent experience for our customers who expect to see a Readme after package installation. 23 | 24 | Example: 25 | The package `Azure.Core` v1.32.0 obtained from nuget.org contains a markdown readme. When manually opening its `README.md` in VS, and clicking the `Preview` button, the rendered markdown is shown as in the following screenshot: 26 | 27 | ![The Azure.Core package's README.md file open in Visual Studio with the Markdown Preview enabled.](../../meta/resources/ReadMeSupport/readme-markdown-preview-vs.png) 28 | 29 | ### Technical Explanation 30 | 31 | The VS editor exposes an `IVsTextView` option: a boolean property `ShowMarkdownPreview`, which can be used to enable the markdown preview automatically. Ideally, only the rendered markdown can be shown, but there would be value even if only the split window showing markdown code and rendered markdown is technically feasible. 32 | 33 | Reference to property (Internal access only): [code](https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_search?action=contents&text=ShowMarkdownPreviewOptionId&type=code&lp=code-Project&filters=ProjectFilters%7BDevDiv%7DRepositoryFilters%7BVS-Platform%7D&pageSize=25&result=DefaultCollection/DevDiv/VS-Platform/GBmain//src/Productivity/MarkdownLanguageService/Impl/Markdown.Platform/Preview/PreviewMargin.cs) 34 | 35 | The PM UI code which opens text readmes is in: [NuGetPackageManager.cs](https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.PackageManagement/NuGetPackageManager.cs#L3544) 36 | 37 | ## Drawbacks 38 | 39 | None 40 | 41 | ## Rationale and Alternatives 42 | 43 | If the usage of opening Readme's automatically after installation is low, we may not need to implement this feature. 44 | 45 | ## Prior Art 46 | 47 | Text readmes (`.txt`) already open automatically, so the timing for when to load the file is already in place. 48 | The VS Editor team already has an option to enable the preview automatically. 49 | 50 | ## Unresolved Questions 51 | 52 | None 53 | 54 | ## Future Possibilities 55 | 56 | [Support viewing README files in Visual Studio](https://github.com/NuGet/Home/issues/12583) -------------------------------------------------------------------------------- /accepted/2024/images/trusted-signing-azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/images/trusted-signing-azure.png -------------------------------------------------------------------------------- /accepted/2024/images/trusted-signing-durable-identity-value-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/images/trusted-signing-durable-identity-value-link.png -------------------------------------------------------------------------------- /accepted/2024/images/trusted-signing-durable-identity-value.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/images/trusted-signing-durable-identity-value.png -------------------------------------------------------------------------------- /accepted/2024/images/trusted-signing-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/images/trusted-signing-profile.png -------------------------------------------------------------------------------- /accepted/2024/images/trusted-signing-upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/images/trusted-signing-upload.png -------------------------------------------------------------------------------- /accepted/2024/meta/dotnet-list-package/dlpAudiSources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/meta/dotnet-list-package/dlpAudiSources.png -------------------------------------------------------------------------------- /accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/scope-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/scope-form.png -------------------------------------------------------------------------------- /accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/trust-policy-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/trust-policy-form.png -------------------------------------------------------------------------------- /accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/trusted-publishers-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/accepted/2024/meta/trusted-publishers-oidc-for-nuget-push/trusted-publishers-flow.png -------------------------------------------------------------------------------- /accepted/2025/prune-package-reference-rollout.md: -------------------------------------------------------------------------------- 1 | # PrunePackageReference in .NET 10 2 | 3 | - Nikolche Kolev 4 | - [#NuGet/Client.Engineering#3110](https://github.com/NuGet/Client.Engineering/issues/3110) 5 | 6 | ## Summary 7 | 8 | `NuGetAudit` scans the dependencies in your package graph for vulnerabilities, reporting vulnerabilities for every package that ended up in your resulting graph. 9 | 10 | [`PrunePackageReference`](https://github.com/NuGet/Home/blob/dev/accepted/2024/prune-package-reference.md) allows NuGet to skip platform packages that are already available within the framework that the project is building. 11 | For example, if your project, targetting .NET 9 has a transitive dependency to System.Text.Json 8.0.4, which is vulnerable, enabling pruning will allow NuGet to prune it from the defined list of dependencies during graph resolution. This package will not be downloaded and it will not appear in the resolved dependency graph. 12 | 13 | We propose that we enable the `PrunePackageReference` feature by default for *all* .NET (Core) and .NET Standard 2.0 and above in .NET 10 preview 1 to reduce false positives by NuGetAudit and related scanning tools and improve performance. 14 | 15 | This has 2 benefits: 16 | 17 | 1. Reduces false positives by NuGet Audit, Component Governance and other dependency auditing tools. 18 | Our data investigations show that up 30% of transitive vulnerabilities are within packages that may be removed by pruning. 19 | 1. Improves performance, by virtue of having smaller dependency graphs and fewer packages downloaded. 20 | 21 | For a feature like this, normally we'd need roll it out based on the target framework, but our telemetry shows that up to 30% of transitive vulnerability warnings may be addressed by enabling the pruning feature. 22 | The list of packages being removed is the exact same that's part of the build time conflict resolution in the .NET SDK. In a way, this moves the conflict resolution to an earlier part of the build. 23 | The packages that are being pruned carried assemblies that were excluded from the final output of the project by the aforementioned conflict resolution. 24 | 25 | - As we are enabling this feature in .NET 10 Preview 1, it gives a very long runway should we eventually decide to go with a more convervative roll-out strategy. 26 | - If there are any issues, users can easily disable the feature by setting `RestoreEnablePackagePruning` to `false` in their project/props. 27 | - We will continuously monitor telemetry and feedback around the feature through all the previews. 28 | 29 | ### Testing & Validation 30 | 31 | The feature has been development since November and the implementation has been extensively tested through automation, but we also ensured that our own repos can dogfood without any issues. 32 | 33 | We validated the .NET SDK build that it *does not affect the builds negatively of the following repos*: 34 | 35 | - NuGet/NuGet.Client 36 | - dotnet/sdk 37 | - dotnet/roslyn - 38 | - dotnet/runtime - 39 | - dotnet/aspnetcore - 40 | 41 | ### Observable build changes 42 | 43 | - Customers who expect the output of their project to produce identical results will notice smaller deps files. This is intentional. 44 | - Customers who observe the output of component governance / NuGet Audit will notice these components are no longer reported. This is intentional. 45 | - Customers who use packages lock files (1% usage) with locked mode may run into restore failures due to restore bringing in fewer dependencies. This is intentional. 46 | - Customers with builds that have customization may run into build failures if they are: 47 | - Manually referencing an assembly or props/targets from a package from the global packages folder. Note that pruning is not allowed for direct dependencies, so this would need to be a transitive package. 48 | - Manually copying assembly during a build - at runtime, the platform version will be preferred anyways, but it could lead to the build failing if the package cannot be found on disk anymore. 49 | - We don't expect this to be a common scenario given that the packages being pruned are within the framework and customers do not need do to anything custom to make things work. 50 | 51 | ## Rationale and alternatives 52 | 53 | - Roll-out the feature based on the target framework. 54 | - Enable pruning for .NET 10 frameworks only. 55 | - Enable pruning for all frameworks of projects that target .NET 10 (ie. multi-targetting .NET 10 and NET 8.0 in a project enables pruning for both). 56 | - Enable pruning when NuGetAuditMode is set to `all` - reducing transitive false positives for audit. 57 | 58 | ## Prior Art 59 | 60 | - Pruning is the restore equivalent of [the build time conflict resolution](), that is current enable for every framework. 61 | 62 | ## Unresolved Questions 63 | 64 | 65 | 66 | 67 | 68 | ## Future Possibilities 69 | 70 | - Enabling pruning for .NET Framework. 71 | -------------------------------------------------------------------------------- /accepted/2025/when-to-require-implicit-restore.md: -------------------------------------------------------------------------------- 1 | # ***When to require implicit restore*** 2 | 3 | 4 | - Author Name [Nigusu](https://github.com/Nigusu-Allehu) 5 | - GitHub [Issue](https://github.com/NuGet/Home/issues/13406) 6 | 7 | ## Summary 8 | 9 | 10 | This proposal explores when implicit restore should be required in NuGet commands. 11 | Some commands require restore to have been performed for them to function correctly. 12 | If a command depends on restore, it should trigger an implicit restore to ensure accuracy. 13 | However, since implicit restore could impact performance and potentially require a connection to sources, commands should offer a `--no-restore` option to allow users to bypass it when necessary. 14 | 15 | ## Motivation 16 | 17 | 18 | Commands such as `dotnet list package` and `dotnet nuget why` are intended to reflect the user's project state accurately. 19 | However, since these commands require restore to have been performed, they may provide outdated or incorrect information if restore has not been executed recently. 20 | These commands depend on the assets files, they may provide outdated information if restore has not been recently executed. 21 | Ensuring an implicit restore will maintain synchronization between the assets file and the project file, enhancing the reliability of these commands. 22 | 23 | ## Explanation 24 | 25 | ### Functional explanation 26 | 27 | 28 | 29 | 30 | When a user executes a NuGet command that requires restore, the system should: 31 | 32 | 1. **Perform restore** 33 | 34 | 2. **Provide a `--no-restore` option** 35 | - Users who want to skip restore due to performance concerns or when they are confident the assets file is up-to-date should be able to pass this flag. 36 | 37 | 3. **Handle scenarios where restore is unsuccessful** 38 | - If implicit restore fails due to network issues, package source unavailability, or conflicting dependencies, the command should fail with a clear error message. 39 | - If `--no-restore` is specified, the command should: 40 | - Assume the information from the assets file is correct. 41 | 42 | ### Technical explanation 43 | 44 | 45 | 46 | The command must execute restore **prior to performing its own actions**. It should assume that restore will handle no-op restores when restore is unnecessary. 47 | If the `--no-restore` flag is specified, implicit restore should be bypassed. 48 | 49 | ## Drawbacks 50 | 51 | 52 | 53 | ## Rationale and alternatives 54 | 55 | 56 | 57 | 58 | 1. **Requiring Manual Restore**: Users must manually run `dotnet restore` before commands. Rejected as it introduces usability friction. 59 | 60 | This was discussed in the following PR: https://github.com/NuGet/Home/pull/14065 61 | 62 | The proposal: 63 | The proposal aims to improve the user experience of the `dotnet list package` command by ensuring it only displays accurate and up-to-date package information. 64 | If the project has been modified since the last restore, the command should detect the change and prompt the user to run `dotnet restore` again before listing packages. 65 | This prevents users from being misled by stale data and reinforces the expectation that a restore must reflect the current state of the project. 66 | 67 | ## Prior Art 68 | 69 | 70 | 71 | 72 | 73 | 74 | - `dotnet build` and `dotnet run` both trigger restore implicitly when needed. 75 | 76 | ## Unresolved Questions 77 | 78 | 79 | 80 | 81 | 82 | - How should failure scenarios be communicated? Should errors halt execution or only show warnings? 83 | 84 | ## Future Possibilities 85 | 86 | 87 | -------------------------------------------------------------------------------- /accepted/README.md: -------------------------------------------------------------------------------- 1 | # Accepted 2 | 3 | When a proposal has been `accepted`, it will be scheduled for work and upon completion be moved to `implemented`. 4 | 5 | For more information, see the [NuGet proposal process](../meta#nuget-proposal-process). 6 | -------------------------------------------------------------------------------- /accepted/archive/Deterministic-Pack.md: -------------------------------------------------------------------------------- 1 | # Deterministic pack 2 | 3 | * Status: **Implemented** 4 | * Update; **Reverted in 5.3 and .NET Core 3.0.100** See https://github.com/NuGet/Home/issues/8601 for more details 5 | * Author(s): [Nikolche Kolev](https://github.com/nkolev92) 6 | * I'm merely the person writing up the spec, the bulk of the analysis and implementation work goes to [tmat](https://github.com/tmat) and [ctaggart](https://github.com/ctaggart) 7 | 8 | ## Issue 9 | 10 | [6229](https://github.com/NuGet/Home/issues/6229) - NuGet Pack is not deterministic 11 | 12 | ## Problem Background 13 | 14 | The need for deterministic in the build tools is obvious. Given the same input, the tooling should generate the exact same binary output. Effectively this means that the build should not depend on the ambient state of the environment such as the current time, a global random number generator state, the machine name the build is running on, the root directory the repository is built from, etc. 15 | The compiler implements determinism with the [-deterministic](https://docs.microsoft.com/en-us/dotnet/visual-basic/reference/command-line-compiler/deterministic) switch. More information about roslyn & determinism in this [blog](https://blog.paranoidcoding.com/2016/04/05/deterministic-builds-in-roslyn.html) by [jaredpar](https://github.com/jaredpar). 16 | NuGet packages are one of the most common distribution vehicles for binaries, so as such the tooling that creates the packages should be deterministic too. 17 | 18 | ## Who are the customers 19 | 20 | All .NET customers 21 | 22 | ## Requirements 23 | 24 | * Given the same input, pack should generate the same byte-for-byte package, and not be influenced by the ambient state of the machine we're packing on. 25 | 26 | ## Solution 27 | 28 | There are 2 different pack entry point. NuGet.exe pack, which can only work on a nuspec, the pack targets or msbuild /t:pack (dotnet pack) which runs on the csproj itself. 29 | In the pack targets we will respect the `true` MSBuild property. 30 | In NuGet.exe pack, we will add a -Deterministic switch. 31 | 32 | ## Implementation 33 | 34 | The indeterminism of NuGet's pack operation can be grouped in 2 buckets. 35 | 36 | 1. Timestamps for the zip entries. 37 | 2. Guids used to generate the psmdcp. 38 | 39 | As far as the timestamps go, they'll default to Zip format minimum date of 1/1/1980. 40 | Instead of the Guids, we'll just use content hashes of the files in the package. 41 | 42 | An obvious, but important disclaimer is that the determinism of pack will be affected by the determinism of all the tools that generate the files that end up getting packed. 43 | -------------------------------------------------------------------------------- /accepted/archive/DotNetSources/Commands.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /accepted/archive/NuGet-FrameworkReference-TransitiveFlow.md: -------------------------------------------------------------------------------- 1 | # FrameworkReference in NuGet 2 | 3 | * Status: **Implemented** 4 | * Author(s): [Nikolche Kolev](https://github.com/nkolev92) 5 | 6 | ## Issue 7 | 8 | [7342](https://github.com/NuGet/Home/issues/7988) - FrameworkReference Transitive flow 9 | 10 | ## Background 11 | 12 | When designing the original `FrameworkReference` NuGet experience, one scenario was not well understood. 13 | The SDK really has a concept of `base` FrameworkReference such as a netcoreapp & a netstandard FrameworkReference. 14 | This throws a wrench into the current design as there are no ways to exclude `FrameworkReference` from flowing transitively through restore. 15 | It also complicates the `compatibility` scenario from netstandard to the netcoreapp framework family. 16 | We need to rethink https://github.com/NuGet/Home/wiki/%5BSpec%5D-FrameworkReference-in-NuGet#what-happens-in-the-future-ifwhen-frameworkreference-are-added-to-other-frameworks. 17 | 18 | 19 | ## Who are the customers 20 | 21 | All .NET Core customers. 22 | 23 | ## Requirements 24 | 25 | * FrameworkReferences such as the base netcoreapp and netstandard references need a way to be suppressed transitively. 26 | 27 | ## Solution 28 | 29 | There are 2 directions this solution can go in. 30 | * FrameworkReference attributes 31 | * Different item for the base framework reference. 32 | 33 | ## FrameworkReference attribute 34 | 35 | Currently the `Pack` attribute is used to specify whether the framework reference gets packed into the package. 36 | Some suggestions regarding the approach here were: 37 | 38 | * Pack is respected by restore 39 | * This is confusing, and we still have the flexibility to come up with a better approach. 40 | * Private attribute instead of pack 41 | * There are other usages of this attribute name like CopyLocal. 42 | * A new NuGet name. 43 | * PrivateAssets attribute 44 | * Already known attribute used with PackageReference 45 | * Confusing since the only options are `all` and `none`. 46 | 47 | Currently the proposed approach is PrivateAssets, `all` and `none`. 48 | This is not something that will be user facing, so the risk is more minimal. 49 | 50 | ## Different FrameworkReference item for *base* framework references 51 | 52 | This does negate the need for an attribute controlling the transitive flow for the optional FrameworkReference items. 53 | However it does ensure that unwanted framework references are never written in the assets file or packages. 54 | This does not have any additional concerns since the SDK reads the FrameworkReference items for the current project directly through MSBuild and not going through NuGet. 55 | This also allows for a seamless implementation of the transitive flow for optional framework references if/when are added. 56 | Finally, the base and optional framework references are similar, but ultimately different concepts, and should be represented as such to avoid future confusion. 57 | 58 | ## Pack scenarios 59 | 60 | The NuGet.Build.Tasks.Pack will consider the FrameworkReference item and pack accordingly. 61 | The packing of a specific FrameworkReference can also be disabled by specifying `PrivateAssets="all"`. 62 | The default will be `none`. 63 | 64 | ```xml 65 | 66 | ``` 67 | 68 | The nuspec pack will work similarly, validating the standard target framework validation. 69 | 70 | ### Validation 71 | 72 | NuGet will treat the framework references as case insensitive strings. NuGet will not do any further validation during pack or restore. 73 | 74 | The SDK will handle `not applicable` FrameworkReference errors. [Task](https://github.com/dotnet/sdk/issues/3011) 75 | 76 | ## Considerations 77 | 78 | ### What happens in the future if/when FrameworkReference are added to other frameworks 79 | 80 | Would there be *framework* specific *FrameworkReference*s? Notable that cross framework family transitivity is not an issue because .NET Core is not a dependant of any framework family in the frameworks matrix. 81 | Say .NET Standard becomes non monolithic and we add optional shared frameworks such as WPF. Every implementer will need to support the shared frameworks that the standard declares. The scenario becomes more complex when the frameworks in question are not the standard + implementer. And while there’s no plans for this changing it’s worth considering now so if needed we can account for it early. -------------------------------------------------------------------------------- /accepted/archive/NuGetOrgReplicationAPI.md: -------------------------------------------------------------------------------- 1 | ### Replicating NuGet.org going forward 2 | 3 | #### Intro 4 | 5 | Current replication techniques against NuGet.org utilize the OData feed, and use mechanisms such as paging. These are extremely expensive and as an aggregate of all clients replicating simultaneously consumes a large part of the the server resources (both SQL and Lucene). 6 | 7 | The goal is to replace this mechanism with a more modern mechanism that relies solely on storage and CDN, so it doesn't impact any compute resources, and is relatively cheap to maintain. 8 | 9 | #### Design considerations/Top level items 10 | 1. As first phase - Using the current NuGet.org infrastructure - Without any code changes to the server 11 | 2. As second phase - Add endpoints that enable snapping the whole view of what package Ids are available in one go. This could be described in either a catalog rollup, or a completely separate and simple endpoint that describes all ids + versions, and a cursor pointing the where it was generated at the catalog level. This will require a job to produce the rolled up view. 12 | 3. A public C# API that can walk the catalog and provide all the ids and versions 13 | 4. A public C# API that gets all the versions of a known set of Ids 14 | 5. a program (executable, either nuget.exe or another tool) that can be used to replicate a set of packages from nuget.org and update them regularly by only downloading the diffs. 15 | 16 | #### Public APIs 17 | 1. An API to walk the catalog 18 | 19 | ###### Filters 20 | 1. Owner 21 | 2. Author 22 | 3. Globbing pattern of package name 23 | 4. Latest version only 24 | 5. Globbing of versions 25 | 6. Stable or also pre-release 26 | 7. General callback with user code accessing the metadata? 27 | 8. Start cursor 28 | 29 | ###### Returns 30 | 1. Package metadata 31 | 2. Download link 32 | 3. Link to all versions of the package 33 | 4. Cursor that can be stored 34 | 35 | ```c# 36 | // insert a snippet here 37 | ``` 38 | 39 | 2. API to get all versions of a package Id 40 | 41 | This is really just a point to the flat container {packageId}/index.json 42 | 43 | #### Program 44 | 45 | 1. Need to debate if this is part of nuget.exe or can rev on its own. My general preference is a standalone tool, so it can rev on its own cadence. It impacts a lot smaller set of customers, so it should be able to live on its own. However it is going to be less discoverable this way. We could consider it as an extension to NuGet.exe 46 | 2. Prototype command 47 | 48 | XXX.exe Replicate -Source https://api.nuget.org/v3/index.json -Cursor File.Cursor -Output {folder/pushserveruri} -Structure {flat/v3(default)} -glob {e.g. microsoft.*} -owner {microsoft|aspnet} -allVersions (default is latest) -PreRelease 49 | 50 | #### Samples 51 | 52 | * ng.exe’s Lightning command (to regenerate registration blobs) has an example of fetching the latest state of all packages from catalog: https://github.com/NuGet/NuGet.Services.Metadata/blob/searchcloud/src/Ng/Lightning.cs#L172 53 | 54 | #### Notes 55 | 56 | * The service index.json has a Catalog/3.0.0 entry which can be used to determine the catalog root. -------------------------------------------------------------------------------- /accepted/archive/PackageIconLicenseDocumentationWithinNupkg.md: -------------------------------------------------------------------------------- 1 | * Status: **Reviewed** 2 | * Author(s): [Karan Nandwani](https://github.com/karann-msft) ([@karann9](https://twitter.com/karann9)) 3 | 4 | ## Issue 5 | The work for this feature and the discussion around the spec is tracked by 3 issues 6 | * Icon - **Package Icon should be able to come from inside the package [#352](https://github.com/NuGet/Home/issues/352)** 7 | * License - **Package trust - Licenses [#4628](https://github.com/NuGet/Home/issues/4628)** 8 | * Documentation - **Nuspec - documentation / readme url [#6873](https://github.com/NuGet/Home/issues/6873)** 9 | 10 | ## Problem 11 | * Icons - package authors are required to find a place to host an image, only to point to it for the package icon. Additionally, loading images from external URLs have potential security and privacy concerns for package consumers. 12 | * License - it is possible to update the page contents at the referred license URL raising legal concerns for package consumers. 13 | * Documentation - it is not possible for package authors to update the documentation on the package details page without going to NuGet.org. This information is not surfaced in Visual Studio to package consumers. 14 | 15 | ## Who is the customer? 16 | * NuGet package consumers that consume packages using Visual Studio package manager UI (VS-PMUI) from NuGet.org (v3 feed) and folder based feeds 17 | * NuGet package authors that push to NuGet.org 18 | 19 | ## Solution 20 | 21 | [Packaging Icon within the nupkg](https://github.com/NuGet/Home/wiki/Packaging-Icon-within-the-nupkg) 22 | 23 | [Packaging License within the nupkg](https://github.com/NuGet/Home/wiki/Packaging-License-within-the-nupkg) 24 | 25 | [Packaging Documentation within the nupkg](https://github.com/NuGet/Home/wiki/Packaging-Documentation-within-the-nupkg) -------------------------------------------------------------------------------- /accepted/archive/PackageValidation/BuildPropsConventionIsUpheld.md: -------------------------------------------------------------------------------- 1 | # `build.props` or `build.targets` File Doesn't Follow Covention 2 | 3 | * Status: **Unstarted** 4 | * Author(s): [Joshua Silas](https://github.com/JarahSi) 5 | 6 | ## Issue 7 | [8295](https://github.com/NuGet/Home/issues/8295) - Validation for `build.props` convention in the package. 8 | 9 | ## Background 10 | 11 | Currently, the build folder contains either `props` or `targets` files that are compatible with all TFMs or folders for each supported TFM that contain the corresponding `props` or `targets` files. However, the convention for this file states that the file name should be `.props` or `.targets`. As such, there are packages that ignore this convention, and the props and target files are ignored. 12 | 13 | This problem only appears when package authors edit a package's ID without addressing the build files, or creating a props file for the first time with no knowledge of the convention. 14 | ## Who are the customers 15 | 16 | Package authors 17 | 18 | ## Requirements 19 | 20 | - a method of warning authors that the package is ignoring the `build.props` convention 21 | 22 | ## Proposal 23 | I propose a rule that would throw a warning if there is not at least one `props` file (if any are present) and one `targets` file (if any are present) in the `/build` folder follow the convention. This rule will run at `nuget pack` and return the warning code `NU5129` 24 | 25 | In a package with the ID `test.package` you have: 26 | ``` 27 | /lib 28 | /build 29 | /net45 30 | /test.package.props 31 | /test.package.targets 32 | /netstandard2.0 33 | /test.package.props 34 | /test.package.targets 35 | ``` 36 | The rule would check to make sure that each subfolder (if applicable) in `/build` contains at least 1 `.props` or `.targets` file that follows the `.props` convention. In the example above, the warning would not be raised as it follows the build convention for each declared TFM. 37 | 38 | However, a package with the ID `My.Package` contains 39 | ``` 40 | /lib 41 | /build 42 | /net45 43 | /My.Package.props 44 | /netstandard2.0 45 | /MyPackage.props 46 | ``` 47 | The rule would see that the `/netstandard2.0` folder doesn't conatin any `.props` or `.targets` files that follow the convention and therefore raise an `NU5129` which states: 48 | 49 | ``` 50 | A props file was found in build/netstandard2.0/. However, this file is not My.Package.props. Change the file to fit this format. 51 | ``` 52 | 53 | In a package with the ID `Package.All.Compat`, you have: 54 | 55 | ``` 56 | /lib 57 | /build 58 | /Package.All.Compat.props 59 | ``` 60 | This won't raise any errors as because there are no subfolders to check and there is a props file that follows the convention. In this next case: 61 | 62 | ``` 63 | /lib 64 | /build 65 | /Package.All.Compatible.props 66 | ``` 67 | The warning will trigger with this warning message: 68 | 69 | ``` 70 | A props file was found in build/. However, this file is not named Package.All.Compat.props. Change the file to fit this format. 71 | ``` 72 | 73 | -------------------------------------------------------------------------------- /accepted/archive/PackageValidation/FileNameCaseSensitivity.md: -------------------------------------------------------------------------------- 1 | 2 | # Error on improper file name case 3 | 4 | * Status: [Implemented](https://github.com/NuGet/NuGet.Client/pull/3754) 5 | * Author(s): [David Maas](https://github.com/PathogenDavid) 6 | * Issue: [9817](https://github.com/NuGet/Home/issues/9817) NU5030 license file existence check should always use a case-sensitive comparison 7 | 8 | ## Problem Background 9 | 10 | Presently when you pack a NuGet package on Windows, it is possible to specify diferent casing for the filename for `PackageLicenseFile`/`PackageIcon`. For instance, you can pack a file named `License.txt` and specify `LICENSE.txt` in the NuSpec and the package will pack without errors. 11 | 12 | However, this package is malformed because NuGet packages are zip files and zip files use case-sensitive paths internally. As a consequence, the package cannot be uploaded to NuGet.org: 13 | 14 | ![Screenshot of NuGet.org upload page with error: "The license file 'LICENSE.txt' does not exist in the package."](https://user-images.githubusercontent.com/278957/87859778-464db400-c8fd-11ea-9d19-230c87285e92.png) 15 | 16 | If you attempt to put the package in a local feed (or another feed which does not perform this check), you'll get an error: 17 | 18 | ![Screenshot of Visual Studio error message: "Unknown problem loading the file 'LICENSE.txt'."](https://user-images.githubusercontent.com/278957/87859796-7ac17000-c8fd-11ea-8953-64fc9606c831.png) 19 | 20 | ## Who are the customers 21 | 22 | This primarily affects package authors who may be unknowingly packing malformed packages. 23 | 24 | ## Goals 25 | 26 | * Prevent package authors from making this mistake. 27 | * Avoid breaking packages which exhibit this problem. 28 | * Not all package feeds can or will verify the license or icon file exists. (IE: Local package feeds, Nexus Repository) 29 | * Fix the behavioral inconsistency between packing on Windows/macOS vs Linux. 30 | 31 | ## Non-Goals 32 | 33 | Changing the behavior of packing on Linux is a non-goal. 34 | 35 | ## Solution 36 | 37 | Expand the scope of existing errors to cover attempting to pack a package with improper casing on the `PackageLicenseFile`/`PackageIcon`: 38 | 39 | ``` 40 | NU5030: The license file 'LICENSE.txt' does not exist in the package. (Did you mean 'License.txt'?) 41 | NU5046: The icon file 'Icon.png' does not exist in the package. (Did you mean 'icon.png'?) 42 | ``` 43 | 44 | As shown above, in the situation NuGet will give a hint to the user with the correct casing. 45 | 46 | ## Future Work 47 | 48 | A warning is specified to avoid breaking packages which previously packed successfully even though they were malformed. In a future .NET SDK release, this warning could become an error by default similar to [NU1605](https://github.com/dotnet/sdk/blob/bc5c514a45a1a900b71d39a3541196bc2cf1bb0d/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.CSharp.props#L19). 49 | 50 | ## Open Questions 51 | 52 | None. 53 | 54 | ## Considerations 55 | 56 | It was considered to make the issue a warning, but this would expose the user to a pit of failure. 57 | 58 | It was considered to make new error codes for this case, but was deemed unecessary. 59 | 60 | It was considered that packing could silently update `PackageLicenseFile` to the correct value, but this behavior seems like it has the potential to be confusing. 61 | 62 | If this were to be a warning, it was considered changing the behavior on Linux to use a case-insensitive string comparison as well in order to make these malformed packages packable there, but that was deemed unecessary. (And it turns what is an error today into a warning.) 63 | 64 | It was considered that when the file was found but in a different directory that the hint could appear in that situation too, but this situation was deemed to be out of scope. 65 | 66 | ### References 67 | 68 | The source of the issue: 69 | 70 | * [PackageBuilder.cs:588](https://github.com/NuGet/NuGet.Client/blob/1f1213960012d6452b63a267607d1e237318025e/src/NuGet.Core/NuGet.Packaging/PackageCreation/Authoring/PackageBuilder.cs#L588) ([Introduced in 2018](https://github.com/NuGet/NuGet.Client/pull/2450/files#diff-7d862ed9e52e34d5ee39d6ccbf6f8a7cR494)) 71 | * [PackageBuilder.cs:613](https://github.com/NuGet/NuGet.Client/blob/0b178b9d10f7876fc7daa18487844f28d6bfea6b/src/NuGet.Core/NuGet.Packaging/PackageCreation/Authoring/PackageBuilder.cs#L613) ([Introduced in 2019](https://github.com/NuGet/NuGet.Client/commit/c05f9afa9c2fcee7fbe10754521b3f6424bee128)) 72 | 73 | Zip files are always case-sensitive, so the use of `GetStringComparisonBasedOnOS` in both instances is incorrect. 74 | 75 | ------------ 76 | 77 | A modified NuGet samples exhibiting the issue: 78 | 79 | * [PackageLicenseFileExample](https://github.com/PathogenPlayground/Samples/blob/31f2ea7047a2c90058a73407eee618a068d03107/PackageLicenseFileExample/PackageLicenseFileExample.csproj) 80 | * [PackageIconExample](https://github.com/PathogenPlayground/Samples/blob/31f2ea7047a2c90058a73407eee618a068d03107/PackageIconExample/PackageIconExample.csproj) 81 | -------------------------------------------------------------------------------- /accepted/archive/PackageValidation/RefAssembliesInNuspecMatchRefFolder.md: -------------------------------------------------------------------------------- 1 | # Validate that Reference Assemblies in Nuspec are present in the `/ref` Folder and Vice Versa 2 | 3 | * Status: **Unstarted** 4 | * Author(s): [Joshua Silas](https://github.com/JarahSi) 5 | 6 | ## Issue 7 | [8296](https://github.com/NuGet/Home/issues/8296) - Validation for ref assemblies in nuspec and `ref` folder 8 | 9 | ## Background 10 | 11 | In the nuspec, there is a `` element that lists the assemblies that are meant for compile time specifically. This correpsonds to the reference dlls found in the `/ref` folder. 12 | 13 | Here is a sample nuspec with a `` node: 14 | ``` 15 | 16 | 17 | 18 | 19 | 20 | 21 | ``` 22 | 23 | and here is a sample package directory: 24 | ``` 25 | lib\ 26 | net472\ 27 | MyLib.dll 28 | MyHelpers.dll 29 | MyUtilities.dll 30 | ref\ 31 | net472\ 32 | MyLib.dll 33 | MyHelpers.dll 34 | ``` 35 | 36 | Here you can see that files mentioned in the nuspec are present in the `ref/` folder. However, if the nuspec and the `ref/` folder are inconsistent with each other, there can be issues. 37 | 38 | * In `package.config` (PC) projects 39 | * PC projects don't ultilize the `ref/` folder if there is a reference section defining assets 40 | * In `PackageReference` (PR) projects 41 | * PR projects, by default, use `lib/` assets as runtime assets. If there are any `ref/` assets, they're used for compile time; if not, then `lib/` assets are used for compile time. 42 | * If there are references in the nuspec, it uses those for compile time. 43 | * The main problem: if a project is downgraded from `PackageReference` (PR) project to a PC project, there will be compile errors 44 | * There is a bug where a package contains only `lib/` assets, and a `` node in the nuspec. This bug causes only the references to be used for both compile and runtime, instead of using all lib assets at runtime. 45 | * The project will crash at runtime due to the files it's looking for being missing 46 | 47 | ## Who are the customers 48 | 49 | - Package authors 50 | 51 | ## Requirements 52 | 53 | - Warn the author that the references in the nuspec have not been found in the `/ref` folder 54 | 55 | ## Proposal 56 | 57 | The proposed solution is a rule that would validate that a package with a `references` node in the nuspec contains those libraries in the `ref/` folder. This rule would be run during `pack` and have an associated warning code of `NU5131`. 58 | 59 | ### Expected Package 60 | 61 | This is an example of a correct package. The nuspec contains: 62 | ``` 63 | 64 | 65 | 66 | 67 | 68 | 69 | ``` 70 | and the package contains: 71 | ``` 72 | lib\ 73 | net472\ 74 | MyLib.dll 75 | MyHelpers.dll 76 | MyUtilities.dll 77 | ref\ 78 | net472\ 79 | MyLib.dll 80 | MyHelpers.dll 81 | ``` 82 | 83 | The compile items in this case would be `MyLib.dll` and `MyHelpers.dll`. The rule would consider this correct and not raise any warnings, because it contains both files in the `references` node and in the `ref/` folder. 84 | 85 | ### File called in nuspec is not found in the `ref/` 86 | However, an incorrect instance would contain a nuspec: 87 | ``` 88 | 89 | 90 | 91 | 92 | 93 | 94 | ``` 95 | 96 | and the package itself contains: 97 | ``` 98 | lib\ 99 | net472\ 100 | MyLib.dll 101 | MyHelpers.dll 102 | MyUtilities.dll 103 | ref\ 104 | net472\ 105 | MyHelpers.dll 106 | ``` 107 | 108 | The rule will see that the directory `ref/net472` doesn't contain the file `MyLib.dll`, and raise the warning code `NU5131`. 109 | 110 | ### File called in `ref/` is not found in the nuspec 111 | 112 | This would follow the same logic as the previous scenario. There needs to be an exact match. 113 | This type of validation will only occur if the nuspec has a `references` element 114 | 115 | ### Validation for each subfolder 116 | 117 | This rule will ensure that every target framework has the correct reference dlls in it. 118 | 119 | For example this nuspec cotains: 120 | ``` 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | ``` 136 | 137 | then the package would contain: 138 | ``` 139 | ref\ 140 | net472\ 141 | MyLib.dll 142 | MyHelpers.dll 143 | net462\ 144 | MyLib.dll 145 | MyHelpers.dll 146 | net45\ 147 | MyLib.dll 148 | MyHelpers.dll 149 | ``` 150 | 151 | ### Warning Code 152 | The associated warning code `NU5131` will be raised once and will have a warning message that references each mistake: 153 | 154 | > References were found in the nuspec, but some were not found within the ref folder. Add the following reference assemblies: 155 | {list of missing dlls and what folder they were omitted from} 156 | -------------------------------------------------------------------------------- /accepted/archive/Prerelease-Option.md: -------------------------------------------------------------------------------- 1 | # Spec Name 2 | 3 | * Status: In Review 4 | * Author(s): [Martin Ruiz](https://github.com/martinrrm) 5 | * Issue: [4699](https://github.com/NuGet/Home/issues/4699) dotnet add package - support for NuGet "Pre" version 6 | 7 | ## Problem Background 8 | 9 | Customers want to add the latest version of a package to their project, even if the latest version is prerelease. 10 | 11 | ## Who are the customers 12 | 13 | All dotnet.exe customers 14 | 15 | ## Goals 16 | 17 | Allow dotnet CLI users to install the latest version of a NuGet package, including prerelease versions. This can be accomplished by adding an option to the existing command `add package` that enables installing the last version, including prerelease versions. 18 | 19 | ## Non-Goals 20 | 21 | ## Solution 22 | 23 | Add the option `--prerelease` in the command `add package`. This command will get the latest version of the package available even if it is not a stable version. 24 | 25 | When searching for the latest version available, only listed packages will be considered. 26 | 27 | ### Scenarios 28 | 29 | 30 | | Command | Available Versions | Output Version | Description | 31 | |---------|--------------------|------------------|-------------| 32 | | `dotnet.exe add Contoso.Library` | Contoso.Library 2.0.0
Contoso.Library 3.0.0
Contoso.Library 3.3.1-preview.3
| 3.0.0 | latest stable version of package | 33 | | `dotnet.exe add Contoso.Library --prerelease` | Contoso.Library 2.0.0
Contoso.Library 3.0.0
Contoso.Library 3.3.1-preview.3
| 3.3.1-preview.3 | latest version of package | 34 | | `dotnet.exe add Contoso.Library --prerelease --version 3.0.0` | Contoso.Library 2.0.0
Contoso.Library 3.0.0
Contoso.Library 3.3.1-preview.3
| error | The user cannot use the `--prerelease` and `--version` commands at the same time | 35 | | `dotnet.exe add Contoso.Library` | Contoso.Library 2.0.0
Contoso.Library 3.0.0
Contoso.Library 3.3.1-preview.3
Contoso.Library 3.4.0
| 3.4.0 | latest stable version of package | 36 | | `dotnet.exe add Contoso.Library --prerelease` | Contoso.Library 2.0.0
Contoso.Library 3.0.0
Contoso.Library 3.3.1-preview.3
Contoso.Library 3.4.0
| 3.4.0 | latest version of package | 37 | 38 | ## Future Work 39 | 40 | * When the design has been approved, we will create an issue with the [dotnet.exe team](https://github.com/dotnet/sdk) 41 | 42 | ## Open Questions 43 | 44 | * Do we need to add a shorthand version for prerelease? `--p` 45 | 46 | ## Considerations 47 | 48 | ### References 49 | 50 | * [dotnet add package reference](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-add-reference) 51 | -------------------------------------------------------------------------------- /accepted/archive/RefreshMetrics.md: -------------------------------------------------------------------------------- 1 | # Runtime Identifier Graph From Project 2 | 3 | * Status: **Reviewing** 4 | * Author(s): [Nikolche Kolev](https://github.com/nkolev92) 5 | 6 | ## Issue 7 | 8 | [8369](https://github.com/NuGet/Home/issues/8369) - Metrics to track the refresh rate of the PM UI. 9 | 10 | ## Background 11 | 12 | The general consensus among customers is that the PM UI is not very response and does too much work. 13 | The 3 general categories of issues are: 14 | 15 | * Start up. 16 | * Too much UI thread work. 17 | * Too frequent refreshes. 18 | 19 | The goal in the last week had been the "too frequent" refreshes. 20 | We're now adding telemetry to track the improvements we have made, and to help us understand user behavior and other potential issues we might have. 21 | 22 | ## Who are the customers 23 | 24 | All NuGet in Visual Studio customers. 25 | 26 | ## Requirements 27 | 28 | * A mechanism for the SDK to deliver NuGet the Runtime Identifier Graph 29 | 30 | ## Solution 31 | 32 | We will analyze all the codepaths that trigger some sort of a potentially heavy refresh operation and add telemetry about it. 33 | We will introduce a new event `/vs/nuget/PMUIRefresh`. 34 | All events in a PM UI session (defined as the period between the opening and closing of the UI) will have the same guid. 35 | Furthermore this event will contain the following properties: 36 | 37 | * IsSolutionLevel - specifies whether the PM UI session is solution or project based. 38 | * RefreshSource - which code path triggered the change. See below. 39 | * RefreshStatus - the refresh status. See below. 40 | * Tab - Which tab is open. All, Installed, UpdatesAvailable, Consolidate are the options. Equivalent to the ItemFilter enum/ 41 | * TimeSinceLastRefresh - How much time since the last refresh event was triggered. This is a niche use, as it will help us figure out if certain events can be batched. Ideally all events are user-action driven and as minimal as possible. 42 | 43 | All of this information will help us understand the amount of refresh events skipped by our work. 44 | If there are any other patterns of refresh events that warrant investigation. 45 | It will also allow us to understand the most frequent source of refreshes. 46 | 47 | ### Refresh source 48 | 49 | | Refresh sources | Reasoning | 50 | |-|-| 51 | | ActionsExecuted | A NuGet Package Manager action has been executed. That could be install/uninstall/update using the PM UI, or an IVS/PMC call. | 52 | | CacheUpdated | A nomination has happened and it has updated the NuGet VS project cache. | 53 | | CheckboxPrereleaseChanged | The prelease checkbox changed. | 54 | | ClearSearch | The customer cleared the search text. | 55 | | ExecuteAction | A NuGet package manager action has completed. This is an extra refresh added to minimize the performance impact of nominations and ActionsExecuted events on the PM UI.| 56 | | FilterSelectionChanged | The tab changed. | 57 | | PackageManagerLoaded | The PM UI has been loaded. This could be the opening the PM UI, or it could be a user switching back to the UI after having it open in the background. | 58 | | PackageSourcesChanged | The package sources have changed. This means the customer likely edited the sources in the sources UI. | 59 | | ProjectsChanged | A project was loaded/unloaded/renamed. | 60 | | RestartSearchCommand | The refresh button. | 61 | | SourceSelectionChanged | The customer changed the source from the dropdown. | 62 | | PackagesMissingStatusChanged | The customer restored a previously unrestored solution and now certain packages are available. Specific to packages.config projects. | 63 | 64 | ### Refresh status 65 | 66 | | Refresh status | Reasoning | 67 | |-|-| 68 | |Success | A refresh has been triggered | 69 | | NotApplicable | An event happened, but it was not applicable for this current UI, likely because it was for a different project. | 70 | | NoOp | A refresh event deemed unnecessary as it'd be doing duplicate work. See better performance | 71 | 72 | ### Validation 73 | 74 | Manual only. We don't have further telemetry tests. 75 | 76 | ## Considerations 77 | 78 | ### What about performance 79 | 80 | Lots of these events are sent on the UI thread. The flip side is that, this is relatively cheap. 81 | 82 | ### Why not include the project name 83 | 84 | It's PII. We also have a unique guid for the active project in the generic VS telemetry. 85 | -------------------------------------------------------------------------------- /accepted/archive/RuntimeJsonFromProject.md: -------------------------------------------------------------------------------- 1 | # Runtime Identifier Graph From Project 2 | 3 | * Status: **Reviewing** 4 | * Author(s): [Nikolche Kolev](https://github.com/nkolev92) 5 | 6 | ## Issue 7 | 8 | [7342](https://github.com/NuGet/Home/issues/7351) - Mechanism for supplying runtime.json outside of a package 9 | 10 | ## Background 11 | 12 | In Core 3.0, the platform will not be represented as a traditional NuGet package. As such, there's no obvious place for the RID graph to be provided to NuGet. 13 | The SDK now makes Targeting & Runtime pack decisions prior to restore and provides them through PackageDownload. Due to that it needs to use the same runtime identifier graph as NuGet. 14 | 15 | ## Who are the customers 16 | 17 | All .NET Core customers. 18 | 19 | ## Requirements 20 | 21 | * A mechanism for the SDK to deliver NuGet the Runtime Identifier Graph 22 | 23 | ## Solution 24 | 25 | ```xml 26 | 27 | full/path/to/runtime.json 28 | 29 | ``` 30 | 31 | The MSBuild recommendation is that files are usually represented as MSBuild items. However we would like to avoid updating the nomination API for this small change. 32 | The property is one per framework, meaning that different frameworks can have a different runtime identifier graph. 33 | 34 | ## Runtime.Json in assets file 35 | 36 | An update to the runtime.json file in the project should cause restore to reevaluate as the resolved graph might be affected. As such the runtime.json path needs to be included in the project section of the assets file. 37 | 38 | The package spec in the json will be updated as follows. 39 | 40 | ```json 41 | "project": { 42 | "version": "1.0.0", 43 | "restore": { 44 | "projectUniqueName": "F:\\FrameworkReference\\LibraryA\\LibraryA.csproj", 45 | "projectName": "LibraryA", 46 | "projectPath": "F:\\FrameworkReference\\LibraryA\\LibraryA.csproj", 47 | "packagesPath": "F:\\FrameworkReference\\globalPackagesFolder", 48 | "outputPath": "F:\\FrameworkReference\\LibraryA\\obj\\", 49 | "projectStyle": "PackageReference", 50 | "fallbackFolders": [ 51 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 52 | ], 53 | "configFilePaths": [ 54 | "C:\\Users\\User\\AppData\\Roaming\\NuGet\\NuGet.Config", 55 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 56 | ], 57 | "originalTargetFrameworks": [ 58 | "netcoreapp3.0" 59 | ], 60 | "sources": { 61 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 62 | "https://api.nuget.org/v3/index.json": {} 63 | }, 64 | "frameworks": { 65 | "netcoreapp3.0": { 66 | "projectReferences": {} 67 | } 68 | }, 69 | "warningProperties": { 70 | "warnAsError": [ 71 | "NU1605" 72 | ] 73 | } 74 | }, 75 | "frameworks": { 76 | "netcoreapp3.0": { 77 | "frameworkReferences": { 78 | "Microsoft.WindowsDesktop.App|WPF" : { 79 | "privateAssets" : "none" 80 | }, 81 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\3.0.100\\runtime.json", 82 | } 83 | } 84 | } 85 | ``` 86 | 87 | There will be no additional changes to the assets file. 88 | 89 | ### Nomination Updates 90 | 91 | There will not be any updates to the nomination API. 92 | The IVSTargetFrameworkInfo contains a property bag where in the information will be provided. 93 | 94 | [Example](https://github.com/NuGet/NuGet.Client/blob/e8890282d9225d2aeb63deba3ae111f87cfc5673/src/NuGet.Clients/NuGet.SolutionRestoreManager.Interop/IVsTargetFrameworkInfo.cs): 95 | 96 | ```cs 97 | [ComImport] 98 | [Guid("9a1e969a-3e1e-4764-a48b-b823fe716fab")] 99 | public interface IVsTargetFrameworkInfo 100 | { 101 | /// 102 | /// Target framework name in full format. 103 | /// 104 | string TargetFrameworkMoniker { get; } 105 | 106 | /// 107 | /// Collection of project references. 108 | /// 109 | IVsReferenceItems ProjectReferences { get; } 110 | 111 | /// 112 | /// Collection of package references. 113 | /// 114 | IVsReferenceItems PackageReferences { get; } 115 | 116 | /// 117 | /// Collection of project level properties evaluated per each Target Framework, 118 | /// e.g. PackageTargetFallback. 119 | /// 120 | IVsProjectProperties Properties { get; } 121 | } 122 | ``` 123 | 124 | ## Pack scenarios 125 | 126 | There are no pack scenarios. These are framework assets and should not be packaged. 127 | 128 | ### Validation 129 | 130 | NuGet will do the same validations for the runtime graph as is does from the package. Currently those are limited. An improvement to this will be done orthogonally to this effort. 131 | No special validation will be added for the project provided runtime.json and no preference is given to either project or package provided runtime.json. 132 | If the path provided to NuGet does not exist, NuGet will raise a coded error. 133 | 134 | ## Considerations 135 | 136 | ### Why not make the runtime identifier graph path an item 137 | 138 | The concern here are implementational difficulty. We would prefer to avoid another nomination API change for something as little as this. There are no scenarios where more than just the path needs to be provided to NuGet. 139 | 140 | ### Will we ever need to provide more than one runtime identifier graph 141 | 142 | There is no such scenario at this point. The same information could be provided in 1 runtime.json. If needed later, we can extend this design to accept a `;` delimited list of paths. 143 | -------------------------------------------------------------------------------- /accepted/archive/UserWideConfiguration-AdditionalExtensibilityFolders.md: -------------------------------------------------------------------------------- 1 | 2 | # Additional user wide configuration options 3 | 4 | * Status: In Review 5 | * Author(s): [Nikolche Kolev](https://github.com/nkolev92) 6 | * Issue: [9394](https://github.com/NuGet/Home/issues/9394) NuGet should support multiple config files in %APPDATA%\NuGet directory 7 | 8 | ## Problem Background 9 | 10 | The XAML and WinForms teams want to allow control library installers to add user-specific NuGet fallback folders by having their SDK installers drop config files in %APPDATA%\NuGet. On uninstall this file would be deleted. 11 | 12 | We considered two alternatives which I mentioned as workarounds above: 13 | 14 | 1. Require SDK installers to drop config files in %ProgramFiles(x86)%\NuGet\Config instead. However, we've gotten feedback from control vendors that they would like the option of installing without elevation which prevents the installer from being able to write to this directory. 15 | 1. Require SDK installers to modify the one %APPDATA%\NuGet\NuGet.config file. However this seems error prone. 16 | 17 | ## Who are the customers 18 | 19 | All NuGet customers are affected. Primary consumers are the WPF and WinForms customers. 20 | 21 | ## Goals 22 | 23 | * Provide a way for 3rd party vendors to add new user-wide configuration files without elevation. 24 | 25 | ## Non-Goals 26 | 27 | ## Solution 28 | 29 | We will start detecting additional configs from the user specific directory similar to the extensibility from machine wide configs. 30 | 31 | Given that these are additional configs, they will be merged with lower priority than the default user specific config. The rest are merged deterministically in lexicographical order because they are not expected to conflict. 32 | The determinism allows an out in case something really goes wrong. 33 | 34 | ### A new folder for additional user-wide configuration 35 | 36 | Use %APPDATA%\NuGet\config\` on Windows and `~/.config/NuGet/config/` or `~/.nuget/NuGet/config/` on Mac/Linux 37 | 38 | Pros: 39 | 40 | * Satisfies all the requirements. 41 | 42 | Cons: 43 | 44 | * Arguably not as intuitive as some other proposals, but it doesn't suffer from the same potential issues with unexpected configuration files. Given the difficulty one could have identifying which config brings in what source or fallback folder. The trade off might be good enough. 45 | 46 | Worth to mention that while there have been instances of additional configs in the current user wide directory, it's impossible for us to determine the exact indicidence. We are likely talking about very few customers. 47 | 48 | ### Reading and writing priority 49 | 50 | Say we have 1 solution configuration file and 2 user-wide configuration files. 51 | 52 | * Local - solution file. 53 | * User - The default user wide file from %APPDATA%\NuGet 54 | * AdditionalUser - The additional user file from whichever the new location is. 55 | 56 | The contents of the files are as follows respectively: 57 | 58 | Local 59 | 60 | ```xml 61 | 62 | 63 | 64 | 65 | 66 | 67 | ``` 68 | 69 | User 70 | 71 | ```xml 72 | 73 | 74 | 75 | 76 | 77 | 78 | ``` 79 | 80 | AdditionalUser 81 | 82 | ```xml 83 | 84 | 85 | 86 | 87 | 88 | 89 | ``` 90 | 91 | ### Reading priority 92 | 93 | Given that the local file is the closest and the additional user configuration is considered the furthest, when reading `key2` for example will have the value `local`. 94 | 95 | ### Writing priority 96 | 97 | Conversely, when writing we write to the furthest available config file. 98 | In order to preserve backwards compatibility on the writing side, we will consider this additional user config as `read only`. The configuration commands will not write to the additional configuration files. 99 | Specifically if we were to write `key5`, it would be written to the `User` config file. 100 | 101 | ## Future Work 102 | 103 | None 104 | 105 | ## Open Questions 106 | 107 | ## Considerations 108 | 109 | The considered but ultimately not accepted proposal is detailed below. 110 | 111 | ### Re-use the existing %APPDATA%\NuGet directory 112 | 113 | Pros: 114 | 115 | * Simple & intuitive. Windows: %appdata%\NuGet\*.Config 116 | Mac/Linux: ~/.config/NuGet/*.[C|c]onfig or ~/.nuget/NuGet/*.[C|c]onfig. 117 | 118 | Cons: 119 | 120 | * This is an existing folder. There are some known instances of unexpected NuGet.config files there. Examples include: NuGet_backup.config found by the OP of the linked issue. It's also likely there are some additional copies of NuGet.config in there. 121 | 122 | ### References 123 | 124 | * [9394](https://github.com/NuGet/Home/issues/9394) NuGet should support multiple config files in %APPDATA%\NuGet directory 125 | * [Configuring NuGet behavior](https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#config-file-locations-and-uses) 126 | * [Pull request](https://github.com/NuGet/NuGet.Client/pull/3421) implementing the first approach. 127 | -------------------------------------------------------------------------------- /implemented/2021/NuGet-CPP-CLI-Improvements.md: -------------------------------------------------------------------------------- 1 | # NuGet C++/CLI support 2 | 3 | - NuGet uses 2 properties to infer frameworks, TargetFrameworkMoniker (Ex: `.NETCoreApp,Version=v5.0`) & TargetPlatformMoniker (Ex: `Windows,Version=10.0.19041.0`). Both these properties are derived from the equivalently named properties with Identifier and Version instead of Moniker. 4 | - Some of the relevant compatibility rules in NuGet, note that framework is first the check, while platform is the second check. Compat rules are all or nothing. There's no partial compat. 5 | - net7.0 can depend on net6.0 6 | - net7.0-windows10.0.19041 can depend on net7.0 7 | - net7.0 cannot depend on net7.0-windows10.0.19041 8 | - net7.0-windows10.0.20000 can depend on net7.0-windows10.0.19041 9 | - net7.0-windows10.0.19041 can depend on net7.0-windows10.0.20000 10 | - The compatibility rules at many layers, not just NuGet. That includes the .NET SDK, MSBuild, and in general the compat library ships as it's own feature. 11 | 12 | Today, when determining the framework for C++/CLI projects, NuGet only reads the TargetFrameworkMoniker (this was a decision we jointly made after the initial version of the feature shipped). 13 | This prevents a C++/CLI project from referencing a C# project targeting windows. 14 | 15 | Given the following scenario: 16 | 17 | C# (net7.0-windows) -> C++/CLI -> C# (net7.0-windows) 18 | 19 | The C++/CLI project cannot reference the C# project. 20 | 21 | Proposal: 22 | 23 | - NuGet will start reading the TargetPlatformMoniker and use it in it's compat rules above. 24 | - C++/CLI projects will need a TargetPlatformVersion set that's compatible with the C# projects that are being referenced. 25 | - The reasoning why this version needs to exist is that when the 1st C# project references the C++/CLI project, it receives all it's transitive references, so the C# projects both need to be compatible with one another. 26 | - If TargetPlatformMoniker or TargetPlatformVersion are properties *used* in C++/CLI projects, we can consider an alternative property for NuGet to read for C++/CLI projects only. 27 | 28 | Drawbacks: 29 | 30 | - The end-user may need to manage a value in their C++/CLI project that has no true meaning for the C++/CLI project itself. 31 | -------------------------------------------------------------------------------- /implemented/2023/package-source-mapping-status-PMUI.md: -------------------------------------------------------------------------------- 1 | # Package Source Mapping Status in the PM UI 2 | * Start Date: 5/17/23 3 | * Authors: Donnie Goodson ([donnie-msft](https://github.com/donnie-msft)) 4 | * Issue: https://github.com/NuGet/Home/issues/12586 5 | 6 | ## Summary 7 | 8 | Currently, the NuGet Package Manager in Visual Studio (PM UI) does not support the package source mapping feature. Introducing source mapping status for the package selected in the Details Pane of PM UI is the first step to bringing this feature into the PM UI. 9 | 10 | Package Source Mapping in Restore was introduced in: https://github.com/NuGet/Home/blob/dev/implemented/2021/PackageSourceMapping.md 11 | 12 | ## Motivation 13 | 14 | Showing in the PM UI Details Pane the package source mapping status, as well as a shortcut to manage the mappings in the VS Options dialog, will allow customers to onboard to, or see the state of, their package source mappings at a glance. The knowledge of whether a package is already mapped may lead a customer to modify their source mappings using the existing VS Options dialog. 15 | 16 | As customers begin seeing source mapping status in the PM UI and becoming more aware of the feature, we can learn more about what they want from the PM UI as far as package management actions (i.e., installing/updating a package). The goal is to let customers drive the next evolution of package source mapping in PM UI. 17 | 18 | ## Explanation 19 | 20 | ### Functional Explanation 21 | 22 | On the details pane there will be new information shown below the Install/Update buttons. 23 | 24 | #### Mapping Status 25 | 26 | A label will appear under the `Install/Update` button indicating the Package Source Mapping status. 27 | 28 | | Project Onboarded | Selected Package is Mapped | Status Icon | Status Text 29 | |--------------|-----------|------------|------------| 30 | | Disabled | N/A | ![Status icon Information](../../meta/resources/PackageSourceMapping/packageSourceMappingStatusInfo.png) | Package source mapping is off. | 31 | | Onboarded | Not Mapped | ![Status icon Offline](../../meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOffline.png) | Requires a package source mapping. | 32 | | Onboarded | Mapped | ![Status icon OK](../../meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOK.png) | Package source mapping found. | 33 | 34 | Each of the above "Status Text" are shown in the following samples: 35 | ![PM UI Package Source Mapping "Not Onboarded" status](../../meta/resources/PackageSourceMapping/packageSourceMappingNotOnboarded.png) 36 | ![PM UI Package Source Mapping "Not Found" status](../../meta/resources/PackageSourceMapping/packageSourceMappingNotFoundForPackage.png) 37 | ![PM UI Package Source Mapping "Found" status](../../meta/resources/PackageSourceMapping/packageSourceMappingFound.png) 38 | 39 | Desired behavior for this status are below: 40 | - There are no visual indicators for the Package Source Mapping status in details pane ([#12609](https://github.com/NuGet/Home/issues/12609)) 41 | - Install/Update buttons are enabled in Details Pane when the PackageSourceMapping is not found ([#12607](https://github.com/NuGet/Home/issues/12607)) 42 | 43 | #### Settings link 44 | 45 | A button to launch VS Settings to the `NuGet Package Source Mapping` settings page will be beside the label. The behavior is similar to the settings button beside the sources dropdown in the top right of the PM UI. 46 | 47 | The result of pressing the button is shown in the following sample: 48 | ![PM UI result of pressing the button that is a shortcut to VS Options page for Package Source Mappings](../../meta/resources/PackageSourceMapping/packageSourceMappingOptionsLink.png) 49 | 50 | Desired behavior for this shortcut are below: 51 | - VS Options shortcut from PMUI for PackageSourceMappings doesn't scroll to or select the Package ([#12608](https://github.com/NuGet/Home/issues/12608)) 52 | 53 | 54 | ### Technical Explanation 55 | 56 | Package Source Mappings will be loaded from Settings when the PM UI is initialized and stored in a cache. Status for each selected package will be rendered in the Details Pane by using this cache as its data source. 57 | 58 | Any changes to the Settings by external edits to the `nuget.config(s)` will invalidate the source mapping cache and cause the PM UI to refresh. Edits made externally to VS (such as in VSCode or any text editor) will be reflected automatically inside the Details Pane, without showing a stale source mapping status. 59 | 60 | Note that this spec will only address the top-level package. In the scenario where a top-level package is mapped, but a transitive package is not mapped, a Package Management action like Install may still fail with a restore error due to the unmapped transitive dependency, just as it does prior to implementing this spec. 61 | 62 | ## Drawbacks 63 | 64 | ## Rationale and Alternatives 65 | 66 | No alternatives for how to show the Package Source Mapping status have been proposed. 67 | 68 | ## Prior Art 69 | 70 | None 71 | 72 | ## Unresolved Questions 73 | 74 | None 75 | 76 | ## Future Possibilities 77 | 78 | - Adapting the Package Management Actions of the PM UI to the Package Source Mapping feature are part of a separate spec: [Package Source Mapping Package Management Actions in the PM UI ](package-source-mapping-actions-PMUI.md) -------------------------------------------------------------------------------- /meta/README.md: -------------------------------------------------------------------------------- 1 | # NuGet Proposal Process 2 | 3 | ## How do I create a proposal? 4 | 5 | - Fork or clone https://github.com/NuGet/Home 6 | - Copy `meta/template.md` into `accepted//your-proposal-name.md` 7 | - Fill in the template with your proposal. 8 | - Submit a PR to the `NuGet/Home` repo 9 | - (Optional) Create a new discussion to talk about it https://github.com/NuGet/Home/discussions/new 10 | 11 | ## How does a proposal review work? 12 | 13 | The official place for discussion for a proposal is its pull request or a [GitHub Discussion](https://github.com/NuGet/Home/discussions). Anyone, both NuGet contributors and non-contributors, can participate in the discussion and ask questions and provide constructive feedback to the proposal. Please keep in mind that only NuGet contributors are able to act upon the proposal even if other users can comment. 14 | 15 | All discussions surrounding a proposal are covered by the [.NET Foundation code of conduct](https://dotnetfoundation.org/code-of-conduct). Please keep discussions constructive, respectful, and focused on what's best for the .NET ecosystem. If discussions get heated, the NuGet team may at its own discretion moderate the discussion to enforce the code of conduct. 16 | 17 | ## What happens to a proposal? 18 | 19 | When there is consensus among the NuGet contributors and .NET community of the direction of the proposal, and at least one NuGet contributor has signed off on the proposal, it will be merged into the `Accepted` folder (eg, `accepted//your-proposal-name.md`). 20 | Otherwise, the proposal will be withdrawn by closing the PR with the reasoning mentioned in the PR. 21 | 22 | ## What happens when a proposal is accepted? 23 | 24 | Once accepted, it will be scheduled by the NuGet contributors to be implemented or put up for grabs for anyone to implement by making a PR in the appropriate repository. 25 | 26 | ## What happens when a proposal is implemented? 27 | 28 | When the changes described in the accepted proposal have been implemented and merged into the relevant repository and due for release the corresponding proposal will be moved to the `implemented` folder. The linked GitHub issue will be closed upon merging to the relevant branch. 29 | 30 | If you'd like to implement an `accepted` proposal, please make a PR in the appropriate repository and mention the proposal in the PR and Issue. 31 | 32 | ## What happens when a proposal is withdrawn? 33 | 34 | When a proposal is reviewed for its accuracy and relevance and no longer fits the goals of the project or is no longer a candidate for implementation, the PR containing the proposal will be **Closed** with a clear reason as to why. We do not lock conversations on these PRs, so future discussions can happen on the closed PR in case the community input or the circumstances preventing implementation changes. 35 | -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Account Page - Delete account collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Account Page - Delete account collapsed.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded - request submitted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded - request submitted.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded - request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded - request.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Account Page - Delete account expanded.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide10.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide10.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide11.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide2.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide3.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide4.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide5.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide6.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide7.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide8.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide9.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide9.1.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/Slide9.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/Slide9.2.PNG -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/readme.md: -------------------------------------------------------------------------------- 1 | # Placeholder for feature UI mockup 2 | -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/Account_delete_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/v2/Account_delete_01.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/Account_delete_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/v2/Account_delete_02.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/Account_delete_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/v2/Account_delete_03.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/Account_delete_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/v2/Account_delete_05.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/Account_delete_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/AccountDeletionWorkflow/v2/Account_delete_06.png -------------------------------------------------------------------------------- /meta/resources/AccountDeletionWorkflow/v2/readme.md: -------------------------------------------------------------------------------- 1 | Refreshed workflow 2 | -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/CargoTreeExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/CargoTreeExample.png -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/ProjectWithDiamondDependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/ProjectWithDiamondDependency.png -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/ProjectWithFrameworksOptionSpecified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/ProjectWithFrameworksOptionSpecified.png -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/ProjectWithSingleDependencyPath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/ProjectWithSingleDependencyPath.png -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/SolutionWithMultipleProjects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/SolutionWithMultipleProjects.png -------------------------------------------------------------------------------- /meta/resources/DotnetNugetWhy/SolutionWithProjectsThatHaveEmptyGraphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/DotnetNugetWhy/SolutionWithProjectsThatHaveEmptyGraphs.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ComboBox1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ComboBox1.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ComboBoxGif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ComboBoxGif.gif -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ComboBox_Error.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ComboBox_Error.PNG -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/FloatingVersionInPMUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/FloatingVersionInPMUI.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/PackageManagerForSolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/PackageManagerForSolution.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ProjectFile&SolutionExplorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ProjectFile&SolutionExplorer.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ProjectPMUIInstalled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ProjectPMUIInstalled.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ProjectPMUIUpdates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ProjectPMUIUpdates.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/RangesInPMUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/RangesInPMUI.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/ShouldUpdateRanges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/ShouldUpdateRanges.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/SolutionPMUIUpdates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/SolutionPMUIUpdates.png -------------------------------------------------------------------------------- /meta/resources/FloatingVersionsInPMUI/SolutionView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FloatingVersionsInPMUI/SolutionView.png -------------------------------------------------------------------------------- /meta/resources/FormatChooser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/FormatChooser.png -------------------------------------------------------------------------------- /meta/resources/Issue-triaging/IssueTriagingFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/Issue-triaging/IssueTriagingFlow.png -------------------------------------------------------------------------------- /meta/resources/Issue-triaging/Upvotes-Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/Issue-triaging/Upvotes-Example.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/Gold bar.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/Gold bar.PNG -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/MainUpgraderUI v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/MainUpgraderUI v3.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/MainUpgraderUI.bmpr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/MainUpgraderUI.bmpr.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/MainUpgraderUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/MainUpgraderUI.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/PMUI with gold bar migrate.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/PMUI with gold bar migrate.PNG -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/PMUI with gold bar.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/PMUI with gold bar.PNG -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/manager UI project upgrade option.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/manager UI project upgrade option.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/report.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/report.PNG -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/right click project menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/right click project menu.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/upgrade preview window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/upgrade preview window.png -------------------------------------------------------------------------------- /meta/resources/MigratorToolSupport/upgrade summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MigratorToolSupport/upgrade summary.png -------------------------------------------------------------------------------- /meta/resources/MultipleAPIKeys/InitialMultipleAPIKeys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/MultipleAPIKeys/InitialMultipleAPIKeys.png -------------------------------------------------------------------------------- /meta/resources/MultipleAPIKeys/d.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /meta/resources/NuGet.orgTFMs/PackageDetailsWithTFMs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGet.orgTFMs/PackageDetailsWithTFMs.png -------------------------------------------------------------------------------- /meta/resources/NuGet.orgTFMs/badges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGet.orgTFMs/badges.png -------------------------------------------------------------------------------- /meta/resources/NuGet.orgTFMs/compatibility_gaps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGet.orgTFMs/compatibility_gaps -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/dependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/dependencies.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/header.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/headernew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/headernew.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/overallformat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/overallformat.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/overallnew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/overallnew.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/overallreal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/overallreal.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/overallv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/overallv2.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/readme.png -------------------------------------------------------------------------------- /meta/resources/NuGetPackageDetails/readmenew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/NuGetPackageDetails/readmenew.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_byAuthor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_byAuthor.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_byBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_byBlank.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_noLinkAuthor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/Mvc3CodeTemplatesCSharp_noLinkAuthor.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/byOwnerExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/byOwnerExample.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/contributorsAuthorExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/contributorsAuthorExample.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/detailsPaneOwnerAuthor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/detailsPaneOwnerAuthor.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/fakeOwnerResponse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/fakeOwnerResponse.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/intellicodeShowsAuthor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/intellicodeShowsAuthor.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/noOwnerNuGetOrg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/noOwnerNuGetOrg.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/ownerFallbackProjectURL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/ownerFallbackProjectURL.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/ownerLongTruncated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/ownerLongTruncated.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/ownerNuGetOrgLinks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/ownerNuGetOrgLinks.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/ownerNuGetOrgLinksNoIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/ownerNuGetOrgLinksNoIcon.png -------------------------------------------------------------------------------- /meta/resources/OwnerAuthor/realOwnerResponse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/OwnerAuthor/realOwnerResponse.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0010.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0020.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0030.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0040.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0050.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0060.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0070.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0080.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0090.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0100.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0110.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0120.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0130.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0140.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0150.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0160.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0170.png -------------------------------------------------------------------------------- /meta/resources/PA/PA_0180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PA/PA_0180.png -------------------------------------------------------------------------------- /meta/resources/PA/readme.md: -------------------------------------------------------------------------------- 1 | Placeholder for resources related to Package Applicability spec 2 | -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/01.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageImmutability/01.PNG -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/02.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageImmutability/02.PNG -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/03.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageImmutability/03.PNG -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/04.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageImmutability/04.PNG -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/05.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageImmutability/05.PNG -------------------------------------------------------------------------------- /meta/resources/PackageImmutability/README.md: -------------------------------------------------------------------------------- 1 | Package Immutability related assets 2 | -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_AllSource_RequiresMapping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_AllSource_RequiresMapping.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Checkbox_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Checkbox_example.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_NU1100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_NU1100.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Pin_snapshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Pin_snapshots.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_RadioButton_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_RadioButton_example.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_SingleSource_AutoCreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_SingleSource_AutoCreate.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Solution_AutoCreate_Annotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Solution_AutoCreate_Annotated.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Solution_AutoCreate_Unannotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Solution_AutoCreate_Unannotated.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Solution_RequiresMapping_Annotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Solution_RequiresMapping_Annotated.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_Solution_RequiresMapping_Unannotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_Solution_RequiresMapping_Unannotated.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_preview_addedSourceMappings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_preview_addedSourceMappings.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_preview_addedSourceMappings2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_preview_addedSourceMappings2.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/PMUI_preview_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/PMUI_preview_example.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/StatusInformation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/StatusInformation.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/VSOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/VSOptions.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/VSOptions1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/VSOptions1.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingFound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingFound.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingNotFoundForPackage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingNotFoundForPackage.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingNotOnboarded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingNotOnboarded.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingOptionsLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingOptionsLink.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOK.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOffline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingStatusIconOffline.png -------------------------------------------------------------------------------- /meta/resources/PackageSourceMapping/packageSourceMappingStatusInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageSourceMapping/packageSourceMappingStatusInfo.png -------------------------------------------------------------------------------- /meta/resources/PackageTypeSearch/InfoButton-Tooltip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageTypeSearch/InfoButton-Tooltip.png -------------------------------------------------------------------------------- /meta/resources/PackageTypeSearch/InfoButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageTypeSearch/InfoButton.png -------------------------------------------------------------------------------- /meta/resources/PackageTypeSearch/SearchPrompt-Dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageTypeSearch/SearchPrompt-Dropdown.png -------------------------------------------------------------------------------- /meta/resources/PackageTypeSearch/SearchPrompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageTypeSearch/SearchPrompt.png -------------------------------------------------------------------------------- /meta/resources/PackageUploadWorkflow/Package Upload Workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageUploadWorkflow/Package Upload Workflow.png -------------------------------------------------------------------------------- /meta/resources/PackageUploadWorkflow/package status page val fail.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageUploadWorkflow/package status page val fail.PNG -------------------------------------------------------------------------------- /meta/resources/PackageUploadWorkflow/package status page.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageUploadWorkflow/package status page.PNG -------------------------------------------------------------------------------- /meta/resources/PackageUploadWorkflow/readme.md: -------------------------------------------------------------------------------- 1 | Folder for assets related to design for Package Upload Workflow 2 | -------------------------------------------------------------------------------- /meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewAuthorBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewAuthorBanner.png -------------------------------------------------------------------------------- /meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/DetailViewBanner.png -------------------------------------------------------------------------------- /meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/ManagePackagesViewIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/ManagePackagesViewIcon.png -------------------------------------------------------------------------------- /meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/VersionListIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/PackageVulnerability/NuGet.orgVulnerabilitiesPhase1/VersionListIcon.png -------------------------------------------------------------------------------- /meta/resources/ProjectBoards/featureareas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ProjectBoards/featureareas.png -------------------------------------------------------------------------------- /meta/resources/ProjectBoards/fullkanban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ProjectBoards/fullkanban.png -------------------------------------------------------------------------------- /meta/resources/ProjectBoards/kanban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ProjectBoards/kanban.png -------------------------------------------------------------------------------- /meta/resources/ProjectBoards/releaseprojects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ProjectBoards/releaseprojects.png -------------------------------------------------------------------------------- /meta/resources/ReadMePMUI/NoReadmeTab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMePMUI/NoReadmeTab.png -------------------------------------------------------------------------------- /meta/resources/ReadMePMUI/PullRequestExperience.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMePMUI/PullRequestExperience.png -------------------------------------------------------------------------------- /meta/resources/ReadMePMUI/ReadmeTab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMePMUI/ReadmeTab.png -------------------------------------------------------------------------------- /meta/resources/ReadMeSupport/Display.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMeSupport/Display.PNG -------------------------------------------------------------------------------- /meta/resources/ReadMeSupport/Upload.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMeSupport/Upload.PNG -------------------------------------------------------------------------------- /meta/resources/ReadMeSupport/readme-markdown-preview-vs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/ReadMeSupport/readme-markdown-preview-vs.png -------------------------------------------------------------------------------- /meta/resources/SupportingPackageReference_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/SupportingPackageReference_2.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/CompleteExperience.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/CompleteExperience.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/GenerationsOfNET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/GenerationsOfNET.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM1.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM2.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/SearchByTFM3.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/SupportedPlatforms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/SupportedPlatforms.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/VersionNumbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/VersionNumbers.png -------------------------------------------------------------------------------- /meta/resources/TargetFrameworkAndPlatformFilters/dotnet-unified-platform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TargetFrameworkAndPlatformFilters/dotnet-unified-platform.png -------------------------------------------------------------------------------- /meta/resources/TransitiveDependencies/DotNetCLI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TransitiveDependencies/DotNetCLI.png -------------------------------------------------------------------------------- /meta/resources/TransitiveDependencies/SolutionView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TransitiveDependencies/SolutionView.png -------------------------------------------------------------------------------- /meta/resources/TransitiveDependencies/TransitiveVSPMUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TransitiveDependencies/TransitiveVSPMUI.png -------------------------------------------------------------------------------- /meta/resources/TransitiveDependencies/VSPMUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/TransitiveDependencies/VSPMUI.png -------------------------------------------------------------------------------- /meta/resources/UnifiedSettings/clear-command-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/UnifiedSettings/clear-command-dialog.png -------------------------------------------------------------------------------- /meta/resources/UnifiedSettings/general-prototype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/UnifiedSettings/general-prototype.png -------------------------------------------------------------------------------- /meta/resources/VulnerabilitiesInRestore/Challenging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/VulnerabilitiesInRestore/Challenging.png -------------------------------------------------------------------------------- /meta/resources/VulnerabilitiesInRestore/Learned.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/VulnerabilitiesInRestore/Learned.png -------------------------------------------------------------------------------- /meta/resources/VulnerabilitiesInRestore/Notified.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/VulnerabilitiesInRestore/Notified.png -------------------------------------------------------------------------------- /meta/resources/VulnerabilitiesInRestore/ResolveChallenge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/VulnerabilitiesInRestore/ResolveChallenge.png -------------------------------------------------------------------------------- /meta/resources/VulnerabilitiesInRestore/Resolved.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/VulnerabilitiesInRestore/Resolved.png -------------------------------------------------------------------------------- /meta/resources/nuget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/nuget.png -------------------------------------------------------------------------------- /meta/resources/packageSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/packageSettings.png -------------------------------------------------------------------------------- /meta/resources/signing/client policy selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/signing/client policy selection.png -------------------------------------------------------------------------------- /meta/resources/upgraderImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/upgraderImage.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-failuretoast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-failuretoast.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-icon.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-rightclick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-rightclick.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-rightclick2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-rightclick2.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-searchbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-searchbox.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-searchbox2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-searchbox2.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage-versionselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage-versionselect.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/addpackage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/addpackage.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/azdo-feeds1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/azdo-feeds1.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/azdo-feeds2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/azdo-feeds2.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/detailedsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/detailedsearch.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/flowdiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/flowdiagram.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/privatefeeds1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/privatefeeds1.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/privatefeeds2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/privatefeeds2.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removepackage-confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removepackage-confirm.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removepackage-searchbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removepackage-searchbox.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removepackage-searchbox2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removepackage-searchbox2.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removepackage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removepackage.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removeupdate-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removeupdate-icon.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/removeupdate-rightclick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/removeupdate-rightclick.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/solutionexplorer-packageicons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/solutionexplorer-packageicons.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/updatepackage-versionselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/updatepackage-versionselect.png -------------------------------------------------------------------------------- /meta/resources/vscode-commands/updatepackage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuGet/Home/299a4bf464196703ff7463dd87f7af0de4e3f6ad/meta/resources/vscode-commands/updatepackage.png -------------------------------------------------------------------------------- /meta/template.md: -------------------------------------------------------------------------------- 1 | # ***Untitled*** 2 | 3 | 4 | - Author Name 5 | - GitHub Issue 6 | 7 | ## Summary 8 | 9 | 10 | 11 | ## Motivation 12 | 13 | 14 | 15 | ## Explanation 16 | 17 | ### Functional explanation 18 | 19 | 20 | 21 | 22 | ### Technical explanation 23 | 24 | 25 | 26 | ## Drawbacks 27 | 28 | 29 | 30 | ## Rationale and alternatives 31 | 32 | 33 | 34 | 35 | 36 | ## Prior Art 37 | 38 | 39 | 40 | 41 | 42 | 43 | ## Unresolved Questions 44 | 45 | 46 | 47 | 48 | 49 | ## Future Possibilities 50 | 51 | 52 | --------------------------------------------------------------------------------