我正在研究一个新的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>
答案 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
,但没有添加这些依赖项:
如果您删除了这些依赖关系,以下脚手架模板将停止工作,因为它们与EntityFrameworkCore具有依赖关系:
在使用.NET Framework和Entity Framework 6的ASP.NET Core项目中,上面的控制器脚手架没有用,因此您不必担心删除这些依赖项。删除这些依赖关系,不会对视图脚手架产生任何影响。
答案 2 :(得分:0)
添加控制器时,Visual Studio将检查您的项目依赖项。如您所说,您创建了一个ASP.Net MVC Core 2.1.2项目,因此VS将检查该版本的依赖项并将其添加到项目中。
如果要阻止VS进行检查,则可以添加一个类并使其从控制器扩展。