Анализатор работает даже без Microsoft.CodeAnalysis.dll - PullRequest
0 голосов
/ 08 марта 2019

У меня есть ссылка на xunit.analyzers в моем проекте .NET.Эта dll зависит от Microsoft.CodeAnalysis.dll 1.2.0.0, как я определил с помощью ildasm.

У меня нет ссылок на Microsoft.CodeAnalysis.dll в моем проекте.Его нет в моем GAC, он не является частью какого-либо другого пакета NuGet в этом проекте и не находится в папке / bin.

Приведенный выше анализатор обычно выдает ошибки, когда я набираю новый код.Кроме того, я использую его как часть процесса сборки в .csproj.

Вопросы:

  1. Как этот анализатор может работать без одного изего зависимости?
  2. Как удовлетворяется зависимость во время сборки?
  3. При запуске сборки в TeamCity я получаю ошибку, которая прекращается, как только я удаляю анализатор xUnit в качестве элемента анализатора из .csproj.Я не получаю эту ошибку локально.Что здесь происходит?

    CSC error CS8032: An instance of analyzer Xunit.Analyzers cannot be created from: Could not load file or assembly Microsoft.CodeAnalysis Version=1.2.0.0

1 Ответ

1 голос
/ 09 марта 2019

Ответ на пункты 1 и 2:

Похоже, моя локальная сборка компилируется с использованием C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Roslyn\csc.exe, у которого в папке Microsoft.CodeAnalysis.dll соответствующей версии, как этого требует xunit.analyzer.

Однако сервер сборки использует C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe, версия которого ниже требуемой, и это приводит к сбою сборки.

Только для справки и контекста, csc.exe разрешает сборкузависимости по порядку:

  1. локальная папка
  2. csc.exe папка
  3. папка, указанная в / lib switch
  4. папки в переменной среды LIB

Точка ответа 3

I Предположим, , поскольку анализатор взаимодействует с Roslyn, пока я пишу свой код локально, он также может удовлетворитьего зависимости из той же папки Roslyn выше.Это спорный вопрос на сервере сборки.

...