从 TFS 读取时未安装 NuGet 包
Posted
技术标签:
【中文标题】从 TFS 读取时未安装 NuGet 包【英文标题】:NuGet package is not being installed when reading from TFS 【发布时间】:2021-04-15 08:35:52 【问题描述】:我们正在使用 Visual Studio 2019,我们有一个解决方案引用了来自 nuget.org 或我们的私有服务器的一些 NuGet 包,我们正在使用 packages.config 管理来管理解决方案,问题是只有一个 ASP该解决方案中的 .NET 项目没有安装任何所需的包(在我们的例子中它错过了 NewtonSoft.json),并且正确安装了所有其他的,即使我们启用了包恢复,并且解决方案中还有其他 ASP.Net 项目可以正确安装 Newtonsoft 软件包,但是每次您从零开始阅读解决方案的最新版本(如果您删除本地解决方案并重新从 TFS 读取它),您需要专门为该项目手动安装 Newtonsoft.json。
PS:这是一个每次可以在 5 分钟内解决的问题,但我知道有问题,我一直在尝试了解它是什么,我不想在本地解决它,但我需要在 TFS 级别上解决它的解决方案,所以请帮助我,或者如果您知道这里有任何其他问题可以提供帮助,请指导我完成(如果我还没有看到)。
我的 NuGet.Config 文档:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
<add key="MxNuget" value="our server path" />
</packageSources>
<activePackageSource>
<add key="All"
value="(Aggregate source)" />
</activePackageSource>
<packageRestore>
<add key="enabled" value="true" />
<add key="automatic" value="true" />
</packageRestore>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
我们得到的错误如下:
The name 'Newtonsoft' does not exist in the current context.
【问题讨论】:
您能显示 Nuget 还原过程的输出吗?它给出了什么错误?也许您的本地 Nuget 服务器中也有 Newtonsoft,但版本较旧? 当然,我会编辑问题并添加它 您似乎在编译时编辑错误,而不是还原错误。例如,如果这是 .NET Core,当你运行dotnet restore
时会发生什么?
它实际上不存在,起初它在packages.config中有一个引用,所以如果你打开包管理器它会告诉你你有它,你必须先删除它才能重新安装它,所以我从包中删除了引用,这样我就可以遇到“逻辑问题”
你能解释一下编译时错误中的编辑是什么意思吗?
【参考方案1】:
我遇到的问题是因为 TFS 没有恢复所有需要的包,因为当他在解决方案中看到文件夹 'Packages' 时,他只是检查包是否在里面,当他完成后,他找到的版本和本地机器上的版本可能不同,这导致了问题,所以我想删除 TFS 上的包文件夹,但找不到。为此,我在解决方案的第一步中安装了该软件包,它将一种名为 .tfignore 的文件添加到解决方案目录中的 .nuget 文件夹中,该文件夹告诉 TFS当他找到文件包时忽略它。
有用的问题:
1 - Tfs Can't restore Nuget packages.
2-NuGet Packages are missing
3- 外部:Missing Nuget Packages on TFS Build Server
我按照以下步骤解决了问题:
将包 DisableSourceControlIntegration 安装到缺少 Newtonsoft.json NuGet 的项目中。
在我的 ASP.Net 项目所引用的项目中统一了 NewtonSoft.json 的所有版本。 (我认为这是主要问题,因为我之前将它们统一了,但我用他们的配置文件更新了整个组)。
在 Visual Studio 中,打开工具 --> Nuget 包管理器 --> 包管理器设置,确保选择 Packages.config 作为管理 NuGet 包的格式。
删除所有包裹现金。
重新编译解决方案。
推送到 TFS。
【讨论】:
以上是关于从 TFS 读取时未安装 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章
从 CI 到生产 Nuget 源的 Nuget 包版本控制和推广