簡體   English   中英

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

[英]How to prevent MVC Core to add some undesired packages while creating a new controller in ASP.Net MVC Core?

我正在開發一個新的 ASP.Net MVC Core 2.1.2 項目,目標是 .Net 4.7.2(所以不是 .Net Core)。 當我通過右鍵單擊 Controllers 文件夾“添加”、“控制器”添加新控制器時,我的新控制器成功創建幾乎為空,正如預期的那樣:

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(不是核心)。

為什么它的行為是這樣的,它可以避免嗎? 謝謝

僅供參考,我當然知道我可以簡單地將我的新控制器添加為“新類”並從控制器繼承,而不使用“添加控制器”的東西,以避免這個問題,但我想了解這里發生了什么。

我記得在創建類似的項目設置(面向 .net 4.* 的 .Net Core 應用程序)時也有同樣的問題。

我相信這與通過您提到的上下文菜單添加控制器時獲得的腳手架有關。 為了避免接收這些依賴項,您可以做的是將控制器創建為常規 c# 類並自己添加樣板代碼(= 從控制器基類繼承並添加所需的 using 語句。)

我不知道讓腳手架在沒有這些依賴的情況下工作的任何其他可能性。

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 項目中,上面的控制器腳手架沒有用,因此您無需擔心刪除這些依賴項。 刪除這些依賴項不會對視圖腳手架產生任何影響。

添加控制器時,visual studio 將檢查您的項目依賴項。 正如您所說,您創建了一個 ASP.Net MVC Core 2.1.2 項目,因此 VS 將檢查該版本的依賴項並將它們添加到項目中。

如果您想阻止 VS 進行檢查,那么您可以添加一個類並使其從控制器擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM