【问题标题】:Solution has projects that are located outside the solution folder解决方案具有位于解决方案文件夹之外的项目
【发布时间】:2022-03-10 12:06:25
【问题描述】:

我尝试通过选择文件|添加到源代码管理将我的解决方案添加到本地存储库,但收到以下消息。

源代码控制 - Git
当前解决方案的项目位于解决方案文件夹之外。这些项目不会在 Git 存储库中进行源代码控制。要将所有项目添加到单个 Git 存储库,请将所有项目合并到一个文件夹下。

但是,我的所有项目都在我的解决方案文件夹中。我唯一不确定的是我在我的一个项目中添加了一个 NuGet 包,但我在任何地方都看不到它。它在项目的 csproj 文件中显示如下。

<ItemGroup>
  <PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" />
</ItemGroup>

有谁知道这是否会导致此错误?我可以点击确定,它创建了本地存储库,但我想把它放在 GitHub 上,所以我想找出问题所在。

另外一个问题是,在将这样的解决方案添加到 GitHub 时,我通常会包含这样的任何包吗?我希望有一个包文件夹,但我没有。

这是解决方案的截图:

这是我的解决方案文件:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28922.388
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toxic", "Toxic\Toxic.csproj", "{DEAAC3F5-B48F-4601-ADC7-ECFE1519A841}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toxic.Desktop", "Toxic.Desktop\Toxic.Desktop.csproj", "{A4EAA8D5-C085-4960-A871-74F68F6F9BC7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toxic.Web",    "Toxic.Web\Toxic.Web.csproj", "{49E8312B-506E-4AC1-8524-37BB601EC889}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToxicTests", "ToxicTests\ToxicTests.csproj", "{131B2077-A4C2-48EA-A1E1-8CA1A38097BD}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {DEAAC3F5-B48F-4601-ADC7-ECFE1519A841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {DEAAC3F5-B48F-4601-ADC7-ECFE1519A841}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {DEAAC3F5-B48F-4601-ADC7-ECFE1519A841}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {DEAAC3F5-B48F-4601-ADC7-ECFE1519A841}.Release|Any CPU.Build.0 = Release|Any CPU
        {A4EAA8D5-C085-4960-A871-74F68F6F9BC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {A4EAA8D5-C085-4960-A871-74F68F6F9BC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {A4EAA8D5-C085-4960-A871-74F68F6F9BC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {A4EAA8D5-C085-4960-A871-74F68F6F9BC7}.Release|Any CPU.Build.0 = Release|Any CPU
        {49E8312B-506E-4AC1-8524-37BB601EC889}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {49E8312B-506E-4AC1-8524-37BB601EC889}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {49E8312B-506E-4AC1-8524-37BB601EC889}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {49E8312B-506E-4AC1-8524-37BB601EC889}.Release|Any CPU.Build.0 = Release|Any CPU
        {131B2077-A4C2-48EA-A1E1-8CA1A38097BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {131B2077-A4C2-48EA-A1E1-8CA1A38097BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {131B2077-A4C2-48EA-A1E1-8CA1A38097BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {131B2077-A4C2-48EA-A1E1-8CA1A38097BD}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {2076F481-A5C7-4132-874E-47767C93475D}
    EndGlobalSection
EndGlobal

更新:

现在似乎每次我将新项目添加到源代码管理时都会收到此消息。这里似乎从根本上发生了一些事情,因为我认为我没有引用任何外部文件,并且我认为我的解决方案文件表明了这一点。请注意,即使我收到此消息,它仍会将解决方案添加到源代码管理中,并且一切似乎都正常。

我没有命令行 GIT 程序,如果有任何方法可以查看没有它会发生什么,我真的不想安装任何其他东西。

【问题讨论】:

  • 这可能是由于某些文件可能位于解决方案文件夹之外。您能否通过检查 csproj 文件来验证,您在项目/解决方案文件夹之外没有任何文件。
  • 如果一切正常,可能只是一些损坏的文件。删除所有 git 相关文件,然后重新打开解决方案并尝试将其添加到源代码管理。
  • @DipenShah:我没有看到类似的东西。唯一的例外是没有路径的包引用。请注意,我确实发现它可能只发生在包含 MS 测试(核心)项目的解决方案上。但同样,不在文件夹中的唯一引用似乎是包引用。
  • @DipenShah:正如我在更新中添加的那样,每次我向源代码管理添加解决方案时似乎都会发生这种情况。这些是不同的解决方案。所以这个问题比这更系统化。
  • 我在这里找到了类似的文章..!想知道这是否有帮助。 - social.msdn.microsoft.com/Forums/vstudio/en-US/…

标签: git visual-studio github


【解决方案1】:

请参阅下面的更新

根据解决方案文件中的 Visual Studio 版本号判断,我假设您使用的是 Visual Studio 2019,这是一个相对较新的版本(可能是预览版)。

这些是我的观察

  1. 我正在使用Visual Studio Enterprise 16.20 (Preview 3.0),还有Visual Studio Enterprise 16.1.6 (Release)

  2. 在任一版本的 Visual Studio 中,如果我在自定义目录下创建解决方案,在我的情况下,我使用 c:\Code\Projects,尝试添加新解决方案时收到完全相同的警告源代码管理,并选择与 VS 一起安装的 Git 版本。 请注意,我在此位置下有许多解决方案和目录。

  3. 如果我使用扩展名 Easy Git Integration tools(在我的配置中使用 Tortoise Git 作为其底层 Git 服务),我确实不会收到此警告消息。

  4. 如果我确定警告消息,则所有文件都成功包含在后续 Git 提交中,并创建了一个有效的 .gitignore 文件。这包括成功创建并推送到 GitHub,以及所有有效文件。

  5. 如果我在 Visual Studio 默认的 c:/username/source/repos 中创建解决方案,我确实不会收到来自 PreviewRelease 版本的警告视觉工作室。 请注意,我在此位置下没有任何其他解决方案或目录。

我建议你

a) 验证父文件夹中没有 git 存储库;这有时会使 Visual Studio 感到困惑——您会发现几年前对这个问题的引用。这很可能是你的问题。

b) 为了安心,请从命令行使用 Git。 Tortoise Git 还与 Visual Studio 集成。

如果您能提供更多有关 Visual Studio 和 Git 版本、路径层次结构、是否是新解决方案的信息,可能有助于我们查明问题。

更新

我在 .Net Core 2.2 项目中也遇到过同样的问题,在喝了一晚咖啡后,我可以重现这个问题。

使用 MS 测试项目:

a) 测试项目是解决方案中唯一的一个。

b) 下面显示了项目文件的内容。

c) 尝试 Add The Solution To Source Control 即 Visual Studio 默认 Git 插件,显示有关源文件树的消息:

d) 将源代码控制切换到第三方插件 EZ-Git,可以毫无问题地创建 Git 存储库。

e) 我从 zip 文件恢复到存档版本,没有集成 Git,并删除了单个包以查明原因;这样做的结果是,当删除以下行时,Visual Studio 的默认 Git 将成功创建一个存储库,并且没有错误消息。

<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />

f) 问题似乎是 Visual Studio 如何处理 MSTest.TestAdaptor 的 dll,默认情况下它们被视为项目的一部分,但它们位于解决方案文件夹结构之外,在 c 中: /Users/用户名/.nuget 目录。

