visual-studio - 如何为 Visual Studio 项目禁用 "transitive package management"

标签 visual-studio nuget visual-studio-2019 nuget-package

如何禁用“传递包管理”?

我希望这样做,以便我可以安装我在本地“打包”并包含在 .nupkg 文件中的包。当我尝试这样做时,我收到一条消息,指出基于可传递包管理的项目 {csproj 文件} 不遵守“源”参数。将使用 NuGet 配置中启用的源。

完整的上下文

在开发尚未准备好通过我们的 NuGet 源分发的 NuGet 包时,我经常从包管理器控制台创建一个像这样的本地 .nupkg 文件:

nuget 包 {path-to-csproj-file}

这会生成一个 {project-name}.nupkg 文件,然后我可以通过在 Visual Studio 中打开它,导航到包管理器控制台并输入命令来将其安装在另一个项目中

Install-Package {path-to-nupkg-file}

这非常有效,一旦 NuGet 包准备好分发,我们就会将其推送到 Azure DevOps,并让那里的构建管道将其推送到我们的提要中。

但是,我最近刚刚继承了一个项目,在该项目中,先前的开发人员显然设置了“可传递包管理”来阻止此工作流程。这是我尝试直接从 .nupkg 文件安装时得到的结果:
Install-Package C:\Users\Josh\source\repos\SpeakerDiscountManager\SpeakerDiscountData.1.0.5.nupkg
The 'Source' parameter is not respected for the transitive package management based project(s) MembershipApplicationWidget\MembershipApplicationWidget.csproj. The enabled sources in your NuGet configuration will be used. 
<snipped several lines of unsuccessfully searching configured package sources>
Install-Package : NU1102: Unable to find package SpeakerDiscountData with version (>= 1.0.5)

显然,它没有找到我通过文件指定的包,因为它正在搜索在线提要并且它不存在于我们的任何在线包源中——该包处于测试状态,尚未准备好供任何人使用使用但我。

根据错误消息,我需要关闭“可传递包管理”,以便为包指定文件源,但我一直无法在网上找到有关如何配置的任何信息。

我确实尝试在另一个项目中安装这个完全相同的 .nupkg 文件,使用相同的 Install-Package {path-to-nupkg-file} 过程。这有效。

最佳答案

How to disable “transitive package management” for a Visual Studio project



我觉得这个问题transitive package management与您当前的项目结构有关,该结构具有一些复杂的依赖项、自定义规则等。 因此 ,关闭 transitive package management不切实际。如果你创建其他项目,然后按照你的方式安装这个包,我想可能不会发生。

作为最佳解决方法 ,如您所说(来自消息 The enabled sources in your NuGet configuration will be used. 的提示),将本地 nuget 包的路径添加到 Nuget 包源中。

在你身边 ,我想你指定了 -Source xxxxx(the path of the nuget package)package manager console 中安装此软件包,如果是这样,这个功能其实很不方便。

您可以将SpeakerDiscountData.1.0.5.nupkg 存在的文件夹路径添加到global nuget package source .完成后,它将适用于 native 中的任何项目。

它有两种方式:

1) VS IDE 用户界面
Tools --> Options --> NuGet Package Manager --> Packages Sources -->添加一个新的key并输入nuget文件夹的路径。另外,检查它的选项。

2) 全局 NuGet.Config 文件

( C:\Users\xxxx\AppData\Roaming\NuGet\Nuget.Config 步骤 1 只是通过 VS UI Control 将路径添加到此文件中)

添加这些:
<packageSources>
    <add key="Local Packages Source" value="C:\Users\Josh\source\repos\SpeakerDiscountManager\" />
..........
</packageSources>

之后 ,你可以使用你的命令来安装这个 nuget 包。

备注 : 如果你的解决方案的根目录也有一个名为 nuget.config 的文件,其中的参数将覆盖全局文件。它具有最高优先级。

enter image description here

关于visual-studio - 如何为 Visual Studio 项目禁用 "transitive package management",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855372/

相关文章:

visual-studio - 如何防止在 Visual Studio 2017 中创建 launchSettings.json

c# - 当我显示它时,我的自定义 progressBar 表单挂起

shared-libraries - 使用私有(private) NuGet 服务器有哪些优势?

c# - 如何为解决方案中的每个项目创建单独的 nuget 包,并将项目引用转换为 nuget 依赖项?

c# - 未找到 Stripe.net 的命名空间

python - Visual Studio Python WPF 调试

c# - 查找具有特定约束的通用类的用法

c# - Visual Studio 2019 进入定义状态,Intellisense 不起作用

c# - .NET SDK 未正确安装

windows-10 - 如何停止后台下载exe