Visual Studio 将项目移动到不同的文件夹

Posted

技术标签:

【中文标题】Visual Studio 将项目移动到不同的文件夹【英文标题】:Visual Studio move project to a different folder 【发布时间】:2011-02-06 21:09:06 【问题描述】:

如何将项目移动到 Visual Studio 中的其他文件夹?我在项目中习惯了这种结构。

-- app
---- Project.Something
---- Project.SomethingElse

我想将整个命名空间 SomethingElse 重命名为 SomethingNew,最好的方法是什么(无需手动进入 .sln 文件)?

【问题讨论】:

您是否使用 TFS 作为您的源代码控制提供程序? 您要重命名文件夹还是整个项目? 项目、文件夹和命名空间。 How do I rename a Project Folder from within Visual Studio?的可能重复 【参考方案1】:

我尝试了删除并重新添加项目的建议,但修复依赖项可能会很痛苦。

我使用这种方法:

    移动项目文件夹。 如果项目在源代码管理中,请使用源代码管理命令进行移动。 在文本编辑器中编辑解决方案文件。您应该只需要更改一条路径。

【讨论】:

绝对更容易!但是,在我使用文本编辑移动和编辑解决方案后,解决方案文件会像常规文本文件一样显示在下方。我该如何摆脱它? "如果项目在源代码管理中,请使用源代码管理命令进行移动。" ..你能解释一下怎么做吗? @AnishV 例如,如果您使用 Git,请输入 git mv ... 而不是 mv ...。有关更多信息,请参阅 git-mv 文档。 在 .csproj 文件中,您需要更新 SolutionDir 属性,并修复项目引用和 nuget 包位置的所有路径。在 .sln 文件中,您需要做的就是更新项目的路径。 这对我有用。唯一的“窍门”是我必须更改 .sln 文件,以便编辑它不是只读的,然后出于安全目的再次将其标记为只读。【参考方案2】:

通过在“解决方案资源管理器”窗口中右键单击该项目并选择“删除”,从您的解决方案中删除该项目。将整个项目文件夹(包括子目录)移动到您想要的任何位置。将项目重新添加到您的解决方案中。

命名空间名称完全不同,只需编辑源代码即可。

【讨论】:

这就是我所做的,但我认为有一种方法可以在不删除整个项目的情况下完成所有这些操作,这让我可以重新添加所有依赖项。 从解决方案中卸载所有依赖项目,然后再删除要移动的项目。这样,他们就不会检测到删除并且项目引用保持不变。移动项目并将其重新添加到解决方案后,您可以再次加载依赖项目。 不要忘记删除 TFS 中的文件,然后将其重新导入到另一个目录位置或项目的 TFS 中,会导致文件更改历史记录被删除。 我想在不丢失更改历史记录的情况下这样做,所以我仍然可以在需要时进行比较。 短小精悍 :+1:【参考方案3】:
    在 VS2012 中关闭你的解决方案 将您的项目移至新位置 打开您的解决方案 选择加载失败的项目 在“属性”工具窗口中,有一个可编辑的“文件路径”条目,可让您选择新的项目位置 设置新路径 右键单击项目,然后单击重新加载

【讨论】:

这工作得非常好,似乎是最快和最简单的方法,尽管其他投票率更高的答案。这里有一篇文章:msmvps.com/blogs/deborahk/archive/2010/06/30/… @MikeRosenblum 链接坏了,新链接是blogs.msmvps.com/deborahk/… 在 VS2012 中不起作用。链接的文章也只提到了 VS2010。 在 VS2010 中对我来说工作得很好,包括我所有的参考资料,除了我必须重新添加的 1。 @Vasanth 在 Visual Studio 2019 中需要手动编辑 .sln 文件来定位项目;并且可能(可能) .csproj 文件也可以引用任何 nuget 包的正确位置。【参考方案4】:

总结:在 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 中启动应用程序。

    提交!!

【讨论】:

【参考方案5】:

对我有用的是:

    从解决方案中删除项目。 使用文本编辑器编辑项目文件。 更新“包”的所有相对路径。就我而言,我不得不将 ..\packages 更改为 ..\..\..\packages,因为我将项目移到了更深的文件夹中。 将项目重新加载到解决方案中。

【讨论】:

【参考方案6】:

我遇到了同样的问题。我在 15 分钟内通过移动参考解决了问题,而无需更改参考。

对我来说,解决方案很简单:

    将文件移动到需要的位置。 删除名为 .vs 的文件夹。必须是不可见的文件夹。 使用简单的编辑器(如 note 或 记事本++。 使用以下命令更改文件所在的引用 结构:如果您将项目放在同一个文件夹中,请删除 上一个文件夹或参考“..\”;如果你把上面的文件夹 添加引用“..\”或文件夹名称。 保存更改后的文件。 打开项目文件 (.csproj) 并执行相同操作,删除或添加 参考。 保存更改。 打开解决方案文件。

例子:

在解决方案文件(.sln)中

原文: Project("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC") = "PATH1.UI", "ScannerPDF\PATH1.UI\PATH1.UI.csproj", “A26438AD-E428-4AE4-8AB8-A5D6933E2D7B” 项目(“FAE04EC0-301F-11D3-BF4B-00C04F79EFBC”)= "PATH1.DataService", "ScannerPDF\PATH1.DataService\PATH1.DataService.csproj", “ED5A561B-3674-4613-ADE5-B13661146E2E”

新: Project("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC") = "PATH1.MX.UI", "PATH1.MX.UI\PATH1.UI.csproj", “A26438AD-E428-4AE4-8AB8-A5D6933E2D7B” 项目(“FAE04EC0-301F-11D3-BF4B-00C04F79EFBC”)= "PATH1.DataService", "PATH1.DataService\PATH1.DataService.csproj", “ED5A561B-3674-4613-ADE5-B13661146E2E”

在项目文件中:

原文:

新:

原文参考: ....\lib\RCWF\2018.1.220.40\TelerikCommon.dll

新参考: ..\lib\RCWF\2018.1.220.40\TelerikCommon.dll

【讨论】:

【参考方案7】:

在 Visual Studio 社区 2019 中,我按照 Victor David Francisco Enrique 所说的做了,但只需要删除 .vs invisbile 文件夹

【讨论】:

【参考方案8】:

在 VS2012 中很容易;只需使用更改映射功能:

    创建要将解决方案移动到的文件夹。 签入所有项目文件(如果您想保留更改),或回滚任何签出的文件。 关闭解决方案。 打开源代码管理资源管理器。 右键单击解决方案,然后选择“高级 -> 删除映射...” 将“本地文件夹”值更改为您在第 1 步中创建的值。 选择“更改”。 通过在源代码管理资源管理器中双击解决方案来打开它。

【讨论】:

也就是说,如果你使用的是 TFS?【参考方案9】:

最简单的方法,我自己找到的

我尝试了多次,直到找到了一种可行的方法。例如,您想 将项目sln 文件夹移动到 mySource 文件夹.

    删除您的项目: 在 Visual Studio 的 SolutionExplorer 中选择您要更改目录的项目,按 Delete -> 项目被删除。它仍然保留在您的 sln 文件夹中。 将其复制到您的路径:在 Windows 资源管理器中复制您的整个项目到您的 mySource 文件夹。 -> 现在您可以包含它了。 包含您的项目:在 Visual Studio 的 SolutionExplorer 中添加现有项目,然后从 mySource 文件夹中选择您的项目。 -> 项目现在又回到了您的解决方案中。 调整您的项目引用: 检查项目中的每个引用。 在您的项目 -> 依赖项 -> 项目 -> 您会看到您的项目引用。如果项目参考上有黄色警告标志,那就错了。 删除您的项目参考添加新的重建您的项目:并让它运行。之后,您可以在 sln 文件夹中删除您的项目,该文件夹已不再使用。

这行得通。玩得开心:)

【讨论】:

【参考方案10】:

在 VS 2015 中

    在解决方案资源管理器中卸载您的项目 创建新的解决方案 将项目复制到新解决方案的文件夹中 右键单击解决方案,添加现有项目。 如果您使用一些框架,例如MVC,您可能需要在引用管理器中添加引用。