g) 将 ExcludeAssets 添加到 MSTest.TestAdaptor 将删除错误消息,但很明显,它会破坏 Visual Studio Test Runner。

<PackageReference Include="MSTest.TestAdapter" Version="1.4.0">
  <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

也许可以找到IncludeAssets, ExcludeAssets, and PrivateAssets 的组合以允许Visual Studio Git 和Test Runner 正常运行。

h) 注意:上面详述的行为也适用于 xUnit,即

<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />

这表明该问题与 Visual Studio 和 Microsoft TestPlatform 的依赖关系有关。

【讨论】:

  • 我正在使用当前版本的 Visual Studio(自发布此问题以来可能已更新一两次)- 没有预览。我正在为我的项目使用默认的 repos 文件夹。似乎它可能与添加 .NET Core 测试项目有关(我的主要项目是一个 .NET Standard 类库)。使用命令行并不能让我高枕无忧。所以我想我正在寻找一个更可靠的理由来安装它。
  • 我正在使用 .Net Core Tests 项目和 .Net 标准类库,到目前为止,我还没有注意到任何相关性。这适用于各种版本的 .Net Core,包括稳定版和最新预览版。有趣的是,我对 VS Code 的问题为零,理论上它使用的是相同的 Git 提供程序。谜团加深……
  • 请查看更新后的答案;这个问题似乎是特定于 .Net Core 测试项目的。
  • 是的,我发现它与 .NET Core 测试项目有关。我需要更多时间来查看您发布的内容,但这似乎是迄今为止最好的答案,而且赏金即将到期,因此我已将您的答案标记为正确答案。谢谢。
  • 我遇到了同样的问题,并找到了一个相当简单的解决方法。正如 dmcquiggen 所指出的,这与 MS Test 有关。我发现通过在签入之前简单地卸载 MS 测试项目解决了这个问题,并且测试项目仍然被签入源代码管理。然后只需重新加载 MS Test 项目,它似乎可以正常工作。也许不包括底层测试包,但这对我来说不是问题。
