MS Build是否可以包含所有库项目代码文件而无需单独指定它们,并且可以与Visual Studio一起使用?

时间:2011-08-02 14:53:33

标签: visual-studio-2010 c#-4.0 msbuild csproj

有没有办法通过类库项目的常规.csproj文件指示MS Build包含所有代码文件(即项目树中的所有.cs文件,包括子文件夹),而不单独列出它们?

我能找到的最接近的解决方案是Using Wildcards to Specify Items

这是Visual Studio如何在我的类库项目中逐个文件构建指令的示例:

  <ItemGroup>
    <Compile Include="Controllers\HomeController.cs" />
    <Compile Include="Controllers\ParticipantController.cs" />
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Models\ParticipantModel.cs" />
    <Compile Include="Models\UserModel.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Utility.cs" />
  </ItemGroup>

另一种项目,即网站项目,使用一种机制来检测文件修改并重新编译这些文件。编译所有相关内容的概念是我对类库项目的要求,但不需要检测更改。

相关的Visual Studio&#34;问题&#34;:
我意识到我的理想解决方案可能不会被Visual Studio所遵循 - 它一次构建一个文件的构建文件 - 所以我最终会手动编辑构建文件。  有没有办法让Visual Studio与我理想的解决方案很好地配合?

1 个答案:

答案 0 :(得分:3)

尝试包含一个外部MSBuild文件,其中包含每个文件:

文件: IncludeEverything.proj

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="BeforeBuild">
      <ItemGroup>
        <Compile Remove="@(Compile)" />
        <Compile Include="*.cs;.\**\*.cs" />
      </ItemGroup>
    </Target>
  </Project>

更改您的csproj,导入另一个:

  ...
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="IncludeEverything.proj" />
  ...

通过使用此解决方案,VS是否包含csproj中的文件并不重要......最后,所有内容都将被包含在内。

这使得该解决方案易于在其他项目中重用。