Код компилируется и выполняется в Visual Studio, даже если у него есть имя класса, на который нет ссылок - PullRequest
0 голосов
/ 18 января 2019

У меня есть веб-приложение ASP.NET Core, которое я тестирую, и оно не должно компилироваться или запускаться, но оно делает и то, и другое. Проблема должна быть в том, что я использую имя класса - ActionResult - из сборки, на которую нет ссылок. Обратите внимание, что ActionResult не является синим, как разрешенное имя класса, а также обратите внимание, что нет ошибки подчеркивания компилятора:

enter image description here

Более того, проект компилируется и работает просто отлично (хотя, естественно, не работает должным образом, то есть отвечает на запросы HTTP GET на этот URL со значениями, указанными выше). Что происходит?

enter image description here

Вот весь код только для справки:

Program.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace WebApplication2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

Startup.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace WebApplication2
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "api/{Default}");
            });
        }
    }
}

DefaultController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication2.wwwroot
{
    [Route("api/[controller]")]
    [ApiController]
    public class DefaultController : ControllerBase
    {
        // GET: api/Default
        [HttpGet]
        public async Task<ActionResult<IEnumerable<string>>> Get()
        {
            return Task.FromResult(new string[] { "value1", "value2" });
        }
    }
}

Вот информация о VS и .NET:

Microsoft Visual Studio Professional 2017
Версия 15.9.4
VisualStudio.15.Release / 15.9.4 + 28307,222
Microsoft .NET Core 2.1

1 Ответ

0 голосов
/ 18 января 2019

ActionResult находится в пространстве имен Microsoft.AspNetCore.Mvc, на которое вы фактически ссылаетесь. Visual Studio просто неправильно подсвечивает, что является ошибкой, с которой я сталкиваюсь время от времени.

...