【问题标题】:Moving projects files in a .NET project在 .NET 项目中移动项目文件
【发布时间】:2010-07-27 18:37:04
【问题描述】:

这与代码无关,但与 IDE 相关。我正在开发一个包含大约 35 个不同项目的 .NET 解决方案。这些项目需要重新组织成一个新的文件夹结构。为什么?因为其中大约 10 个将被删除,其余的将被划分为更多的逻辑单元。 一种方法是创建一个新解决方案,将项目拖放到 Windows 资源管理器中的新文件夹树中,然后将它们添加到新解决方案中。 老实说,这听起来很愚蠢!

有没有办法将项目从 IDE 中移动到不同的文件夹中?我尝试将项目“另存为”,但 IDE 不接受其他文件夹。

这很烦人,但由于文件夹名称有一些错误的选择,我现在被这些名称所困扰。


示例:现在我有一个项目主文件夹,其中包含名为“客户端”、“服务器”、“业务”、“数据库”等等的子文件夹。在这些子文件夹中,还有更多子文件夹,每个子文件夹都有一个三位数字。在每个编号的文件夹中都有一个以某种逻辑方式命名的项目,例如 Company.Business.Customers 在该项目中具有附加逻辑。 问题是现在并不是所有的项目都遵循这个命名约定,我认为它已经过时了。 像 Company.Business.Customers 这样的项目应该只位于项目根目录中名为 Company.Business.Customers 的文件夹中,这样更容易识别。这个名字已经清楚地表明它是这个项目的商务舱。客户类、业务类等的明确划分只需要在解决方案中进行安排,但我想扁平化文件结构。 (并删除一些过时的项目。)基本上,我不是在重构,我只是在清理。 VS2008似乎没有这样的选项,虽然......

【问题讨论】:

  • 在解决方案资源管理器中,您有“显示所有文件”按钮,允许您访问与项目无关的其他文件夹,因此您可以从解决方案资源管理器创建新文件夹,拖放您想要的项目进入它们,然后右键单击“包含在项目中”将它们包含到项目中......我希望我能得到你。 =D
  • 您是在询问重新组织磁盘上或解决方案资源管理器中的项目,还是两者兼而有之?无论哪种方式,我都可能会直接编辑 .sln 文件以进行更改。
  • 仅在磁盘上重组。在解决方案资源管理器中进行重组就像拖放一样简单。

标签: c# visual-studio-2008


【解决方案1】:

启动 notepad.exe 并打开 .sln 文件。并启动 Windows 资源管理器,导航到解决方案目录。观察 .sln 文件内容如何匹配解决方案结构。编辑条目,使用 Explorer 进行相应的更改。先备份。

