2014-02-05 138 views
9

我最近将我们的构建平台从建立在耙子上的古老构建平台(不要问,认真地)迁移到使用msbuild的构建平台。因为我们的许多团队成员不使用Visual Studio(同样,不要问),他们习惯于能够将.cs文件放入项目文件夹中,并让它神奇地作为构建的一部分出现。如何防止Visual Studio 2012扩展MSBuild 4通配符?

因此,该项目的.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构建,它不会将文件显示为项目的一部分。你做

+0

链接文章中显示的技术应该做的很好afaik:导入一些.proj文件,其中你有'<编译包含=“** \ *。cs”排除=“obj”/>'。你究竟做了什么?你确定你把进口放在正确的地方吗? – stijn

+0

@stijn我刚刚更新了我试过的问题 –

+0

根据你的'编辑2':是的,我忘了提及那部分:文件不会显示在VS中,我不知道解决这个问题的方法。有一个VS项目当然不会有用。但是考虑到这一点恐怕就是项目的处理方式了:在第一种情况下VS为你修正了通配符,否则它可能无法在解决方案资源管理器中显示这些文件。在第二种情况下,它不会更改任何内容,但不会显示任何文件。不知道是否有解决方案。如果不是,最好的办法可能是一个小工具来从模板生成项目文件并插入所有的cs文件... – stijn

回答

12

我有完全相同的问题,以至于我问完全相同的问题后(​​Unwanted changes in .csproj file on build)2天没有注意到自己:

虽然我无法解释为什么VS决定这样做每次它建立了一个项目的时候,我有一个解决方案,您可以尝试,它等同于我在我的问题是如何得到:

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

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

VS叶性质,因为它们不会扩大通配符成文件的完整列表

+1

哎呀!你是最棒的!我希望我有机会早点回来并加以实施! –