首页 > 解决方案 > 如何更新由 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 中使用并建议我另一种方式,非常感谢!

标签: c#asp.net-corevsix

解决方案


这是我找到解决它的方法,作为您工厂的子类,属性将其导出为 .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;
    }
}

推荐阅读