【讨论】:

    【解决方案2】:

    我不认为这里有一个简单的答案。您的主要问题将是 Visual Studio(或 .NET)不关心您是否有属于位于项目中的不同根命名空间的类。

    因此,如果您有一个名为 Project.BusinessObjects 的项目和另一个名为 Project.DataObjects 的项目,那么没有什么能阻止您将名为 Project.BusinessObjects.User 的类放入 Project.DataObjects 项目中。

    如果没有大量的手工工作,我不知道有什么方法可以完成所有这些工作。如果您使用“命名空间重命名”功能,Resharper 将提供相当多的帮助,但您最终还是会遇到很多繁重的工作。

    【讨论】:

      【解决方案3】:

      此外,在与版本控制系统结合使用时要非常小心。您必须非常了解您的版本控制系统,才能知道它将如何应对如此重大的重构。

      除此之外,您所描述的所做的并不是那么困难。您确实必须手动编辑解决方案文件,也许还有项目文件,并且您可能需要从解决方案中删除一个项目,然后在它位于正确目录下时再次添加它。

      我会做一个备份,然后重构。不过,我认为认为您可以从 IDE 完成所需的一切是错误的。而且,如果您在使用旧的 Visual SourceSafe API 的源代码控制系统中执行您从 IDE 中描述的操作,您肯定会(保证)弄乱您的绑定,该 API 不是为移动(或重命名,就此而言)而设计的以您描述的方式文件。在这种情况下执行此操作的最佳方法是删除所有源代码管理绑定,然后重新添加重组后的解决方案。

      这并不难,你只需要准备(做备份)和试验,直到你做对了。

      【讨论】:

      • 我正在使用 Vault 进行版本控制,基本上,整个内容将移动到不同的 VCS 数据库,因此它成为 Vault 中的一个新项目。这就是为什么现在重命名文件夹结构是完美的!
      • 很好,然后删除源代码控制绑定,进行备份(压缩所有内容),然后重命名/移动文件。使解决方案文件与文件的物理位置保持同步,并每隔一段时间在 VS 中打开解决方案,以确保到目前为止一切正常。
      • 我使用 Delphi 进行了大量开发,Delphi 允许我将项目文件保存到不同的文件夹。这就是为什么我希望在 VS2008 中有一个类似的选项。在 Delphi 中移动项目并不是很复杂。但是在 VS2008 中……这是一个缺失的功能。
      【解决方案4】:

      我认为在 Visual Studio 中没有任何方法可以做到这一点,正如@gmagana 指出的那样,如果文件受版本控制,这将非常困难。

      但是,可以手动完成。

      首先创建所需的新文件夹结构 - 现在忽略 .csproj 文件和解决方案文件,并将更多您感兴趣的 .cs 文件放入新结构中。

      现在,启动 Visual Studio,并创建一个新的空项目。如果您有不同类型的项目,您可能希望为每种类型创建一个新的空项目。这将为您留下一个空的 .csproj 文件和一个只有一个项目的 .sln 文件。

      将空项目文件复制到需要它们的位置,并根据需要重命名它们。如果需要,您可以编辑它们并更改程序集名称和默认命名空间,或者等到您完成并使用 Visual Studio 更改设置。

      最后,编辑 .sln 文件,并删除 Project 部分。将空的 .sln 文件复制到您想要的位置,然后在 Visual Studio 中打开它。现在开始将每个现有项目添加到新解决方案中。

      在每个项目中,单击“全部显示”按钮,然后开始将您复制到项目结构中的所有文件包括在内。解决缺少的依赖项,更改项目的命名空间和程序集名称,并确保代码文件没有指定您不想要的命名空间。重复直到完成。

      一旦获得要构建的新解决方案,打开 Reflector 中的 DLL 将很有帮助,以确保您没有错过代码文件中的任何命名空间声明 - 如果您试图获得在 DLL 和命名空间之间存在 1-1 对应关系的地方,或者甚至确保没有命名空间在 DLL 之间被分割,Reflector 是你的朋友。

      祝你好运。

      【讨论】:

      • 我有 35 个不同的项目和大约 300 个 .cs 文件。这是一个相当复杂的选择。我认为将 .csproj 与 .cs 文件一起移动应该会更容易。
      • 您的问题似乎暗示您会将一些文件移动到新项目中,重命名路径等。我认为在文件系统上进行重组,然后重新添加所有内容比尝试更容易弄清楚什么被移动了,什么没有被移动,等等。是的,它很复杂,但是你想要做的很复杂——我的建议实际上只是一件事,一遍又一遍地做同样的事情。跨度>
      【解决方案5】:

      我使用以下解决方案来解决我的问题:

      1. 我从一个新文件夹中的新空解决方案开始。
      2. 对于每个需要移动的项目,我使用 Windows 资源管理器在解决方案文件夹中创建了一个子文件夹,这次使用了正确的名称。
      3. 我将项目从其原始位置复制到了新文件夹。
      4. 我从新位置添加了所有(移动的)现有项目。
      5. 在解决方案管理器中,我将项目重命名为更好的名称。
      6. 我修复了所有项目的项目属性和其他设置。

      这确实很好地清理了整个项目。然后我将整个项目添加到 Vault(版本控制系统)中,一旦它在 VSS 中,我再次删除了该文件夹(实际上,只是先重命名它)并从 VSS 系统中取回它,因此任何过时的二进制文件和其他垃圾都是也走了。 这是很多工作,但结果正是它所需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2012-09-03
        • 2017-10-27
        • 2021-01-30
        相关资源
        最近更新 更多