4

【笨問題】在 .NET 類別程式庫專案引用 ASP.NET Core API

 2 years ago
source link: https://blog.darkthread.net/blog/add-aspnetcore-ref-in-classlib/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
【笨問題】在 .NET 類別程式庫專案引用 ASP.NET Core API-黑暗執行緒

我打算將之前研究用 Minimal API 寫桌面小工具的設計包成元件,把自動尋找可用 HTTP Port 跟啟動時帶出預設瀏覽器網頁關閉自動結束等機制包成擴充函式加入網站,未來 Program.cs 加一行 app.RunAsDesktopTool(); 即可取代原本查詢 URL、 啟動瀏覽器、處理 Server Sent Event、心跳監控自動結束的一百多行程式碼,要寫單檔式網頁介面小工具就簡單多了。

新建好 .NET 6 Class Library 專案,搬入相關程式碼,我卻遇到一個笨問題 - 不知要怎麼在類別程式庫專案引用 Microsoft.AspNetCore.* 相關 API。

.NET Core 3 起改變做法,原本要透過 NuGet 下載的 ASP.NET Core 等基本程式庫,被包進 Project SDK,例如:一般 Console 專案用 Microsoft.NET.Sdk、網站專案用 Microsoft.NET.Sdk.Web、Worker Service 專案用 Microsoft.NET.Sdk.Worker... 等等。可省去參照一堆 NuGet 套件的麻煩,而專案需選擇一種 Project SDK,宣告在 csproj 第一行 Project 元素的 Sdk Attribute:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>

Class Library 專案使用 Microsoft.NET.Sdk,但會用到 ASP.NET Core 的 WebApplication 等型別,我用傳統思維,由 F12 查到 WebApplication 隸屬 Microsoft.AspNetCore.dll:

想必就是要參照 Microsoft.AspNetCore,於是下了 dotnet add package Microsoft.AspNetCore 加入參照,NuGet 套件順利安裝,但編譯還是不過,仔細看才發現不對勁,怎麼是 2.2 版?

折騰了一陣子,我才理解到,.NET Core 3 起,非網站專案要參照 Microsoft.AspNetCore 不是這樣裝滴。不是 PackageReference,要用 FrameworkReference 加入 Microsoft.AspNetCore.App 參考

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

再學到一則實戰小技巧。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK