【发布时间】:2023-03-09 01:40:01
【问题描述】:
我最近将我们的构建平台从基于 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 构建,只是没有将文件显示为项目的一部分。
【问题讨论】:
-
链接文章中显示的技术应该很好 afaik:导入一些 .proj 文件,其中包含
<Compile Include="**\*.cs" Exclude="obj" />。你到底尝试了什么?你确定你把导入放在正确的地方吗? -
@stijn 我刚刚用我尝试的方法更新了问题
-
根据您的“编辑 2”:是的,我忘了提到那部分:文件不会在 VS 中显示,我不知道有什么方法可以解决这个问题。当然,拥有 VS 项目并没有什么用处。但是想到它,恐怕这就是处理项目的方式:在第一种情况下,VS为您“修复”通配符,否则它可能无法在解决方案资源管理器中显示文件。在第二种情况下,它不会更改任何内容,但不会显示任何文件。不确定是否有解决方案。如果没有,最好的办法是从模板生成项目文件并插入所有 cs 文件的小工具...
标签: visual-studio-2012 msbuild