Visual Studio将项目移到其他文件夹


182

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

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

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


您是否正在使用TFS作为源代码控制提供程序?
Bermo '04

您只想重命名文件夹还是整个项目?
Charles Gargent

项目,文件夹和名称空间。
Egor Pavlikhin

Answers:


174

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

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


6
这就是我所做的,但是我认为有一种方法可以完成所有这些操作而又不删除整个项目,这使我可以重新添加所有依赖项。
Egor Pavlikhin

31
在删除要移动的项目之前,请从解决方案中卸载所有从属项目。这样,他们就不会检测到删除,并且项目引用保持不变。移动项目并将其重新添加到解决方案后,可以再次加载从属项目。
base2

13
不要忘记删除TFS中的文件,然后将其重新导入到另一个目录位置或项目中的TFS中,会导致文件更改历史记录被删除。
保罗

我想做到这一点而不会丢失更改历史记录,因此我仍然可以在需要时进行比较。
user734028

196

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

我使用这种方法:

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

绝对容易!但是,在我使用文本编辑移动和编辑解决方案之后,解决方案文件像常规文本文件一样在下方显示。我该如何摆脱呢?
Abriel

2
“如果项目处于源代码管理中,请使用源代码管理命令进行移动。” ..你能解释怎么做吗?
阿尼斯五世

3
@AnishV例如,如果您使用Git,请输入git mv ...而不是mv ...。请参阅git-mv文档以获取更多信息。
cubuspl42 2014年

3
在.csproj文件中,您需要更新SolutionDir属性,并修复项目引用和nuget程序包位置的所有路径。在.sln文件中,您所需要做的就是更新项目的路径。
皮特2015年

这对我有用。唯一的“窍门”是我不得不更改.sln文件,因此对其进行编辑不是只读的,然后出于安全目的将其再次标记为只读。
JustWannaFly

44
  1. 在VS2012中关闭您的解决方案
  2. 将项目移到新位置
  3. 打开您的解决方案
  4. 选择加载失败的项目
  5. 在“属性”工具窗口中,有一个可编辑的“文件路径”条目,可让您选择新的项目位置
  6. 设定新路径
  7. 右键单击该项目,然后单击重新加载

4
尽管效果最佳,但这似乎是最快,最简单的方法,效果非常好。这里有一篇文章:msmvps.com/blogs/deborahk/archive/2010/06/30/…–
Mike Rosenblum

@MikeRosenblum链接被打破,新的链接blogs.msmvps.com/deborahk/...
投资回报率Gavish

1
在VS2012中不起作用。链接的文章还仅提及VS2010。
bassim 2015年

在VS2010中对我来说工作正常,包括我的所有参考文献(除了我必须重新添加的1篇文献)。
克里斯蒂安

@Vasanth在Visual Studio 2019中,您需要手动编辑.sln文件以找到项目; 可能(也可能).csproj文件,以引用任何nuget软件包的正确位置。
卡托尔

3

对我有用的是:

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

2

我有同样的问题。我在不到15分钟的时间内移动了参考文献,而没有更改参考文献。

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

  1. 将文件移到需要的位置。
  2. 删除名称为.vs的文件夹。必须作为不可见的文件夹。
  3. 使用简单的编辑器(如note或notepad ++)打开解决方案文件(.sln)。
  4. 使用以下结构更改文件所在的引用:如果将项目放在同一文件夹中,则删除先前的文件夹或引用“ .. \”;如果放在上面的文件夹中,请添加引用“ .. \”或该文件夹的名称。
  5. 保存更改的文件。
  6. 打开项目文件(.csproj),然后执行相同的操作,删除或添加引用。
  7. 保存更改。
  8. 打开解决方案文件。

例子:

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

  • 原始文件: Project(“ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“ PATH1.UI”,“ ScannerPDF \ PATH1.UI \ PATH1.UI.csproj”,“ {A26438AD-E428-4AE4-8AB8-A5D6933E2D7B }“ Project(” {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}“ Project(” {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


2

摘要:在VS2019中使用git重命名和移动,保留git历史记录,稍微利用R#,自动依赖项目引用更新(对于sln的许多项目很重要,我们有200多个)

我一直在使用以下步骤在Visual Studio 2019中重命名和移动C#项目。此过程使用R#调整名称空间。通过执行“ git mv”来保留git历史记录(避免添加/删除历史记录删除操作)。

分两个阶段:1)将项目重命名到位,2)移动项目。

(使用来自base2重新卸载项目的技巧。)

改名

  1. VS | 解决方案资源管理器| 右键单击项目| 重命名(例如,将Utils.Foo更改为Foo)。
  2. VS | 解决方案资源管理器| 右键单击项目| 属性| 更改程序集名称,默认名称空间和程序集信息字段
  3. 对相应的测试项目(例如,Utils.Foo.Tests)执行1和2
  4. VS | 解决方案资源管理器| 右键单击项目(生产和测试)| 重构| 调整命名空间
  5. 使用该项目的XAML文件可能需要进行更新(手动或进行适当的全局搜索和替换)
  6. 全部重建
  7. 承诺!!(在移动之前提交更改)

注意:到目前为止,Windows资源管理器中的文件夹仍为旧名称(例如,Utils.Foo)。在移动步骤中已解决此问题。

移动

该方法:1)保留git历史记录,2)利用R#原子地调整名称空间,以及3)大规模更新依赖项目(避免繁琐的手动编辑依赖sln和csproj文件)。

  1. 卸载解决方案中的所有项目(以便删除目标项目不会触发相关项目中的更改)

    VS | 选择解决方案|下的所有解决方案文件夹。右键单击“卸载项目”

  2. 使用git移动文件夹(因此历史记录得以保留)

a)在2019年打开开发人员命令提示符

b)git状态(以说明“什么也没提交,工作树干净”)

c)git mv项目,例如git mv“ C:\ Code \ foo \ foo \ Utils.Foo”“ C:\ Code \ Foo”

d)git状态以查看/验证更改

  1. 删除项目

VS | 解决方案资源管理器| 选择项目 右键单击| 删除(由于所有项目均已卸载,因此将不会在相关项目中正确删除对它的引用)

  1. 重新添加项目(到解决方案资源管理器中树中的新位置)

a)VS | 解决方案资源管理器| 选择目标父文件夹| 右键单击| 新增| 现有项目

  1. 重新加载所有项目

重要说明: 确认相关项目的* .csproj文件已更新。

(VS | Team Explorer |更改|双击列出的任何相关csproj |检查并验证ProjectReference路径更改)

  1. 在单个移动的* .csproj文件中手动修复路径

使用记事本++(或其他文本编辑器)修复路径。通常,这可以通过简单的搜索和替换(例如,.. / .. / .. / .. /到../../)来完成。

这将更新...

a)GlobalAssmeblyInfo.cs参考

b)包的路径

c)依赖关系验证图文件的路径

d)规则集路径的路径(例如<CodeAnalysisRuleSet>..\..\..\..\SolutionDependencyValidation\IgnoreWarnings.ruleset</CodeAnalysisRuleSet>

  1. 关闭并重新打开解决方案(以使项目引用形成良好的形状)

全部保存,关闭解决方案,我更喜欢删除bin和obj文件夹以清除历史记录,重新打开解决方案

  1. 验证

a)VS | 团队资源管理器| 变化

i)应该看到显示已移动文件的暂存更改ii)应该看到更新良好的从属项目(* .csproj),请查看csproj差异,并注意路径已进行了精美的更新!(这是避免使用文本编辑器费力地手动更新csproj文件的魔力)

b)在Windows资源管理器中,确认旧位置为空

c)清洁解决方案,重建解决方案,运行单元测试,在sln中启动应用程序。

  1. 承诺!!

1

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

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

2
也就是说,如果您正在使用TFS?
马丁·巴

1

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


0

在VS 2015中

  1. 在解决方案资源管理器中卸载项目
  2. 创建一个新的解决方案
  3. 将项目复制到新解决方案的文件夹中
  4. 右键单击解决方案,添加现有项目。
  5. 如果使用诸如之类的框架MVC,则可能需要在参考管理器中添加参考。

0

我想出了这个尝试对我有用。

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

现在,您可以通过这种方式解决此问题。

关闭Visual Studio流程。然后,找到您的项目并复制项目文件夹,但是,首先在文档的Visual Studio 2017文件夹中创建一个名为Projects的子文件夹。接下来,将项目文件夹粘贴到Visual Studio 2017项目文件夹中,而不是粘贴到名为Projects的子文件夹的主Visual Studio 2017文件夹中。接下来,重新启动Visual Studio 2017,然后选择“打开项目解决方案”,然后在Visual Studio 2017“项目”文件夹中找到您粘贴的项目,然后清理该项目并重新生成它,它应该可以正常编译和编译。希望这对其他人有所帮助。不确定Microsoft为什么认为在需要写权限的路径上构建项目超出了我的范围。


0

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

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

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


0
  1. 将项目文件夹复制到新目的地
  2. 从解决方案中删除项目(在“解决方案资源管理器”中右键单击该项目,然后选择“删除”)
  3. 然后将现有项目添加到解决方案中(在“解决方案资源管理器”中右键单击该项目,然后依次选择“添加”和“现有项目”)
  4. 将路径更改为“ YourProjectName.csproj”文件中“程序包”文件夹的路径(在记事本中打开并更改链接程序包的路径)

0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.