Visual Studio успешно компилируется, но Roslyn Balks

Я пишу анализатор кода C # и столкнулся с проблемой. Следующий файл исходного кода:

using System;

namespace J4JSoftware.Logging
{
    // added to test SharpDoc
    [AttributeUsage( validOn: AttributeTargets.Class | AttributeTargets.Interface, Inherited = false, AllowMultiple = true )]
    public class DummyAttribute : Attribute
    {
#pragma warning disable 67
        // ReSharper disable once EventNeverSubscribedTo.Global
        public event EventHandler<int> Ralph;
#pragma warning restore 67
        
#pragma warning disable 8618
        public DummyAttribute( string arg1, Type arg2 )
#pragma warning restore 8618
        {
        }

        public int TestField;
    }

    public interface IDummyInterface1
    {
        int Number { get; set; }
    }

    public interface IDummyInterface2 : IDummyInterface1
    {
        string Text { get; set; }
    }

    public interface IDummyInterface3<in T>
        where T : DummyAttribute
    {
        string GetValue( T item );

        bool TestGenericMethod<TMethod>()
            where TMethod : class, IDummyInterface1;
    }
}

компилируется без ошибок или предупреждений внутри Visual Studio 2019. Но он генерирует ошибку CS0116 -

Пространство имен не может напрямую содержать такие элементы, как поля или методы.

когда я компилирую его с помощью Roslyn. Ссылка на номер строки, вызывающей ошибку, равна нулю строки, используя System ;.

Что вызывает такое поведение и как его исправить?


person Mark Olbert    schedule 09.07.2020    source источник


Ответы (1)


Вздох. Идиот при ошибке клавиатуры. Что я опишу здесь, если кто-то совершит ту же ошибку.

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

var tree = CSharpSyntaxTree.ParseText( srcFile );

но я должен был назвать это так:

var tree = CSharpSyntaxTree.ParseText( File.ReadAllText(srcFile) );

Парсер ожидает исходный код, а не путь к файлу.

person Mark Olbert    schedule 09.07.2020