我正在通过github设置一个私有的nuget源。一切正常,使用nuget.config
如下所示(已编辑凭据部分):
<configuration>
<packageSources>
<add key="github" value="https://nuget.pkg.github.com/<my-company>/index.json" />
</packageSources>
<packageSourceCredentials>...</packageSourceCredentials>
</configuration>
注意,我不会清除其他packageSources:我仍然需要使用public nuget源。我只是在添加一个额外的私人资源。
就像我说的,一切正常,我可以从任一来源添加软件包。但是当我检查.NET中的PackageReference
条目时,我不得不担心csproj
。它没有指出要使用哪个来源的软件包。
例如,在这种情况下,MyCompany.Common
它来自我的私人来源,而Newtonsoft.Json
来自公共nuget来源。
<ItemGroup>
<PackageReference Include="MyCompany.Common" Version="1.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
但是,如果有一个同名的公共软件包怎么办?我尝试了一下,并成功地工作了。因此,换句话说,如果有人猜到我的私有软件包名称,则下次有人克隆存储库并进行构建时,Visual Studio很可能会从错误的源中获取软件包。
有办法防止这种情况吗?我一直在阅读Nuget PackageReference文档,并且看起来甚至很近的唯一一件事可能是Condition
:
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" Condition="'$(TargetFramework)' == 'net452'" />
但是看起来这更多是根据解决方案/项目/系统配置而不是软件包源来设置条件。
是否有条件可以指定软件包的来源?还是有其他可以指定特定程序包的nuget源的东西?
我认为这可能与本文有关。
这里有一个有趣的帖子
https://azure.microsoft.com/zh-cn/resources/3-ways-to-mitigate-risk-using-private-package-feeds/
我发现最实用的方法是使用锁定模式,您将拥有一个package.lock.json文件,如下所示
"dependencies": {
".NETCoreApp,Version=v5.0": {
"Newtonsoft.Json": {
"type": "Direct",
"requested": "[12.0.1, )",
"resolved": "12.0.1",
"contentHash": "pBR3wCgYWZGiaZDYP+HHYnalVnPJlpP1q55qvVb+adrDHmFMDc1NAKio61xTwftK3Pw5h7TZJPJEEVMd6ty8rg=="
}
}
}
在contentHash
应该保护的包。
可以通过以下方式启用锁定模式
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句