总结:在 VS2019 中使用 git 重命名并移动,保留 git 历史记录,稍微利用 R#,自动依赖项目引用更新(对于 sln 的许多项目很重要,我们有 >200 个)
我一直在使用以下步骤在 Visual Studio 2019 中重命名和移动 C# 项目。此过程使用 R# 来调整命名空间。通过执行“git mv”(避免添加/删除历史记录删除)来保留 git 历史记录。
两个阶段:1) 原地重命名项目和 2) 移动项目。
(使用来自base2重新卸载项目的提示。)
重命名
- VS |解决方案资源管理器 |右键项目 |重命名(例如,将 Utils.Foo 改成 Foo)。
- VS |解决方案资源管理器 |右键项目 |属性 |更改程序集名称、默认命名空间和程序集信息字段
- 为相应的测试项目(例如,Utils.Foo.Tests)执行 1 和 2
- VS |解决方案资源管理器 |右键单击项目(生产和测试)|重构 |调整命名空间
- 可能需要更新使用该项目的 XAML 文件(手动或使用适当的全局搜索和替换)
- 全部重建
- 提交!! (在移动之前提交更改)
注意:到目前为止,Windows 资源管理器中的文件夹仍然是旧名称(例如,Utils.Foo)。这是在移动步骤中修复的。
移动
此方法:1) 保留 git 历史记录,2) 利用 R# 自动调整命名空间以及 3) 批量更新依赖项目(避免繁琐的手动编辑依赖 sln 和 csproj 文件)。
-
卸载解决方案中的所有项目(这样移除目标项目不会触发依赖项目的更改)
VS |选择解决方案 | 下的所有解决方案文件夹右键单击卸载项目
-
使用 git 移动文件夹(这样可以保留历史记录)
a) 打开 2019 年的开发者命令提示符
b) git status(说明“没有什么可提交的,工作树干净”)
c) git mv 项目
例如, git mv "C:\Code\foo\foo\Utils.Foo" "C:\Code\Foo"
d) git status 查看/验证更改
- 删除项目
VS |解决方案资源管理器 |选择项目 |右击|消除
(由于所有项目都已卸载,因此不会正确删除依赖项目中对它的引用)
- 重新添加项目(到解决方案资源管理器树中的新位置)
a) VS |解决方案资源管理器 |选择目标父文件夹 |右击|添加 |现有项目
- 重新加载所有项目
重要提示:确认依赖项目的 *.csproj 文件已更新。
(VS | 团队资源管理器 | 更改 | 双击列出的任何依赖 csproj | 检查-验证 ProjectReference 路径更改)
- 手动修复单个移动的 *.csproj 文件中的路径
使用 Notepad++(或其他文本编辑器)修复路径。这通常可以通过简单的搜索和替换来完成(例如,../../../../ 到 ../../)。
这将更新...
a) GlobalAssmeblyInfo.cs 参考资料
b) 包的路径
c) 依赖验证图文件的路径
d) 规则集路径的路径(例如,<CodeAnalysisRuleSet>..\..\..\..\SolutionDependencyValidation\IgnoreWarnings.ruleset</CodeAnalysisRuleSet>)
- 关闭并重新打开解决方案(以使项目引用保持良好状态)
全部保存,关闭解决方案,我更喜欢删除 bin 和 obj 文件夹以清除历史记录,重新打开解决方案
- 验证
a) VS |团队资源管理器 |变化
i) 应该看到显示已移动文件的阶段性更改
ii) 应该看到已很好更新的依赖项目 (*.csproj)
查看 csproj 差异并注意路径已被精美更新! (这是避免使用文本编辑器费力地手动更新 csproj 文件的神奇之处)
b) 在 Windows 资源管理器中,验证旧位置是否为空
c) 清理解决方案、重建解决方案、运行单元测试、在 sln 中启动应用程序。
- 提交!!