【讨论】:

【参考方案11】:

我发现这个尝试对我有用。

在 Visual Studio 2017 社区版中,它会在此路径上创建一个项目 "C:\Users\mark\source\repos\mipmaps\mipmaps" 这将创建一个访问文件被拒绝的问题

现在,你可以用这种方法解决这个问题。

关闭您的视觉工作室进程。 然后,找到您的项目并复制项目文件夹 但是,首先在文档中的 Visual Studio 2017 文件夹中创建一个名为 Projects 的子文件夹。 接下来,将项目文件夹粘贴到您的 Visual Studio 2017 项目文件夹中,而不是主 Visual Studio 2017 文件夹中,它应该进入名为 Projects 的子文件夹中。 接下来,重启 Visual Studio 2017 然后,选择打开项目解决方案 然后,找到您粘贴在 Visual Studio 2017 项目文件夹中的项目 然后清理项目并重建它,它应该构建和编译就好了。 希望,这对其他人有帮助。 不确定为什么微软认为在需要写入权限的路径中构建您的项目超出了我的范围。

【讨论】:

【参考方案12】:

我希望 Git 中的更改显示为移动/重命名,而不是删除和添加。 所以我做了上面的组合和这个post。

mkdir subdirectory
git mv -k ./* ./subdirectory
# check to make sure everything moved (see below)
git commit

并通过文本编辑器从 sln 文件中的 nuget Pkg 调整项目和程序集的路径。

【讨论】:

【参考方案13】:
    将项目文件夹复制到新目标 从解决方案中删除您的项目(右键单击“解决方案资源管理器”中的项目并选择“删除”) 然后将现有项目添加到解决方案中(右键单击“解决方案资源管理器”中的项目并选择“添加”然后选择“现有项目”) 在“YourProjectName.csproj”文件中更改“packages”文件夹的路径(在记事本中打开并更改链接包的路径)

【讨论】:

【参考方案14】:

这对我有用 vb2019。我复制了我的源项目文件夹。然后我粘贴了项目,并将文件夹重命名为任何内容。为了打破与源项目文件夹的联系,我暂时重命名了源文件夹。我打开了我的目标项目。在本地文件夹中重新发现了表单和模块的路径。我检查了所有表格和模块以确保它们正常工作。我运行了这个项目。我关闭了项目。我将源项目文件夹重命名为不是原始名称。我可以同时打开两个项目而不会出错。

【讨论】:

【参考方案15】:

不知道为什么所有答案都忽略了最简单的解决方案。只需运行“命令提示符应用程序”(在窗口栏中搜索 CMD 就会自动出现)

然后只需键入以下命令(更改与您自己的案例相关的路径:)

robocopy /E C:\Users\Peter\source\repos D:\Peter\repos

robocopy 所做的是“将文件数据从一个位置复制到另一个位置”。而“秘密来源”是/E,意思是“复制子目录。此选项自动包含空目录。”

享受!!! :-)

【讨论】:

【参考方案16】:

关闭解决方案并将您的项目移动到新文件夹/位置

重新打开您的解决方案

项目加载时应使用“+”表示部分未选中。所有文件 项目的名称将显示为已重命名。

如果重新打开后无法正常工作,请右键单击项目并单击卸载,然后 重新加载。

它在 VS2019 中工作

【讨论】:

【参考方案17】:

使用解决方案文件夹将相关项目组合在一起

见http://msdn.microsoft.com/en-us/library/vstudio/c6c756s6(v=vs.100).aspx

【讨论】:

似乎跑题了

以上是关于Visual Studio 将项目移动到不同的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

将现有 xaml 文件添加到 Visual Studio 2012

Visual Studio:多个构建后命令?

如何让 Visual Studio Code 检查整个项目的错误?

将文件动态添加到 Visual Studio 部署项目

如何以不同的名称保存 Visual Studio 项目(如另存为)?

为啥在我将文件添加到项目时,Visual Studio 会检出 .vspscc 文件?