在现有目录中创建项目/解决方案?

时间:2009-05-28 22:11:22

标签: visual-studio ide visual-studio-2005 visual-sourcesafe

如何创建新项目&解决方案在同一个现有目录中?无论我做什么,它都会不断为项目创建一个新的(子)目录,并填充该目录而不是已存在的目录。我清除了“为解决方案创建目录”复选框,以便将解决方案放在同一文件夹中,而不是创建解决方案文件夹,但它仍然会生成项目子文件夹。

我该如何解决这个问题?!?

这已经困扰了我很长一段时间,但我已经能够忽略它或直到现在才解决它。但现在它正在我的客户项目中榨取我的屁股生产力,我需要解决它。感谢... RBarryYoung

(注意:这是VS2005,面向软件开发人员的团队版)

6 个答案:

答案 0 :(得分:12)

在Visual Studio中,如果您没有打开解决方案,则可以选择

File-> New-> Project from Existing Code

选择项目类型

将您希望解决方案和项目文件所在的目录作为“项目文件位置”字段。

完成向导,您将在同一目录中拥有项目文件和解决方案文件。

如果“现有代码中的项目”选项不可用

使用VS的自定义功能制作自定义键盘快捷键,工具栏按钮或菜单项。

工具 - >自定义

选择“键盘”按钮添加键盘快捷键或选择“命令”选项卡以添加工具栏按钮或菜单项。您正在寻找的命令是:

文件 - >来自现有代码的新项目

指定任何键盘快捷键或将图标拖动到您想要的任何菜单/工具栏。

答案 1 :(得分:10)

要在现有目录中创建解决方案,我发现最好的方法是从实际需要的位置创建一个目录,然后使用您真正想要它的目录名称作为解决方案的名称

如果这不是您想要的名称(即您不希望您的解决方案名称与其所在目录的名称相匹配),那么一旦您创建了它,您可以通过右键单击重命名解决方案它并选择“重命名”。它不会重命名它所在的目录,也不会移动它。这是迄今为止最简单的方法。

你显然也可以对项目使用相同的技巧,但是如果你在一个目录中有多个项目,理想情况下,他们构建的中间目录应该不同,否则如果你想要的话,你会遇到问题只重建其中一个并清除中间目标目录。

答案 2 :(得分:1)

您可以随时手动移动并编辑sln文件以修复项目引用。例如,如果希望解决方案文件与项目文件位于同一目录中,则可以从任何位置剪切解决方案文件并将其粘贴到项目文件目录中。然后,您需要编辑解决方案文件以修复项目引用,以便解决方案可以在打开时找到项目。

答案 3 :(得分:0)

我不知道任何开箱即用的解决方案。但是,如果根据所需的结构将代码文件组织到文件夹中,您可以将一个工具组合在一起,或许为您完成。项目文件的结构并不复杂,它们是相当简单的XML文档,主要由项目中包含的文件列表组成。

我认为生成的项目文件可能仍然需要一些手工劳动,但您应该能够获得代码来为您完成繁重的工作。你可能会得到一个漂亮的工具在你的博客上发布。

答案 4 :(得分:0)

  1. 打开一个现有项目。如果您还没有,请创建一个临时的。
  2. 选择“文件”>“新建”>“项目”
  3. 确保已选择“创建新解决方案”
  4. 选择所需的项目类型。
  5. 按“确定”创建项目

如果您在第一步中创建了一个临时项目,则可以立即将其删除

->现在您已经创建了一个项目,其中解决方案文件位于该项目内 enter image description here

答案 5 :(得分:0)

            public static class SlnFileGenerator
            {
                #region Public Methods
                public static string GetBatFileContent(string directoryPath, string slnFileName)
                {
                    if (directoryPath == null)
                    {
                        throw new ArgumentNullException(nameof(directoryPath));
                    }

                    if (slnFileName == null)
                    {
                        throw new ArgumentNullException(nameof(slnFileName));
                    }

                    var sb = new StringBuilder();
                    sb.AppendLine($"dotnet new sln --name {slnFileName}");

                    foreach (var csprojFile in Directory.GetFiles(directoryPath, "*.csproj", SearchOption.AllDirectories))
                    {
                        var relativePath = csprojFile.RemoveFromStart(directoryPath);

                        sb.AppendLine($"dotnet sln \"{slnFileName}.sln\" add \"{relativePath}\"");
                    }

                    sb.AppendLine("pause");

                    return sb.ToString();
                }
                #endregion
            }