如何禁用“传递包管理”?
我希望这样做,以便我可以安装我在本地“打包”并包含在 .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
的文件,其中的参数将覆盖全局文件。它具有最高优先级。关于visual-studio - 如何为 Visual Studio 项目禁用 "transitive package management",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60855372/