在ASP.Net MVC Core中创建新控制器时,如何防止MVC Core添加一些不需要的程序包?

时间:2018-08-21 07:25:20

标签: c# .net asp.net-mvc asp.net-core scaffolding

我正在研究一个新的ASP.Net MVC Core 2.1.2项目,目标是.Net 4.7.2(不是.Net Core)。 右键单击Controllers文件夹“添加”,“ Controller”添加新Controller时,按预期,成功创建了新控制器,几乎为空:

public class AdminController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

但是我的项目中还默默地添加了一些依赖项:

    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.0" />

我不在乎最后一个,但是我不知道为什么还要添加EF Core,因此我想避免使用它,尤其是因为项目中引用的后端程序集已经在使用Entity Framework,但版本为6.x(非Core)。

为什么会这样表现,并且可以避免?谢谢

仅供参考,当然,我知道我可以简单地将新控制器添加为“新类”并从Controller继承,而无需使用“添加控制器”之类的东西,以避免出现此问题,但我想了解这里会发生什么。 / p>

3 个答案:

答案 0 :(得分:1)

在创建类似的项目设置(面向.net 4. *的.Net Core应用程序)时,我也记得同样的问题。

我相信这与通过提到的上下文菜单添加控制器时获得的支架有关。 为避免接收到这些依赖关系,您可以做的是将控制器创建为常规c#类并自己添加样板代码(=从控制器基类继承并添加所需的using语句。)

我不知道在没有这些依赖的情况下使脚手架工作的任何其他可能性。

答案 1 :(得分:1)

  

OP:仅供参考,我当然可以将新控制器添加为   “新类”并从Controller继承,无需使用“添加”   控制器”的东西,以避免出现此问题,但我想   了解这里发生了什么。

为什么要在项目内部绘制这些依赖项

那些依赖关系由控制器脚手架的基本脚手架类添加。

依赖关系在名为MvcCoreScaffoldingConfig.json的配置文件中定义,该文件位于Visual Studio安装文件夹下的Common7\IDE\Extensions\Microsoft\Web Tools\Scaffolding文件夹中。对我来说,我找到了以下文件夹:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\Web Tools\Scaffolding\

我可以阻止添加这些依赖吗?

您可以更改或删除配置文件中定义的依赖项。例如,仅出于测试目的,我从"NetStandard20Packages"数组中删除了以下依赖项,并且关闭并重新打开VS 之后,我添加了Controller,但没有添加这些依赖项:

  • “ PackageId”:“ Microsoft.EntityFrameworkCore.Design”
  • “ PackageId”:“ Microsoft.EntityFrameworkCore.SqlServer”
  • “ PackageId”:“ Microsoft.EntityFrameworkCore.Tools”

如果您删除了这些依赖关系,以下脚手架模板将停止工作,因为它们与EntityFrameworkCore具有依赖关系:

  • 使用实体框架的具有视图的MVC控制器
  • 使用实体框架的具有操作的API控制器

在使用.NET Framework和Entity Framework 6的ASP.NET Core项目中,上面的控制器脚手架没有用,因此您不必担心删除这些依赖项。删除这些依赖关系,不会对视图脚手架产生任何影响。

答案 2 :(得分:0)

添加控制器时,Visual Studio将检查您的项目依赖项。如您所说,您创建了一个ASP.Net MVC Core 2.1.2项目,因此VS将检查该版本的依赖项并将其添加到项目中。

如果要阻止VS进行检查,则可以添加一个类并使其从控制器扩展。