#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>