## 打包工具選型 在 ASP.NET MVC 時代,我們常使用 `BundleCollection` 設置需要打包壓縮的 js 和 css 文件,運行時框架會自動處理打包壓縮過程並將最終結果傳入響應。 ASP.NET Core 開始,不再提供內置的打包壓縮組件,官方推薦 [WebOptimizer ...
1 WPF 項目使用 Grpc.Tools
1.1 方法一
把 proto 文件和 Grpc.Tools 單獨建一個類庫項目,WPF 項目引用這個類庫項目。
解決 Grpc.Tools 自動生成的 CSharp 類無法被 WPF 項目識別引用的問題,使 WPF 項目能夠成功通過編譯。
參考鏈接:
1.2 方法二
csproj 屬性中添加:<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<PlatformTarget>x86</PlatformTarget>
<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>
</PropertyGroup>
網友情況分析如下:
- 預設行為:
- WPF 會創建一個臨時項目,臨時項目不執行 BeforeCompile 事件
- Grpc.Tools 掛到了 BeforeCompile 事件上去生成代碼
- 解決辦法:
- 將 Grpc.Tools 掛到 WPF 臨時項目程式集 CompileTemporaryAssembly 會執行的 CoreCompile 上,CoreCompile 依賴中添加 Protobuf_Compile 則編譯時會執行 Protobuf_Compile 的事件 protoc 命令行來生成 CSharp 代碼
參考鏈接:
2 使用公共項目定義 proto 的公共消息
好處:
- 為保障 Google.Protobuf Nuget依賴包版本一致性,並只生成一次公共 proto 類文件,避免重覆定義的衝突,採用 Common 項目引用方式引用 Google.Protobuf 和 import 的公共 proto
- 使用公共項目管理 proto 定義和自動生成的鍥約類,可以在不同項目之間有效傳播介面協議
- 便於其他項目在有特異的消息類型、鍥約、rpc 介面定義時,能夠新的 proto 文件中直接引用 common 的 proto 文件
應用此種架構官方示例 Liber
參考鏈接: