我为我的公司设置了一个自定义的NuGet服务器.一切都很好 - 我可以发布,查看包等
我唯一关心的是我可以发布一个具有相同名称和版本号的包,从而覆盖现有的包.这不是理想的,如果已经存在具有相同名称和版本的包,我希望NuGet服务器返回错误.
有关如何实现这一目标的任何线索?
我也非常感谢不允许覆盖现有的包.但是,现在似乎不可能使用NuGet服务器.一个类似的功能要求已经在大约两年前关闭.
但是查看源代码会打开一些选项.看看CreatePackage()方法.它使用IPackageAuthenticationService来检查是否允许添加指定的包(仅检查API密钥)和IServerPackageRepository以实际添加包:
// Make sure they can access this package
if (Authenticate(context, apiKey, package.Id))
{
_serverRepository.AddPackage(package);
WriteStatus(context, HttpStatusCode.Created, "");
}
Run Code Online (Sandbox Code Playgroud)
两者都使用构造函数注入传入,因此通过传递自定义实现(为此修改Ninject绑定)可以很容易地扩展行为.
乍一看,我会去一个自定义的IServerPackageRepository.当前实现使用IFileSystem.AddFile(...)来添加包.您可以使用IFileSystem.FileExists(...)来检查包是否已存在.
从持续集成的角度来看,由于NuGet遵循语义版本控制,因此不允许覆盖现有的包.因此,新版本应该包含错误修正,新功能或突破性更改.不过,我会选择允许覆盖快照/预发布.
更新:似乎v2.8将有一个选项allowOverrideExistingPackageOnPush,默认为true以实现向后兼容性.它已与1e7345624d一起使用.我意识到分叉后.好像我又来不及了;-)
| 归档时间: |
|
| 查看次数: |
4469 次 |
| 最近记录: |