Не удается сгенерировать контроллер и представления из базовой модели Entity Framework в CLI

#c# #asp.net-mvc #entity-framework #asp.net-core

#c# #asp.net-mvc #entity-framework #asp.net-core

Вопрос:

В ASP.NET Ядро 3.1 Я ищу способ создания контроллеров и представлений CRUD из командной строки в Windows из моих моделей с использованием механизма построения каркасов Entity Framework. Кажется, все используют Visual Studio для выполнения этого в учебных пособиях, как будто это единственный способ. Никто не использует VS Code. Это невозможно в Windows 10?

Я использую эту команду.

 dotnet aspnet-codegenerator controller -name RecipeIngredientsController -m RecipeIngredient -dc CookingContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
 

Каждый раз, когда я пытаюсь это сделать, я возвращаюсь с той же ошибкой.

Поиск генератора ‘controller’… В Microsoft.VisualStudio.Web.CodeGeneration не найдено генераторов кода с именем «controller».CodeGeneratorsLocator.GetCodeGenerator(String codeGeneratorName) в Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand .Выполнить (строка [] аргументы)

Я просмотрел так много документации, что да, я все это видел. Это не помогло мне устранить ошибку. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/tools/dotnet-aspnet-codegenerator?view=aspnetcore-5.0

Также кто-то по проблеме с Github предложил скопировать эти 2 папки в папку Templates в Ubuntu, которую я также пробовал на своем компьютере с Windows 10.

  • ControllerGenerator
  • ViewGenerator

И все же я все еще получаю ту же ошибку. Вот модели, которые я использую.

Ingredient.cs

     using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    namespace DTEditorLeftJoinSample.Models
    {
        public class Ingredient
        {
            public int ID {get;set;}
            [Display(Name = "Ingredient Name")]
            public string IngredientName {get;set;}

            public ICollection<RecipeIngredient> RecipeIngredient { get; set; }
        }
    }    
 

Recipe.cs

     using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace DTEditorLeftJoinSample.Models
    {
        public class Recipe
        {
            public int ID { get; set; } 
            
            public string Title {get;set;}
            public string Descriptions {get;set;}
            public string Directions {get;set;} 
    
            public ICollection<RecipeIngredient> RecipeIngredient {get;set;}    
        }
    }
 

RecipeIngredient.cs

 using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace DTEditorLeftJoinSample.Models
{
    public class RecipeIngredient
    {
        public int ID {get;set;}

        [Display(Name = "Recipe ID")]
        public int RecipeID { get; set; }

        [Display(Name = "Ingredient ID")]
        public int IngredientID { get; set; }
    
        public int quantity {get;set;}        
        public Recipe Recipe {get;set;}
        public Ingredient Ingredient {get;set;}
    }
}
 

Комментарии:

1. Не могли бы вы поделиться своим asp.net базовая версия? Похоже, есть какая-то проблема для конкретной версии ядра dotnet. Я предлагаю вам попробовать обновить до 3.1.4 и повторить попытку.

2. Привет @BrandoZhang. Вы имеете в виду шаги, рекомендованные TB-Development? К сожалению, это не сработало. Да, я использовал 3.1.0 раньше. Теперь я использую версию, которую вы упомянули, и перестраиваю все это. Та же ошибка.

Ответ №1:

Даже в Visual Studio щелчок правой кнопкой мыши по контроллеру и добавление «Нового элемента каркаса» не сработало. Постоянно получал сообщение об ошибке «Произошла ошибка при запуске выбранного пакета генератора кода, не удалось восстановить».

Единственным исправлением было обновление платформы с .NET Core 3.1 до последней версии .NET 5 и пакетов до 5.0.1, что было до смешного просто, как показано здесь .

Все, что вы делаете, это меняете файл проекта на этот и обновляете каждый пакет NuGet, который вы установили, через графический интерфейс диспетчера пакетов в Visual Studio.

Если вы хотите научиться всему этому, пожалуйста, посмотрите Мой блог здесь

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp5.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>


  <ItemGroup>
    <PackageReference Include="DataTables-Editor-Server" Version="1.9.5" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.0" />    
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.0" />
  </ItemGroup>
</Project>