最近我将我们的构建平台从一个基于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>
虽然从技术上来说这仍然有效,但它也会引起困扰,因为它会去掉通配符的能力。
我尝试实现这个页面上展示的技术,但我无法使其在简单编译中工作。
有人之前遇到过这个问题吗?有没有任何解决方法?
编辑:为了澄清“无法使其工作”的含义,这是我所做的:
在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进行构建,只是不会将文件显示为项目的一部分。
<Compile Include="**\*.cs" Exclude="obj" />
。你具体尝试了什么?你确定你把导入放在了正确的位置吗? - stijn