Имя типа или пространства имен «Func‹,›» не найдено (вам не хватает директивы using или ссылки на сборку?

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

CS0246 Не удалось найти имя типа или пространства имен «Func‹,>» (вы пропустили директиву using или ссылку на сборку?)

Я думаю, что для использования «Func‹>» я использую System, а для IDictionary я использую System.Collections.Generic; поэтому я не понимаю, почему это все еще не может работать.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using AppFunc = Func<IDictionary<string, object>, Task>;


public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var middleware = new Func<AppFunc, AppFunc>(MyMiddleWare);

        app.Use(middleware);
        app.Use<OtherMiddleware>();
    }

    public AppFunc MyMiddleWare(AppFunc next)
    {
        AppFunc appFunc = async (IDictionary<string, object> environment) =>
        {
            var response = environment["owin.ResponseBody"] as Stream;
            byte[] str = Encoding.UTF8.GetBytes("My First Middleware");
            await response.WriteAsync(str, 0, str.Length);

            await next.Invoke(environment);
        };
        return appFunc;
    }

    public class OtherMiddleware : OwinMiddleware
    {
        public OtherMiddleware(OwinMiddleware next) : base(next) { }

        public override async Task Invoke(IOwinContext context)
        {
            byte[] str = Encoding.UTF8.GetBytes(" Other middleware");
            context.Response.Body.Write(str, 0, str.Length);

            await this.Next.Invoke(context);
        }
    }
}

person ckky1213    schedule 02.08.2018    source источник


Ответы (3)


Вам нужно поместить AppFunc в класс, чтобы он мог использовать использование, или вы можете использовать полное пространство имен для Func, IDictionary и Task

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

// Use this
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;


public class Startup
{
    // Or this
    using AppFunc = Func<IDictionary<string, object>, Task>;

    ...
}
person Kahbazi    schedule 04.08.2018

Для меня это была младшая версия приложения .NET Target Framework 2.0. Поменял на 4.7 (кажется минимум 3.5).

person user2091150    schedule 27.06.2019
comment
Ага. Это было проблемой и для меня. Я загружал чужой проект, и версия фреймворка тоже была 2.0. - person Scott Smith; 25.05.2020

Вам необходимо убедиться, что вы добавили эталонный System.Runtime.CompileServices в свой проект, как показано здесь: https://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx делегат является частью сборки mscorlib.

person Carlos Rivera    schedule 02.08.2018