【问题标题】:Visual Studio is expanding wildcard project file includes upon buildVisual Studio 正在扩展通配符项目文件在构建时包含
【发布时间】:2020-02-04 19:40:53
【问题描述】:

我正在使用 Visual Studio 2019 并正在升级 .vbproj 文件以使用一些更现代的功能 - 我认为最初的解决方案/项目可能早在 VS 2008 就已构建。 我正在将大量显式文件包含转换为一个通配符以提取我的所有文件:

   <ItemGroup>
      <Compile Include="Src\**\*.vb" />
   </ItemGroup>

这很好用,我可以在 Visual Studio 的项目资源管理器中看到所有文件。 但是,当我构建项目时,这个通配符被扩展并且每个源文件都被命名,如下所示:

   <ItemGroup>
      <Compile Include="Src\Code\File1.vb" />
      <Compile Include="Src\Code\File2.vb" />
      <Compile Include="Src\Code2\File1.vb" />
   </ItemGroup>

在我构建项目之前不会发生这种情况,我可以毫无问题地加载 Visual Studio,并且项目文件保持不变。

我这样做是因为在删除许多文件的重构分支中合并这些文件时遇到了一些问题,因此这种方法会容易得多。

我可以阻止 Visual Studio 这样做吗?

【问题讨论】:

  • 嗯,这很烦人。可能是特定于 VB 的东西:我们对 C++ 文件做同样的事情,而且工作正常。
  • 一个想法:据我所知,VS 只会修改项目文件本身。因此,如果您在一个单独的文件中定义您的 ItemGroup,然后从主 .vbproj 文件中导入,您应该会很好。

标签: vb.net visual-studio msbuild


【解决方案1】:

我已通过将项目文件升级到 Visual Studio 2017/2019 类型来解决此问题。以下指南非常方便:https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/

  • 用&lt;Project Sdk="Microsoft.NET.Sdk"&gt; 替换根项目 XML 元素
  • 删除通配符包括我在原始帖子中指定的 -- 默认情况下,Visual Studio 将此 glob 模式与新项目样式匹配
  • 已转换 packages.config NuGet 引用以使用 &lt;PackageReference&gt;s

我对结果很满意 :)

【讨论】:

    【解决方案2】:

    我可以阻止 Visual Studio 这样做吗?

    实际上它应该可以工作,并且它确实适用于我身边最新的 VS2019 16.4.4 的 C# and VB.net 项目。

    1.我的猜测是,由于你的项目来自旧的VS2008,所以你的项目文件(xx.vbproj)的格式与VS2019中的新项目文件格式有很大的不同,所以VS2019的项目系统不能很好地识别它。

    PS:为此,您可以在 VS2019 中创建一个新的 VB .net fx 项目,以确认您想要的内容是否适用于 VB 项目。另外我建议您可以创建新的 VB 空项目,并将源文件移动到新项目中进行管理。

    2.另一个可能的原因可能与如何复制和移动文件的顺序有关。

    对我来说,我创建了一个新的 VB 项目=>在项目文件夹中创建 Src 文件夹=>在 Src 文件夹中创建 Code 文件夹=> 在 Code 文件夹中创建 Test1.vb 和 Test2.vb简单的代码。然后使用ItemGroup 来包含这些文件,无论是在开发期间还是在构建之后,它都可以正常工作。

    (您可以检查是否使用了类似的步骤,或者您可以在编辑 xx.vbproj 之前将文件粘贴到解决方案资源管理器中?)

    希望对您有所帮助,如果我误解了您的问题,请随时纠正我:)

    【讨论】:

    • 我认为我已经按照此处的升级路径解决了这个问题 - natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade(将根元素更改为 )我删除了通配符包括,因为它默认包括这些。
    • 这是 .net core 的指南,在 VS2017 和 VS2019 中可用。我不确定您为什么要将一个 VS2008 项目迁移到 .net 核心,但如果这有助于解决您的问题,请考虑稍后添加您的详细答案,这将有助于其他有类似问题的人。只是一个提醒:)
    • 我认为它不是特定于 dotnet 核心的,您仍然可以针对 .NET 框架。我也转换为使用 ,而不是旧的 packages.config。总而言之,我的 .vbproj 已从 2100 多行降至 300 行:)
    猜你喜欢
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2019-04-29
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多