Когда я пытаюсь просмотреть свои страницы Razor, я получаю следующее
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HLFVN3H0G8MT", Request id "0HLFVN3H0G8MT:00000001": An unhandled exception was thrown by the application.
Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException: One or more compilation failures occurred:
jhhodq42.4nm(4,41): error CS0234: The type or namespace name 'Razor' does not exist in the namespace 'Microsoft.AspNetCore' (are you missing an assembly reference?)
jhhodq42.4nm(5,62): error CS0012: The type 'Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
Это сбивает с толку, так как мои ссылки на пакеты ниже и включают netstandard
<ItemGroup>
<PackageReference Include = "Microsoft.AspNetCore.Mvc" Version = "2.1.1" />
<PackageReference Include = "Microsoft.AspNetCore.Server.Kestrel" Version = "2.1.2" />
<PackageReference Include = "Microsoft.Extensions.Logging" Version = "2.1.1" />
<PackageReference Include = "Microsoft.Extensions.Logging.Console" Version = "2.1.1" />
<PackageReference Include = "Microsoft.Extensions.Logging.Debug" Version = "2.1.1" />
<PackageReference Include = "Microsoft.Extensions.Configuration.CommandLine" Version = "2.1.1" />
<PackageReference Include = "NETStandard.Library" Version = "2.0.3" />
<PackageReference Include = "Newtonsoft.json" Version = "11.0.2" />
</ItemGroup>
Я нацелен на .netcore 2.1
мой startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
loggerFactory.AddDebug();
app.UseMvc();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Я неоднократно очищал и восстанавливал кеш пакетов и реплицировал это в VS2017, а в dotnetcli я очень ценил любые указатели. мое текущее лучшее предположение заключается в том, что существует конфликтная зависимость, но я все еще новичок в .netcore и не уверен, как отлаживать, любая помощь приветствуется
Следуя рецепту из книги по микросервисам ядра .NET
проверьте, установлено ли для PreserveCompilationContext значение false в файле .csproj, если это так, измените его на true: <PreserveCompilationContext>true</PreserveCompilationContext>. CompilationFailedException при использовании IRazorViewEngine в проектах, отличных от Sdk.Web, для визуализации страниц Razor





У меня нет проблем с VS 2017 для создания приложения Asp.net mvc, ориентированного на .netcore2.1, с использованием его шаблона проекта по умолчанию. некоторые из ссылок на пакеты могут вызвать проблемы, если их зависимости имеют конфликт версий в вашем решении.
используйте приведенную ниже ссылку,
<PackageReference Include = "Microsoft.AspNetCore.Mvc" Version = "2.1.0" />
<PackageReference Include = "Microsoft.AspNetCore.Server.Kestrel" Version = "2.1.0" />
Microsoft.AspNetCore.Mvc, Microsoft.AspNetCore.Server.Kestrel и ваше приложение MVC .netcore2.1 «Microsoft.AspNetCore.App» не должны иметь конфликта версий, и это также относится к их зависимостям.
если вы выбираете предпочтительную версию пакета Mvc, убедитесь, что у вас есть совместимые версии Server.Kestrel и ссылки на приложение .netcore2.1.
Да, я включаю библиотеку классов Razor в соответствии со списком ссылок на пакеты в исходном вопросе
В официальном репозитории есть проблема, в котором подробно обсуждается эта тема. На момент написания эта проблема все еще открыта, но, похоже, есть несколько потенциальных решений, которые вы можете попробовать. Тем не менее, похоже, что существует несколько, в настоящее время недостаточно четко определенных причин этой проблемы, поэтому я рекомендую вам попробовать их все. Я включу сюда некоторые из этих элементов, так что это не ответ только для ссылок, но я думаю, что было бы разумно прочитать этот вопрос полностью.
<system.web>
<compilation debug = "true" targetFramework = "4.7.1" >
<assemblies>
<add assembly = "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/>
</assemblies>
</compilation>
<httpRuntime targetFramework = "4.7.1" />
</system.web>
Примечание:
A web.config file is required when hosting the app in IIS or IIS Express. Settings in web.config enable the ASP.NET Core Module to launch the app and configure other IIS settings and modules. If the web.config file isn't present and the project file includes
<Project Sdk = "Microsoft.NET.Sdk.Web">, publishing the project creates a web.config file in the published output (the publish folder).
.csproj.<ItemGroup>
<Reference Include = "netstandard" />
</ItemGroup>
Судя по формулировке вашего вопроса, я предположил, что ваш проект совершенно новый, и что создание нового проекта является вариантом.
Измените global.json на целевую версию 2.1.2 пакета SDK для dotnet вместо 2.0.3.
Установите последнюю версию SDK
Надеюсь, что-то там решит вашу проблему.
Обновлено: я заметил, что вы дважды звонили в app.UseMvc(). Я сомневаюсь, что это имеет какое-то отношение, поскольку я полагаю, что эти вызовы просто устанавливают состояние, но нет необходимости вызывать его дважды.
Привет, Джон! Я потратил несколько часов на исправление предлагаемых здесь исправлений, но безуспешно, вероятно, мне нужно взглянуть свежим взглядом после отпуска! Я назначил награду за самый полезный ответ
@GreyCloud Большое спасибо. Мне очень жаль, что это не сработало для вас. Наслаждайтесь отдыхом, и давайте посмотрим, что будет, когда вы вернетесь. :)
Как именно вы создаете свой проект (ы)? Вы говорите, что ориентируетесь на .NET Core 2.1, но также используете некоторые старые шаблоны (например,
ILoggerFactory). Что формирует этот списокPackageReference?