c# - 如何更新由 Microsoft.AspNet.Scaffolding 为 aspnetcore 编码的 CodeGenerator?
问题描述
我用 Microsoft.AspNet.Scaffolding.12.dll 编写了一个 CodeGenerator,我可以在 aspnet mvc 5 中使用它(右键单击项目并添加 -> 新建基础项目),但是当我想为 aspnetcore 更新它时,它不起作用。那么我该怎么做才能更新呢?
1.我尝试使用visual studio sdk重写它,但是对我来说太难了。
CodeGenerator主要是:</p>
[Export(typeof(CodeGeneratorFactory))]
public class ModuleScaffolderFactory : CodeGeneratorFactory
{
public ModuleScaffolderFactory()
: base(CreateCodeGeneratorInformation())
{
}
public override ICodeGenerator CreateInstance(CodeGenerationContext context)
{
return new ModuleScaffolder(context, Information);
}
// We support CSharp WAPs targetting at least .Net Framework 4.5 or above.
// We DON'T currently support VB
public override bool IsSupported(CodeGenerationContext codeGenerationContext)
{
if (ProjectLanguage.CSharp.Equals(codeGenerationContext.ActiveProject.GetCodeLanguage()))
{
FrameworkName targetFramework = codeGenerationContext.ActiveProject.GetTargetFramework();
if (targetFramework != null)
{
return String.Equals(".NetFramework", targetFramework.Identifier, StringComparison.OrdinalIgnoreCase) &&
targetFramework.Version >= new Version(4, 5);
}
}
return true;
}
private static CodeGeneratorInformation CreateCodeGeneratorInformation()
{
return new CodeGeneratorInformation(
displayName: "[Platform]添加模块功能(Hplus)",
description: "通过实体类,生成相应模块的Core层和Application层代码",
author: "yanusosu",
version: new Version(0, 1, 0, 0),
id: "Yanusosu_Platform_Scaffolding",
icon: ToImageSource(Resources.Application),
gestures: new[] { "Yanusosu" },
categories: new[] { "Yanusosu", Categories.Common, Categories.Other }
);
}
/// <summary>
/// Helper method to convert Icon to Imagesource.
/// </summary>
/// <param name="icon">Icon</param>
/// <returns>Imagesource</returns>
public static ImageSource ToImageSource(Icon icon)
{
ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return imageSource;
}
}
请帮助我,please.or 告诉我 Microsoft.AspNet.Scaffolding.12.dll 不能在 aspnetcore 中使用并建议我另一种方式,非常感谢!
解决方案
这是我找到解决它的方法,作为您工厂的子类,属性将其导出为 .net 核心脚手架,并且 IConfigurableScaffolderFactory 为 Visual Studio 脚手架提供了一些反馈。
[Export("NetCoreScaffolderFactory", typeof(CodeGeneratorFactory))]
public class ModuleScaffolderFactoryConfig : ModuleScaffolderFactory , IConfigurableScaffolderFactory
{
/// <summary>
/// evaluate a selected code generation context
/// </summary>
/// <param name="factoryEvaluationContext"></param>
/// <returns></returns>
public bool IsEvaluationContextInitialized(IScaffolderFactoryConfigEvaluationContext factoryEvaluationContext)
{
return true;
}
/// <summary>
/// check selected code generation context is supported for selected project if yes, return true.
/// </summary>
/// <param name="factoryEvaluationContext"></param>
/// <returns></returns>
public bool IsSupported(IScaffolderFactoryConfigEvaluationContext factoryEvaluationContext)
{
return true;
}
public IScaffolderFactoryConfigEvaluationContext SetupConfigEvaluationContext(CodeGenerationContext context)
{
return null;
}
}
推荐阅读
- firebase - 如何使用来自 Firebase 存储的图片设置图像视图
- c# - 在 C# 中为依赖解析器创建延迟缓存值?
- windows - 如何在子目录中使用 for 循环运行应用程序
- python - 执行函数,按下按钮后关闭窗口并继续下一个循环
- javascript - 如何将导弹枪管限制在最小和最大角度之间?
- sql - 将单个 sql 列拆分为五个
- python - 无法使用python从mysql数据库中检索数据
- sql-server - 无法从 .Net MVC WebApp 访问数据库
- python - Python脚本无法找到找到下载文件夹并打开文件
- python - 根据键对 JSON 数据进行排序