1. 程式人生 > >如何組織一個同時面向 UWP/WPF/.Net Core 控制檯的 C# 專案解決方案

如何組織一個同時面向 UWP/WPF/.Net Core 控制檯的 C# 專案解決方案

希望寫一個小型工具,給自己和需要的人。考慮到程式碼儘可能的複用,我準備採用 .Net Standard 來編寫大多數核心程式碼,並基於 .Net Core 編寫跨平臺控制檯入口,用 WPF 編寫桌面端 UI 入口,用 UWP 作為可上架商店的 UI 入口,然後用 Shared Project 共享 WPF 和 UI 的多數 UI 入口程式碼。

閱讀本文將瞭解到如何在儘可能複用程式碼的情況下組織這樣的 C# 解決方案。

工具型專案,選擇了控制檯

用 WPF 開發桌面 UI,因為其有強大的 .NET Framework 庫在背後支援,外加方便而功能齊全的 XAML 開發環境,在用 C# 進行桌面應用程式開發的時候不失為一種優秀的選擇。但微軟卻並不怎麼重視 WPF,而一直投入較大資源在半死不活的 UWP 上,導致 WPF 現在有非常多的坑是在 UWP 上才解的。然而,微軟卻並沒有好好運營 UWP,以至於其開發者急劇減少,再在上面投入太多精力投入產出比顯得太低。

.NET Framework 是個優秀的框架,可是與 Windows 桌面端綁得太死,以至於在當下多平臺發展得都不錯的情況下失去了大多數的競爭力。但是 .NET Core 解決了這個問題。然而談到 UI 的跨平臺,就是一個巨大的投入和難以見底的坑,以至於基於 .NET Core 且跨平臺的 UI 框架目前依然沒有出現。

畢竟只是工具型專案,並不想去動用大型 UI 框架 Xamarin/Unity,以至於寫一個 .NET Core 控制檯程式成了小型工具型專案的最佳解決方案了。

工具型專案是任務導向的,能完成任務為最終目的。控制檯與配置檔案的配合不僅足以完成任務,還為自動化或其他工具整合提供了方便。這裡提供 UI 只是為了方便此工具使用者的初學使用和理解。

組織一個 C# 解決方案

我們總共涉及到的 Visual Studio 專案型別有這五個:
- 類庫(.NET Standard)
- 共享專案
- 控制檯應用(.NET Core)
- WPF 應用(.NET Framework)
- 空白應用(通用 Windows)

.NET Standard 和共享專案是預設就裝上的,但其他三個卻不是。需要在 Visual Studio 安裝介面中額外勾選:
- 用於安裝通用 Windows 專案,如果你對此不感興趣,忽略即可
這裡寫圖片描述
- 用於安裝 WPF 應用,如果你對此不感興趣,忽略即可
這裡寫圖片描述
- 用於安裝 .NET Core 專案,這是跨平臺的重點,建議安裝
這裡寫圖片描述

在 Visual Studio 中建立一個解決方案的時候依次新增這五種專案。
- 我們的主要邏輯程式碼全在 .NET Standard 專案中。這裡包含了完整的功能實現,可以脫離其他四種實現完整功能。
- .NET Core 控制檯專案僅僅作為入口,引用 .NET Standard 的專案,將使用者輸入的命令轉為具體的函式呼叫。
- 共享專案的程式碼主要是 UI 或 UI 輔助程式碼,例如控制 UI 的邏輯和 ViewModel。
- UWP 和 WPF 專案僅包含 UI(XAML)和必要的不一致的 UI 控制邏輯,通過連結的方式將共享專案中的程式碼引入如何連結?
- 其他的工具庫當然也是需要的,但為了通用,建議優先選擇 .NET Standard 的庫。

這樣,專案在 Visual Studio 中看起來大概是這樣的:
這裡寫圖片描述

相關推薦

如何組織一個同時面向 UWP/WPF/.Net Core 控制檯C# 專案解決方案

希望寫一個小型工具,給自己和需要的人。考慮到程式碼儘可能的複用,我準備採用 .Net Standard 來編寫大多數核心程式碼,並基於 .Net Core 編寫跨平臺控制檯入口,用 WPF 編寫桌面端 UI 入口,用 UWP 作為可上架商店的 UI 入口,然後用

用.Net Core控制檯模擬一個ASP.Net Core的管道模型

在我的上幾篇文章中降到了asp.net core的管道模型,為了更清楚地理解asp.net core的管道,再網上學習了.Net Core控制檯應用程式對其的模擬,以加深映像,同時,供大家學習參考。 首先,新建一控制檯應用程式。注意是.Net Core的控制檯應用程式。

一個檔案搞定Asp.net core 3.1動態頁面轉靜態頁面

最近一個Asp.net core專案需要靜態化頁面,百度查找了一下,沒有發現合適的。原因如下 配置麻煩。 類庫引用了第三方類,修改起來麻煩。 有隻支援MVC,不支援PageModel。 繼承ActionFilterAttribute類,只重寫了OnActionExecutionAsync,看似靜態化了,其實

【轉】依賴註入的威力,.NET Core的魅力:解決MVC視圖中的中文被html編碼的問題

