visual-studio-2012 - 如何防止 Visual Studio 2012 扩展 MSBuild 4 通配符?

标签 visual-studio-2012 msbuild

我最近将我们的构建平台从基于 rake 的古老构建(别问,认真的)迁移到使用 msbuild 的构建平台。因为我们的许多团队成员不使用 Visual Studio(再次强调,不要问),他们习惯于将 .cs 文件放入项目文件夹中,然后让它神奇地作为构建的一部分出现.

因此,该项目的 .csproj 文件包含以下行:

<ItemGroup>
    <Compile Include="**\*.cs" Exclude="obj" />
</ItemGroup>

直接通过 msbuild 编译时效果非常好。但是,当我在 Visual Studio 中打开该项目时,它决定“有帮助地”将通配符扩展为完整的文件列表,似乎是在我打开它时:

<ItemGroup>
    <Compile Include="Controller.cs" />
    <Compile Include="MyClass.cs" />
    <Compile Include="MyClass2.cs" />
    <Compile Include="etc/etc/Something.cs" />
    <!-- and so forth -->
</ItemGroup>

虽然从技术上讲这仍然有效,但它也会引起悲伤,因为它消除了通配符功能。

我尝试实现 a technique shown on this page ,但我无法通过简单的编译让它工作。

以前有人遇到过这个问题吗?有什么办法可以解决这个问题吗?

编辑:为了澄清我所说的“无法让它工作”的意思,这就是我所做的:

在 Main.csproj 中,我有这个:

<!-- References in here -->
</ItemGroup>

<Import Project="Imports.proj" />

<ItemGroup>
<!-- ProjectReferences down here -->

然后,我创建了 Imports.proj,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Compile Include="**\*.cs" Exclude="obj" />
    </ItemGroup>
</Project>

当我在 Visual Studio 中打开 Main.csproj 时,它不显示任何文件。可能是<Import>线路错误?

编辑 2:有趣的是,它仍然通过 Visual Studio 构建,只是不将文件显示为项目的一部分。

最佳答案

我遇到了完全相同的问题,以至于在你没有注意到自己的情况下两天后我又问了完全相同的问题(Unwanted changes in .csproj file on build):

虽然我无法解释为什么 VS 在每次构建项目时都决定这样做,但我确实有一个解决方案供您尝试,它与我解决问题的方式相同:

<PropertyGroup>
    <IncludePattern>**\*.cs</IncludePattern>
    <ExcludePattern>obj</ExcludePattern>
</PropertyGroup>

<ItemGroup>
   <Compile Include="$(IncludePattern)" Exclude="$(ExcludePattern)" />
</ItemGroup>

VS 保留属性原样,而不将通配符扩展为完整的文件列表

关于visual-studio-2012 - 如何防止 Visual Studio 2012 扩展 MSBuild 4 通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583437/

相关文章:

c++ - 如何向当前的随机数生成器添加冒泡排序功能?

c++ - 如何在 visual studio 2012 中命名 openmp 中的关键部分

.net-core - 无法通过 dotnet build 命令编译模板 C++/CLI (.NET Core 3.1) 项目

c# - 从 Visual Studio 2013 构建中以 x64 进程模式运行自定义构建任务

c++ - 在循环中附加范围

mysql - LIMIT 1 在 Visual Studio 2012 中的 SQL 查询生成器中不起作用

visual-studio - BuildingInsideVisualStudio 属性值不适用于文件引用和项目引用条件

asp.net-core - 如何安装较新的 MSBuild 版本?

tfs - Team Build 2010 - 第三方程序集引用未复制到输出文件夹

c++ - 无法在 Windows 桌面的 Microsoft Visual Studio Express 2013 中打开源文件 GL/glut.h