Visual Studio успешно компилируется, но Рослин Балкс - PullRequest
0 голосов
/ 09 июля 2020

Пишу анализатор кода 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. Ссылка на номер строки, вызывающей ошибку, - нулевая строка, «using System;».

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

1 Ответ

3 голосов
/ 09 июля 2020

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

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

var tree = CSharpSyntaxTree.ParseText( srcFile );

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

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

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

...