ReSharper - Включить внешние исходные файлы в проверку кода - PullRequest
5 голосов
/ 25 октября 2011

Справочная информация:

Мы используем сторонний инструмент в нашем решении .NET C #. Этот инструмент имеет собственный синтаксис и интегрируется с Visual Studio. Когда мы используем этот инструмент, мы пишем его разметку в Visual Studio, а затем, когда мы строим решение, пользовательский инструмент запускается и генерирует файл .cs на основе написанной нами разметки.

Этот сгенерированный исходный файл содержит номер версии, который вызывает проблемы, когда мы возвращаем их в систему управления версиями (бесконечные конфликты). Мы понимаем, что рекомендуется не проверять сгенерированные исходные файлы.

Таким образом, мы исключили сгенерированные файлы .cs из SVN, а затем мы столкнулись с следующей проблемой, заключающейся в том, что решение Visual Studio ссылалось на эти файлы, поэтому, когда TeamCity (наше программное обеспечение для непрерывной сборки / интеграции) приступило к созданию решения, оно бы не удалось сразу же, так как не смог найти эти файлы.

Затем мы удалили их из решения, а также исключили их из SVN, это исправило исходную проблему, мы больше не проверяем сгенерированный код, и он прекрасно собирается в TeamCity (так как файлы восстанавливаются при каждой сборке ).

Теперь у нас возникла новая проблема - поскольку сгенерированные файлы больше не включаются в решение, проверка целостности и кода завершается неудачей, поскольку сгенерированные классы не могут быть найдены. Решение компилируется просто отлично (как и во время сборки, код заново генерируется).

Вопрос

Есть ли способ указать ReSharper включить сгенерированные файлы .cs в проверку кода? Эти файлы являются внешними по отношению к решению, но они находятся в каталоге obj.

Приветствия

Tyler

Ответы [ 2 ]

4 голосов
/ 28 февраля 2014

У нас была похожая проблема, и мы не смогли найти хорошее решение, поэтому я написал расширение ReSharper для включения внешнего кода:

https://resharper -plugins.jetbrains.com / пакеты / ReSharper.ExternalCode

2 голосов
/ 26 октября 2011

Как уже упоминалось в моем комментарии, один из обходных путей заключается в том, чтобы сохранить сгенерированные файлы в решении (но не в управлении исходным кодом), добавив при этом этап предварительной сборки для создания пустых файлов .cs (если реальный сгенерированный файл не являетсяприсутствует), чтобы файл всегда был доступен во время сборки.

В моих проектах я использую следующие цели MSBuild для создания пустых файлов с помощью задачи Touch .Возможно, вам придется внести некоторые изменения - в моем случае целевые файлы фактически определены в проекте, а не на уровне решения;и действие сборки для файлов установлено на «Нет», что важно для понимания работы этих целей.

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<!--
Creates empty 'dummy' files for any files that are specified but do not exist. 
To be processed, the following must be true:

1. The file is included in an ItemGroup called CanCreateDummy, e.g.
      <ItemGroup>
        <CanCreateDummy Include="SomeFile.cs" />
      </ItemGroup>
   If you want to specify a CanCreateDummy file in the .csproj file, you would
   modify the above slightly as follows to prevent it appearing twice:
      <ItemGroup>
        <CanCreateDummy Include="SomeFile.cs">
          <Visible>false</Visible>
        </CanCreateDummy>
      </ItemGroup>

2. The file is included in the ItemGroup called None. This is normally performed 
   by adding the file to the project in the usual way through Visual Studio, and 
   then setting the file's Build Action property to None.
-->
<Target
  Name="CreateDummyFiles"
  AfterTargets="BeforeBuild"
    >
<!--
This voodoo creates the intersection of 2 lists - @(CanCreateDummy) and @(None) 
(this latter item is defined in the project file). We want to create a filtered 
list of all items that are in both these lists, which is called _ProjectDummyFiles.
See http://blogs.msdn.com/b/msbuild/archive/2006/05/30/610494.aspx for how the 
Condition voodoo works.
-->
<CreateItem Include="@(CanCreateDummy)" Condition="'%(Identity)' != ''  and '@(None)' != ''" >
  <Output TaskParameter="Include" ItemName="_ProjectDummyFiles"/>
</CreateItem>

<Message
    Text="Creating dummy settings file @(_ProjectDummyFiles)"
    Condition=" !Exists('%(_ProjectDummyFiles.FullPath)')"
        />

<Touch
    AlwaysCreate="true"
    Files="@(_ProjectDummyFiles)"
    Condition=" !Exists('%(_ProjectDummyFiles.FullPath)')"
        />

</Target>
</Project>

Надеюсь, это поможет

Rich

...