Azure devops Azure DevOps托管代理NuGet依赖项版本行为

Azure devops Azure DevOps托管代理NuGet依赖项版本行为,azure-devops,nuget,Azure Devops,Nuget,我有一个构建,无论我将它发送给云中的托管代理还是内部代理,它的行为似乎都有所不同。正在生成的解决方案有专门使用的项目,并且正在使用新的ishmsbuild/restore函数生成解决方案。其行为不同的具体方式是,在内部部署代理上,NuGet restore会生成一系列警告,如下所示: ##[警告]IQ.Core.Update\6.0.0\IQ.Core.Update.Services\IQ.Core.Update.Services.csproj(0,0):警告NU1603:IQ.Enterpri

我有一个构建,无论我将它发送给云中的托管代理还是内部代理,它的行为似乎都有所不同。正在生成的解决方案有专门使用
的项目,并且正在使用新的ish
msbuild/restore
函数生成解决方案。其行为不同的具体方式是,在内部部署代理上,NuGet restore会生成一系列警告,如下所示:

##[警告]IQ.Core.Update\6.0.0\IQ.Core.Update.Services\IQ.Core.Update.Services.csproj(0,0):警告NU1603:IQ.Enterprise.Activation.Model 6.0.8取决于IQ.Framework(>=6.8.0),但找不到IQ.Framework 6.8.0。解决了IQ.Framework 6.8.1的近似最佳匹配问题。

事实上,我们的内部包服务器提供了更新版本的IQ.Framework

运行同一版本时,云代理不会生成这些警告。云代理是否可能预先配置了一个NuGet.config,通过将“dependencyversion”设置为“Highest”来覆盖默认行为?或者托管代理上是否存在导致1603警告被抑制的不同内容

在TeamCity上运行的这个构建的前一个版本也没有记录这些类型的警告,我很确定我们的TeamCity代理没有任何特殊的NuGet配置

我担心的是,如果基于不同版本的引用包进行构建,那么基于内部部署代理的构建在功能上是否可能与云代理以及早期TeamCity构建有所不同

。。。取决于IQ.Framework(>=6.8.0),但IQ.Framework 6.8.0不是 建立解决了IQ.Framework 6.8.1的近似最佳匹配问题

当还原过程找不到引用包的某个特定版本时,总是会出现此警告。它表示本地代理缓存中的
IQ.Enterprise.Activation.Model-6.0.8
在其xx.nuspec文件中有如下内容:

<dependencies>
    <dependency id="IQ.Framework" version="6.8.0" />
</dependencies>

Azure DevOps托管代理NuGet依赖项版本行为


在与Jonathan进行了长时间的讨论之后,我们确认这种奇怪的行为是由两个代理中的
IQ.Enterprise.Activation.Model 6.0.8
的不同内容造成的。尽管它们是相同的版本6.0.8,但它们的
xx.nuspec
文件实际上具有不同的依赖关系。在本地代理中,它应该是
,而在云代理中,它显然不是
6.8.0
。因此,此警告在本地计算机中出现,但在使用云代理时不会出现。(6.8.0不适用于两个代理)

您的prem服务器使用的是哪个版本的NuGet?它是否与托管代理上使用的版本匹配?如何检查MSBuild/restore中涉及的NuGet版本?或者,这个问题在这种情况下没有意义吗?请确保您已经在nuget.config文件中添加了内部包服务器的url,并且存在该包的6.8.0版本。这些包来自Azure工件,并且nuget还原是通过MSBuild的
/restore
函数完成的。正在通过传递
/p:RestoreAdditionalProjectSources来指定源=https://pkgs.dev.azure.com/iqmetrix/_packaging/iqmetrix/nuget/v3/index.json
导入MSBuild,并使用
NuGetAuthenticate@0
在Azure DevOps构建管道中,据我所知,它专门设置了一个凭据提供程序来拦截Azure工件URL并提供访问令牌。在我的测试中,将完全相同的生成定义发送到这两种代理。发送到托管代理的测试中的原始生成日志不包含“6.8.0”或“6.8.1”。NuGet restore下载并安装IQ.Framework版本6.8.2。我们正在从内部ProGet服务器过渡到Azure工件,并实现自动化,确保两台服务器始终具有完全相同的软件包。在我写这篇文章时,包不能再直接发布到ProGet服务器,我相信常规任务会检查发布到Azure工件的新包,并将它们发布到ProGet服务器。在任何情况下,这个构建配置此时都应该不再涉及ProGet服务器的任何内容(因此,当我写到内部服务器有更新版本的IQ.Framework时,它基本上与声明Azure工件提要有更新版本相同)只是想搜索1603,而不是有问题的版本号,它不会出现在日志中的任何地方(除了,碰巧,在一行时间戳的小数秒部分)。