Исключить файлы из компиляции при их отображении в Visual Studio - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть папка сгенерированных файлов, которая отражает файлы моего проекта.

Пример: если у проекта есть файл в Framework/HaTool.cs, тогда также будет файл в Generated/Framework/HaTool.cs.

Я пытаюсь использовать файлы Generated для сборки и исходные файлы для отладки и разработки. (Я использую директиву #line)

Я получил почти все для работы, за исключением того, что я не могу найти способ заставить Visual Studio (сообщество 2017) отображать каталог Generated и его файлы в обозревателе решений и Не попробуйте собрать их вместе во время разработки.

Моя текущая настройка не покажет мне файлы в обозревателе решений, но будет использовать их для сборки. Вот соответствующие части моего .csproj файла:

  <Project ToolsVersion="15.0">

    <PropertyGroup Condition="'$(GeneratedSourcePath)'==''">
      <GeneratedSourcePath>Generated</GeneratedSourcePath>
    </PropertyGroup>

    <ItemGroup>
      <Compile Remove="$(GeneratedSourcePath)\**" />
    </ItemGroup>

    <Target Name="UseGeneratedTarget" BeforeTargets="BeforeBuild" KeepDuplicateOutputs="false">
      <ItemGroup>
        <Compile 
          Condition="Exists('$(GeneratedSourcePath)\%(Compile.Identity)')" 
          Include="$(GeneratedSourcePath)\%(Compile.Identity)" />
        <Compile 
          Condition="Exists('$(GeneratedSourcePath)\%(Compile.Identity)')" 
          Remove="%(Compile.Identity)" />
      </ItemGroup>
    </Target>

    <Target Name="CleanupTarget" AfterTargets="AfterBuild">
      <ItemGroup>
        <Compile>
        <NonGeneratedFilename>$([System.String]::Copy('%(Compile.Identity)').Replace('$(GeneratedSourcePath)\', ''))</NonGeneratedFilename>
        </Compile>
      </ItemGroup>
      <ItemGroup>
        <Compile Include="@(Compile->'%(NonGeneratedFilename)')"/>
      </ItemGroup>
    </Target>

  </Project>

Есть ли способ просто позволить VS показывать файлы, не собирая их? что мне не хватает?

1 Ответ

0 голосов
/ 09 сентября 2018

Скопировано из комментария.

Во-первых, очень важно избегать настройки сценариев MSBuild, если это возможно, поскольку Visual Studio или любая другая IDE могут не справиться с обработкой. Это понятно, потому что настройка практически без ограничений, но кодовая база IDE должна следовать нескольким правилам.

Во-вторых, в вашем конкретном случае, если мы заменим теги <Compile> вручную на теги <None>, тогда VS может показать, что файлы - это обычные файлы в вашем проекте, но не исходный код для подачи компилятору. Такой трюк может быть сложным для других (в вашей команде или при других обстоятельствах), чтобы понять, почему вы применили его, поскольку <None> теги, как указывает название, предназначены для файлов не исходного кода, таких как txt или другие расширения.

В-третьих, если вам нужны такие файлы для особого поведения, вы можете рассмотреть возможность расширения системы MSBuild с помощью собственных тегов (как это делает ANTLR C # путем добавления тегов <Antlr4>), https://github.com/tunnelvisionlabs/antlr4cs

...