lan .config don nsa nco tor options ring 解決 有園友在博問中提了這樣一個問題 —— .NET Core 中文等非英文文字html編碼輸出問題,到我們的 ASP.NET Core 項目中一看,也是同樣的問題。 比如下面的Razor視圖

.NET Core中NETSDK1061錯誤解決(轉載)

開始 project publish 發布 卸載 runtime dep target void NETSDK1061錯誤解決 在vs生成和運行都正常,發布的時候報錯 .netcore控制臺項目引用另一個類庫 錯誤信息 NETSDK1061: 項目是使用

工廠參觀記:.NET Core 中 HttpClientFactory 如何解決 HttpClient 臭名昭著的問題

在 .NET Framework 與 .NET Core 中 HttpClient 有個臭名昭著的問題,HttpClient 實現了 IDispose 介面,但當你 Dispose 它時,它不會立即關閉所使用的 tcp 連線,而是將 tcp 連線置為 TIME_WAIT 狀態,240秒(4分鐘)後才真正關閉連

伺服器win2008server R2 x64 部署.net core到IIS 並解決ASP .NET Core HTTP Error 502.5 – Process Failure 的問題等

伺服器win2008server R2 x64 部署.net core到IIS 並解決ASP .NET Core HTTP Error 502.5 – Process Failure 的問題 1、釋出網站 ;2、安裝 vc_redist.x64  (Visual C++

使用vs code 建立.net core控制檯應用程式

安裝擴充套件 我們先安裝一個 C# extensions ps:C#語言也是要安裝的。 擴充套件可以通過快捷鍵 Ctrl + Shift + X 開啟 開啟我們的擴充套件安裝完上面兩個東西后,我們就開始找地方建立專案,在vs code 中,有個控制檯,我們可以通過它

Net Core通用主機專案報錯 程式不包含適合於入口點的靜態Main

Net Core通用主機的介紹: https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.1   參考官網教程編寫程式碼,編譯報錯:錯誤  &

Asp.net core實戰5: 專案檔案結構分析

1.專案檔案包括以下幾個部分:   根目錄是一個解決方案 Dependencies是依賴項檔案 Properties儲存 launchSetting.json,是涉及到如何編譯、執行專案的相關配置檔案 wwwroot是ASp.net core專案唯一可以被直接訪問的專案

.net core 控制檯程式使用依賴注入(Autofac)

1、Autofac IOC 容器 ,便於在其他類獲取注入的物件 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Autofac; using Autofa

Asp.Net Core 輕鬆學-專案目錄和檔案作用介紹

前言     上一章介紹了 Asp.Net Core 的前世今生,並建立了一個控制檯專案編譯並執行成功,本章的內容介紹 .NETCore 的各種常用命令、Asp.Net Core MVC 專案檔案目錄等資訊,通過對命令的學習和操作,對專案結構的認識,進一步理解 Asp.Net Core 的執行機制和專案框架

ASP.NET Core 實戰:將 .NET Core 2.0 專案升級到 .NET Core 2.1

 一、前言    最近一兩個星期,加班,然後回去後弄自己的部落格,把自己的電腦從 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本計劃的學習 Vue 中生命週期的相關知識目前也沒有任何的進展,嗯,罪過罪過。看了眼時間,11月也快要結束了,準備補上一

VisualStudioCode建立的asp.net core控制檯程式部署到linux

1、asp.net core控制檯程式 static void Main(string[] args) { int times=10; while(times>=0) { Co

如何在.NET Core控制檯程式中使用依賴注入

背景介紹 依賴注入(Dependency Injection), 是面向物件程式設計中的一種設計原則,可以用來減低程式碼之間的耦合度。在.NET Core MVC中 我們可以在Startup.cs檔案的ConfigureService方法中使用服務容器IServiceCollection註冊介面及其實現類的對

在.net core web api專案中安裝swagger展示api介面(相當於生成api文件)

1,  建立或開啟專案後,在“程式包管理器控制檯”中執行以下命令新增包引用: Install-Package Swashbuckle.AspNetCore   2,在專案中開啟Startup.cs檔案,找到 Configure 方法,在其中新增如下程式碼:  app.Us

伺服器win2008server R2 x64 部署.net core到IIS 並解決ASP .NET Core HTTP Error 502.5 – Process Failure 的問題

伺服器win2008server R2 x64 部署.net core到IIS 並解決ASP .NET Core HTTP Error 502.5 – Process Failure 的問題 1、釋出網站 ;2、安裝 vc_redist.x64  (Visual C++ Redistributable

NET Core類庫專案中如何讀取appsettings json中的配置

                這是一位朋友問我的問題,寫篇隨筆回答一下。有2種方法,一種叫醜陋的方法 —— IConf

ASP.NET Core + Vue 小專案:構造自己的線上 Markdown 筆記本應用

ASP.NET Core + Vue 小專案:構造自己的線上 Markdown 筆記本應用 目錄 概要 知識點 完整示例圖 程式碼與資原始檔 流程步驟   概要   基於 MVP

CentOS7下用.NET CoreC#程式

2017 微軟一個比較大的動作就是.Net core2.0了,微軟出的這個框架野心很大:它可以讓使用者在幾乎所有的PC終端用C#編寫自己的應用程式。在win/Linux/mac三大主流作業系統通吃之後,.Net core居然也支援Docker! 本文試著在C