【解决方案2】:

对于在添加 xUnit .Net Core 测试项目后立即遇到此问题的任何人,解决方案/解决方法在 tintow 对 dmcquiggin 的出色回答的评论中:

我遇到了同样的问题,并找到了一个相当简单的解决方法。正如 dmcquiggen 所指出的,这与 MS Test 有关。我发现通过在签入之前简单地卸载 MS 测试项目解决了这个问题,并且测试项目仍然被签入源代码控制。然后只需重新加载 MS Test 项目,它似乎可以正常工作。也许不包括底层测试包,但这对我来说不是问题。 – Tintow 2019 年 10 月 11 日 11:59

【讨论】:

    【解决方案3】:

    通过转到the root folder of your Git repository 在命令行中进行双重检查,然后键入:

    git status
    

    请检查您的解决方案文件是否显示在要添加的文件列表中。
    否则,这意味着 Git 存储库位于一个文件夹中,而解决方案及其项目则完全位于另一个路径中。

    【讨论】:

    【解决方案4】:

    我遇到了同样的问题,我使用 GitTools 扩展解决了它。 我的 git 存储库具有以下结构:

    就我而言,我只是想跟踪 src 文件夹中的文件。但是,我的项目解决方案文件位于 bin 文件夹中。因此,每次我尝试使用 File|Add to Source Control 或简单地单击 git 图标来创建存储库时:

    我收到了你的消息:

    “ 源代码控制 - Git 当前解决方案的项目位于解决方案文件夹之外。这些项目在 Git 存储库中不受源代码控制。要将所有项目添加到单个 Git 存储库,请将所有项目合并到一个文件夹下。”

    据我了解,因为我在 src 文件夹中的源文件链接到我的项目解决方案,但在项目解决方案文件夹(即 \bin)中找不到它们,因此无法使用“源代码管理 – Git”将它们添加到源代码管理中”。可能,我以错误的方式理解了该消息,但我的解决方案有效。

    让我们尝试仔细检查解决方案文件夹的路径:

    1) 右键项目解决方案 -> 在文件资源管理器中打开文件夹

    2) 我们可以看到我的项目解决方案文件夹(即 bin 文件夹)不包含我要跟踪的 src 文件夹。所以,VS git 在抱怨它。

    所以,我通过安装解决了这个问题: a) 工具 -> 扩展和更新 -> Git 工具

    注意:您可能需要重新启动 Visual Studio。

    b) 安装后,你会有另一个菜单:Git Tools

    c) 只需选择:Git ini,您将拥有新的存储库。您不会注意到任何特别的变化。

    d) 你可以再次进入 GitTools -> GitBash 并输入 Git Status 进行测试:

    请注意,git 存储库是在包含项目解决方案的 /projects/DRRsiddonOri3/bin 文件夹中创建的。

    要付出的代价是,如果它困扰您,您将不得不使用 GitTools 菜单中的 Git Bash(即手动从 Git Bash)提交。

    但是,我无法添加 /src 文件夹,因为它不在 git repostiroty (/projects/DRRsiddonOri3/bin) 中。

    就我而言,我需要在 /projects/DRRsiddonOri3/ 中创建 git 存储库

    所以,我遵循这条路: GitTools->GitBash 并将目录从 /projects/DRRsiddonOri3/bin (项目解决方案)更改为 /projects/DRRsiddonOri3/ 并创建存储库

    测试: 视窗 10 Visual Studio 社区 2017 版本 15.9.6

    【讨论】:

      【解决方案5】:

      这发生在几个月前(在 Visual Studio 2017 上)。以下解决了这个问题:

      1. 关闭 Visual Studio
      2. 删除.git文件夹(默认隐藏)
      3. 打开 Visual Studio。将解决方案添加到源代码管理

      不要忘记检查项目根文件夹中是否有任何 .git 文件夹。

      注意:您会丢失历史数据。

      【讨论】:

        【解决方案6】:

        删除解决方案文件夹中的.vs文件夹。

        这解决了我的情况。 就我而言,问题的原因可能是我已将整个解决方案文件夹移动到另一个位置(上一层)。 我假设一些旧路径仍然存在于 .vs 缓存中。 (请务必在删除此文件夹之前关闭 Visual Studio。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多