Может ли MS Build включать все файлы кода проекта библиотеки, не указывая их по отдельности, и хорошо играть с Visual Studio? - PullRequest
3 голосов
/ 02 августа 2011

Есть ли способ указать MS Build через обычный файл .csproj проекта библиотеки классов включить все файлы кода (т. Е. Все файлы .cs в дереве проекта, включая подпапки), не перечисляя их по отдельности?

Самое близкое решение, которое я могу найти, это Использование подстановочных знаков для определения элементов .

Это пример того, как 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:
Я понимаю, что Visual Studio вряд ли соблюдает мое идеальное решение, которое строит файл сборки по одному файлу за раз, поэтому в итоге я бы вручную отредактировал файл сборки. Есть ли способ заставить Visual Studio хорошо играть с моим идеальным решением?

1 Ответ

3 голосов
/ 03 августа 2011

Попробуйте включить внешний файл 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 или нет ... в конце все будет включено.

Это позволяет легко использовать это решение в других проектах.

...