我正在从 Svn 外部功能迁移到 nuget
一个巨大的项目,到目前为止这看起来是一个错误的决定。我的解决方案之一包含 70 个项目,其中大部分包含相同的公共(public)引用(nuget 包)。
以前的结构是每个解决方案的公共(public) Lib 文件夹,其中包含由 svn externals
控制的所有引用,所以每当我想更新版本时,我只需更新 tortoise svn 中的数字并单击更新 - 快速工作。
目前,当我从 Visual Studio 内部执行此操作时,它需要 10-20 倍的时间,因为我怀疑它从包中删除了以前版本的包目录,添加了新目录,更新了 packages.config
版本并更新了 csproj
路径。因此,如果我在 70 个项目中更新 7 个包并且我打开了 visual studio,则需要更长的时间。替代方法是关闭解决方案并在 命令行
中调用 nuget 更新,但这是一种解决方法。以前路径是相同的,packages.config
的概念不存在,所以唯一的变化是文本文件中的几行代码,我们得出下一个结论 - 源代码控制更改。每当我进行更新时,都会有大量更改需要 checkin 源代码管理,我发现它有点困惑。我发现 nuget install -ExcludeVersion
有一个标志,它将从路径中排除版本,因此 csproj 不会被更改,这是一个很大的优势。使用它是一个很好的约定吗?是否支持 Visual Studio 在我安装包时自动使用它?有没有办法将 nuget 包标记为“忽略路径中的版本”?据我所知,这些问题的答案是不,不,不。你如何处理在更大的项目中使用 nuget?如果我可以阅读有关 nuget 如何在更大的项目中处理它的内容,请告诉我。
最佳答案
让我们逐一解决每个问题。你的第一个问题是:
Is it a good convention to use it?这取决于意见。如果在安装时使用
ExcludeVersion
选项会破坏您的项目,那么您就不能使用它。否则,它会在推送时为您节省 70 个文件。第二个问题是:Is there are support for Visual Studio to use it automatically whenever I install a package?据我所知(我可能是错的),没有办法做到这一点。然而,这是快速研究的结果,更多信息可能会在 Nuget Config File Defaults 的深处找到。 (我找不到这样的配置)。
我有点不明白你的意思
Is there a way to mark a nuget package as "Ignore version in path"?但是,您的意思似乎是 Colonel Panic 在这个问题中提出的问题:Nuget Packages exclude version in folder naming ,其中答案是否定的。最后,你简单地问了这个问题:
How do you handle using nuget in bigger projects?不幸的是,这个问题的答案很简单:你不能(至少不是有效的)。 Nuget 自己在 blog post 中这样说从 2014 年 10 月 10 日开始。如果你阅读他们的“有害后果”部分,你会发现很多你遇到的问题。
好的,现在进入解决方案。我过去曾遇到过类似的 Nuget 问题,解决方案非常简单。为了尽量减少时间,我所要做的就是使用 Visual Studio 的 .gitignore
从命令行使用 Git(我相信 Svn 也可以)。我知道我们都会感谢 Nuget 在这些情况下工作;然而,这种情况并非如此。由于您已经使用 svn,我建议不要更改。毕竟,Nuget 实际上只是 Visual Studios 内部在解决方案基础上工作的宏。
关于c# - Nuget 迁移的 Svn 外部 - 关注点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37863701/