C# 如何在ASP.NET Core中跨项目共享区域?

C# 如何在ASP.NET Core中跨项目共享区域?,c#,asp.net,asp.net-mvc,asp.net-core,C#,Asp.net,Asp.net Mvc,Asp.net Core,我需要在两个或多个项目中共享一些控制器和视图,因为我需要在后端使用相同的逻辑,但我不想重复代码 在Asp Net标准中,我可以创建一个区域的包(这不是很好的解决方案,但它很有效) 在Asp Net核心Web应用程序中,我无法创建包。我想找到一个好的实践解决方案。七年前,当我们不得不解决这个问题时,正是svn:externals功能完成了这一任务,并且一直完美地工作到今天。我知道类似的功能在git中被称为子模块我会利用它作为ASP MVC核心中的功能来组织,这将节省很多时间,我建议分两步进行 首

我需要在两个或多个项目中共享一些控制器和视图,因为我需要在后端使用相同的逻辑,但我不想重复代码

在Asp Net标准中,我可以创建一个区域的包(这不是很好的解决方案,但它很有效)


在Asp Net核心Web应用程序中,我无法创建包。我想找到一个好的实践解决方案。

七年前,当我们不得不解决这个问题时,正是svn:externals功能完成了这一任务,并且一直完美地工作到今天。我知道类似的功能在
git
中被称为
子模块

我会利用它作为ASP MVC核心中的
功能
来组织,这将节省很多时间,我建议分两步进行

  • 首先,组织/将其放置在一个名为
    功能
    拼接的区域。按照文章中的说明将其连接起来,并进行详细解释

    //您告诉ASP您还有其他功能区域需要查看
    公共IEnumerable ExpandViewLocations(ViewLocationExpanderContext上下文,
    IEnumerable视图位置)
    {
    //为简洁起见,已删除错误检查
    变量控制器动作描述符=
    context.ActionContext.ActionDescriptor作为ControllerActionDescriptor;
    字符串featureName=controllerActionDescriptor.Properties[“feature”]作为字符串;
    foreach(视图位置中的变量位置)
    {
    收益返回位置。替换(“{3}”,featureName);
    }
    }

  • 其次,功能嵌入到
    共享项目
    可移植库
    。我已经附上了网站的链接 R.Williams和MSDN如何做到这一点

  • 综上所述,既然你已经把它放在一个公共区域里了,那就把它看作是一个特性,并把它嵌入其中。威廉姆斯的一篇好文章


    你的建议奏效了!对于视图文件只有一件事,我做出了一个丑陋的小妥协。我不想编译视图我编写了一个x-copy脚本,从共享项目(我将使用共享项目)/库中复制主项目中的所有视图。@Evillipper很高兴它能工作,请随意编辑我的答案:)这似乎是一个很好的解决方案,但我更喜欢使用共享库。