Могу ли я иметь анализатор в проекте .net 4.5? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть проект OSS на GitHub, построенный против .NET 4.5 на AppVeyor CI с Visual Studio 2017 (не предварительный просмотр, только 2017).

Решение создает надстройку COM, которая расширяет классически устаревшую Win32 IDE, и мы установили, что самой ранней версией Windows, на которой нам нужно работать, является Vista (так что .net 4.5 и async/await awesomeness ).

Пока все хорошо. Теперь создание COM-видимой библиотеки .net DLL - это одно, а создание надстройки COM, которая выполняется в процессе и размещается в суетливом приложении, которое последний раз обновлялось 20 лет назад, - это другое: мы не можем полагаться на .net сборка мусора очищает RCW недетерминированным образом, поэтому довольно легко случайно утечь COM-объект и создать серьезные проблемы во время выполнения (на самом деле, разрыв), поэтому один из основных участников добавляет проект анализатора Roslyn в решение , что происходит чтобы помочь разработчикам, старым и новым в этом, путем предотвращения сборки, которая привела бы к такой утечке.

Таким образом, все файлы .csproj в решении получают эту разницу:

+  <ItemGroup>
+    <Analyzer Include="..\RubberduckCodeAnalysis\RubberduckCodeAnalysis\bin\Release\netstandard1.3\RubberduckCodeAnalysis.dll" />
+  </ItemGroup>

Таким образом, сначала необходимо построить проект анализатора.

Там есть .sln diff, показывающий GUID для нового проекта анализатора:

+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RubberduckCodeAnalysis", "RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj", "{A2B4E037-A446-41B9-A304-F91C7C7A6972}"
+EndProject

А затем .sln diff, показывающий один из проектов решения и то, как анализатор был добавлен в качестве зависимости для управления порядком сборки :

 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rubberduck.Parsing", "Rubberduck.Parsing\Rubberduck.Parsing.csproj", "{A4A618E1-CBCA-435F-9C6C-5181E030ADFC}"
    ProjectSection(ProjectDependencies) = postProject
+       {A2B4E037-A446-41B9-A304-F91C7C7A6972} = {A2B4E037-A446-41B9-A304-F91C7C7A6972}
        {8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0} = {8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0}
    EndProjectSection
 EndProject

Что приводит меня к ошибке сборки AppVeyor, в которой я застрял:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Пользователи \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets (1603,5): ошибка: проект 'C: \ Проекты \ Rubberduck \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis.csproj' цели 'netstandard1.3'. На него не может ссылаться проект, цели '.NETFramework, версия = v4.5' . [C: \ Проекты \ Rubberduck \ Rubberduck.Parsing \ Rubberduck.Parsing.csproj]

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

На сервере сборки AppVeyor CI проект анализатора - это просто библиотека DLL, являющаяся частью решения, и если мы не скажем, что он будет собран первым, библиотека DLL анализатора не будет найдена, и решение выиграно. не строить.

Похоже, я застрял, с какой стороны я смотрю на проблему. Все мои пользователи - пользователи Win32, меня не волнует переносимость; Я все равно хочу работать в Windows Vista, поэтому есть ли способ заставить это работать на CI, не перенаправляя проекты на .NET Standard 1.3?

1 Ответ

0 голосов
/ 01 мая 2018

Если вы посмотрите документацию стандарта .NET , вы увидите, что версия 1.3 совместима с .NET Framework 4.6:

enter image description here

Вы говорите, что вам нужна поддержка Windows Vista, и вам повезло, потому что последней версией .NET, поддерживаемой в Windows Vista (требуется SP2), является .NET Framework 4.6: Системные требования .NET Framework .

Итак, я бы предложил вам обновить все ваши проекты до .NET Framework 4.6, и у вас больше не будет проблем с совместимостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...