Je mets en place une source de nuget privée via github. Tout fonctionne bien, en utilisant un nuget.config
comme celui-ci (section des informations d'identification expurgée):
<configuration>
<packageSources>
<add key="github" value="https://nuget.pkg.github.com/<my-company>/index.json" />
</packageSources>
<packageSourceCredentials>...</packageSourceCredentials>
</configuration>
Remarque, je n'efface pas les autres sources de package: je dois toujours utiliser la source publique du nuget. J'ajoute simplement une source privée supplémentaire en plus.
Comme je l'ai dit, tout fonctionne et je peux très bien ajouter des packages à partir de l'une ou l'autre source. Mais j'ai commencé à m'inquiéter lorsque j'ai vérifié les PackageReference
entrées dans le csproj
. Il n'indique pas la source à utiliser pour le package.
Par exemple, dans ce cas, MyCompany.Common
provient de ma source privée et Newtonsoft.Json
de la source publique nuget.
<ItemGroup>
<PackageReference Include="MyCompany.Common" Version="1.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
Mais que se passe-t-il s'il existe un package public du même nom? J'ai essayé ceci, et ça marche effrayant. Donc, en d'autres termes, si quelqu'un devine le nom de mon package privé, la prochaine fois que quelqu'un clone le référentiel et compile, il est fort probable que Visual Studio récupère le package à partir de la mauvaise source.
Est-ce qu'il y a un moyen d'éviter cela? J'ai lu la documentation de Nuget PackageReference et la seule chose qui semble même à distance proche pourrait être Condition
:
<PackageReference Include="Newtonsoft.Json" Version="9.0.1" Condition="'$(TargetFramework)' == 'net452'" />
Mais il semble que ce soit plus pour définir des conditions basées sur la configuration de la solution / projet / système, pas de la source du package.
Existe-t-il un conditionnel qui peut spécifier la source du package? Ou y a-t-il autre chose qui peut spécifier la source du nuget pour un paquet particulier?
Je pense que cela pourrait être lié à cet article .
Il y a un article intéressant ici
https://azure.microsoft.com/en-us/resources/3-ways-to-mitigate-risk-using-private-package-feeds/
J'ai trouvé que le moyen le plus pratique est d'utiliser le mode de verrouillage, avec lequel vous aurez un fichier package.lock.json comme celui-ci
"dependencies": {
".NETCoreApp,Version=v5.0": {
"Newtonsoft.Json": {
"type": "Direct",
"requested": "[12.0.1, )",
"resolved": "12.0.1",
"contentHash": "pBR3wCgYWZGiaZDYP+HHYnalVnPJlpP1q55qvVb+adrDHmFMDc1NAKio61xTwftK3Pw5h7TZJPJEEVMd6ty8rg=="
}
}
}
Le contentHash
devrait sécuriser le colis.
Le mode de verrouillage peut être activé par
<PropertyGroup>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots