2025年12月5日 星期五

[研究]Visual Studio Installer 2022 不再提供了

[研究]Visual Studio Installer 2022 不再提供了

2025-12-05

Visual Studio 2022 v17.14 下載網址

https://learn.microsoft.com/zh-tw/visualstudio/releases/2022/release-notes?tabs=allfeatures#17.14.21


點過去網址變成


Visual Studio Installer 2022 不再提供了。
MSDN是可以下載到,2025/12/04 安裝後也是 Visual Studio 2022 Enterprise。

(完)

[研究]Visual Studio Build Tools 2022 與 Visual Studio 2022 Enterprise 工作負載比較

[研究]Visual Studio Build Tools 2022 與 Visual Studio 2022 Enterprise 工作負載比較

2025-12-05

[研究]Jenkins + fortify 要用 MSBuild 推薦如何安裝 ?
https://shaurong.blogspot.com/2025/12/jenkins-fortify-msbuild.html

**********

因為 Visual Studio Build Tools 2026 好像尚未出,故以 Visual Studio Build Tools 2022 來比較。

網址:https://visualstudio.microsoft.com/zh-hant/downloads/?q=build+tools

直接下載網址:https://aka.ms/vs/17/release/vs_BuildTools.exe


Visual Studio 2022 v17.14 下載網址

https://learn.microsoft.com/zh-tw/visualstudio/releases/2022/release-notes?tabs=allfeatures#17.14.21


********************************************************************************

Visual Studio Build Tools 2022 工作負載


Visual Studio 2022 Enterprise 工作負載比較


********************************************************************************

Visual Studio Build Tools 2022 工作負載【網頁程式開發建置工具】




Visual Studio 2022 Enterprise 工作負載【ASP.NET與網頁程式開發】



開發工具和建置工具,外觀很像,安裝的內容選項不同。

(完)

[研究]Jenkins + fortify 要用 MSBuild 推薦如何安裝 ?

[研究]Jenkins + fortify 要用 MSBuild 推薦如何安裝 ?

2025-12-05

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

1️⃣ MSBuild 的取得方式

方式 適用情境 優缺點
Visual Studio(完整 IDE) 若本地開發或需要 GUI 安裝完整,佔用大,更新麻煩
Visual Studio Build Tools(建議) Jenkins Server、CI/CD 專用 安裝輕量、只包含 MSBuild、必要 SDK,無 GUI
.NET SDK(例如 2022 / 2023) 針對 .NET Core / .NET 5/6/7 專案 適合 SDK 專案,但舊版 WebForm/Framework 專案可能不支援

⚡ 重點:Jenkins + Fortify 針對 WebForms / .NET Framework 專案,建議使用 Visual Studio Build Tools

2️⃣ 安裝 Visual Studio Build Tools

1.下載:

2.選擇工作負載(Workload):

Workload 說明 Fortify/MSBuild 需求
.NET desktop build tools 包含 MSBuild、.NET Framework SDK、C# / VB 編譯器 ✅ 必須
ASP.NET and web development 如果有 WebForms 專案 ✅ 建議選
NuGet package manager 支援 restore ✅ 選
C++ build tools 可選 ❌ Fortify 不需要

3.安裝時注意:

  • 安裝路徑盡量不要有空格,方便 Jenkins 用 %ProgramFiles(x86)% 或短路徑。
  • 選擇「下載缺少的檔案並安裝」避免網路問題。

3️⃣ 環境變數設定

安裝完 Build Tools 之後:

MSBuild 路徑通常位於:

C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe

建議把這個路徑加入 Jenkins 執行環境:

系統環境變數 PATH

或 Jenkins Global Tool Configuration → MSBuild

4️⃣ Jenkins + MSBuild 配置建議

方法 A:Global Tool

  1. Jenkins → Manage Jenkins → Global Tool Configuration
  2. 新增 MSBuild 工具
  3. 指定安裝路徑或自動安裝(自動安裝 VS Build Tools 較少用)
  4. Job 裡選擇這個 MSBuild

方法 B:直接使用完整路徑

"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe" "%WORKSPACE%\WebApplication1\WebApplication1.sln" /t:Build /p:Configuration=Release

  • 適合 Fortify SCA batch step
  • 不需依賴 Jenkins Tool 安裝器

5️⃣ NuGet restore

Fortify SCA 需要所有依賴可解析,所以建議:

D:\BuildTool\nuget.exe restore "%WORKSPACE%\WebApplication1\WebApplication1.sln"

  • Build Tools 本身不自帶 nuget.exe
  • 可下載 NuGet CLI

6️⃣ Fortify SCA 使用建議

  • Fortify 會呼叫 MSBuild 來收集程式碼
  • MSBuild 必須能完整 build 專案,否則 scan 會失敗
  • 針對 .NET Framework 4.7.2 / WebForms:
    • 安裝 Build Tools + .NET Framework Developer Pack
    • 避免安裝完整 VS IDE

✅ 總結建議

  1. 使用 Visual Studio Build Tools(輕量、官方支援 CI)
  2. 選擇 .NET desktop build tools + ASP.NET and web development workload
  3. 安裝 NuGet CLI
  4. Jenkins Job 直接指定 MSBuild 路徑或使用 Jenkins Global Tool
  5. Fortify 前先 restore NuGet packages
  6. 測試 msbuild /t:build 是否可以在 Jenkins Agent 上完整 build
(完)

相關

2025年12月4日 星期四

[研究]ASP.NET + WebForm + SQL Server 開發,安裝勾選建議?

[研究]ASP.NET + WebForm + SQL Server 開發,安裝勾選建議?

2025-12-04

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

ASP.NET + WebForm + SQL Server 開發,安裝勾選建議?

  • 角色服務
  • 網頁伺服器
  • 一般 HTTP功能
  • HTTP 錯誤
  • 預設文件
  • 靜態内容
  • 瀏覽目錄
  • HTTP 重新導向
  • WebDAV 發行
  • 安全性
  • 要求篩選
  • IIS用户端憑證對應驗證
  • IP 及網域限制
  • URL 授權
  • Windows 驗證
  • 用戶端憑證對應驗證
  • 基本驗證
  • 集中式SSL憑證支援
  • 摘要式驗證
  • 状況及診斷
  • HTTP 記錄
  • ODBC 記錄
  • 自訂記錄
  • 要求監視器
  • 記錄工具
  • 追蹤
  • 效能
  • 靜態內容壓縮
  • 動態內容壓縮
  • 應用程式開發
  • .NET 摘充性 3.5
  • .NET 擴充性 4.7
  • ASP.NET 3.5
  • ASP.NET 4.7
  • CGI
  • ISAPI 篩選器
  • ISAPI 擴充程式
  • WebSocket 通訊協定
  • 伺服器端包含
  • 應用程式初始化
  • FTP 伺服器
  • FTP服務
  • FTP 擴充性
  • 管理工具
  • IIS 管理主控台
  • IIS6管理相容性
  • IIS 6 Metabase 相容性
  • IIS 6 WMI 相容性
  • IIS6指令碼工具
  • IIS6管理主控台
  • IIS管理指令碼及工具
  • 管理服務

********************************************************************************
ChatGPT

✅ 建議必勾(WebForm ASP.NET 正常運作所需)

① 網頁伺服器 → 一般 HTTP 功能

功能 是否需要 說明
HTTP 錯誤 ✔ 必要 ASP.NET 會使用自訂錯誤頁
預設文件 ✔ 必要 預設讀取 default.aspx
靜態內容 ✔ 必要 載入 JS / CSS / 圖檔
瀏覽目錄 ❌ 不建議 通常不應讓使用者看到目錄
HTTP 重新導向 ✔ 常用 301/302 轉址
WebDAV 發佈 ❌ 禁用 高風險,不需要 WebDAV

② 安全性(需依網站需求,但常用如下)

功能 是否需要 說明
要求篩選 (Request Filtering) ✔ 必要 防止惡意請求(預設即建議啟用)
基本驗證 ❌ 除非需求 網站使用 Forms Auth 時不需要
Windows 驗證 ❌ 依需求 若為內部 AD 驗證才勾
IP 及網域限制 ✔ 建議 若有管理後台,可限制來源 IP
URL 授權 ✔ 若使用 可限制 URL ACL,但 WebForms 通常使用 Web.config 授權

不勾選(安全性高風險):IIS 用戶端憑證、集中式 SSL、摘要式驗證、用戶端憑證對應驗證

③ 狀況及診斷(視 Debug 需求)

功能 是否需要 說明
HTTP 記錄 ✔ 必要 基本 IIS log
要求監視器 ✔ 建議 分析長延遲請求
追蹤(Tracing) ❌ 生產環境不要 會暴露太多資訊
自訂記錄 / ODBC 記錄 ❌ 不建議 通常無用且拖慢性能

④ 效能

功能 是否需要 說明
靜態內容壓縮 ✔ 建議 減少流量,前端效能好
動態內容壓縮 ✔ 建議 支援 ASPX 壓縮,節省頻寬

⑤ 應用程式開發(WebForms 必要)

功能 是否需要 說明
.NET 擴充性 4.7 ✔ 必要 WebForms .NET Framework 執行必備
ASP.NET 4.7 ✔ 必要 WebForms 正式執行環境
ISAPI 擴充程式 ✔ 必要 ASP.NET 需使用
ISAPI 篩選器 ✔ 必要 ASP.NET Pipeline
CGI ❌ 不需要 若無 Perl/PHP 不要開
WebSocket 通訊協定 ❌ 依需求 WebForms 大多不需要
伺服器端包含 ❌ 不需要 不使用 SSI 時不用開
應用程式初始化 ✔ 建議 可讓 AppPool 啟動時 Preload

注意:若你專案不是 .NET 3.5,就不要開啟 .NET 3.5 / ASP.NET 3.5 以降低攻擊面。

⑥ 管理工具(管理必備)

功能 是否需要 說明
IIS 管理主控台 ✔ 必要 顯示 IIS GUI
IIS 管理指令碼及工具 ✔ 建議 方便使用 appcmd
管理服務 ❌ 依需求 若需遠端 IIS 管理才勾
IIS6 管理相容性 (全套) ❌ 除非舊程式需要 新架構不需 IIS6 metabase

❌ 明確不建議勾選(提高風險且無必要)

項目 原因
瀏覽目錄 容易洩漏檔案
WebDAV 發行 高風險,容易被攻擊
基本驗證 / 摘要式驗證 非必要,安全性較低
用戶端憑證對應驗證 不需要
追蹤(Tracing) 生產環境不安全
CGI 不需要
FTP服務 / FTP擴充性 不建議在同台 IIS 使用 FTP
IIS6 相關 不用 Metabase 就不需

📌 最常用標準 WebForms 伺服器配置(推薦直接照這表啟用)

✔ 你應該勾的(推薦列表)

  • HTTP 錯誤
  • 預設文件
  • 靜態內容
  • HTTP 重新導向
  • 要求篩選 (request filtering)
  • HTTP 記錄
  • 要求監視器
  • 靜態內容壓縮
  • 動態內容壓縮
  • .NET 擴充性 4.7
  • ASP.NET 4.7
  • ISAPI 擴充程式
  • ISAPI 篩選器
  • 應用程式初始化
  • IIS 管理主控台
  • IIS 管理指令碼及工具

❌ 不要勾的(能關就關)

  • WebDAV
  • CGI
  • FTP
  • Directory Browsing
  • Tracing(追蹤)
  • 基本驗證、摘要式、客戶端憑證
  • 全套 IIS6 相容性(除非舊程式需要)
(完)

相關

[研究]Visual Studio 的「 Incredibuild - 建置加速」用途?

[研究]Visual Studio 的「 Incredibuild - 建置加速」用途?

2025-12-04

下圖,Visual Studio 2019的 Incredibuild - 建置加速


下圖,Visual Studio 2022 Installer

下圖,Visual Studio 2026 Installer

ChatGPT

🔍 Visual Studio 2019 的「Incredibuild - 建置加速」是做什麼用的?

簡單一句話:Incredibuild 是一套分散式平行編譯系統,用來大幅加速 C/C++、C#、Unity、Android、遊戲引擎等的建置(Build) 速度。

它不是 Microsoft 開發的,而是 Visual Studio 2019 內建的 外掛 (Extension),但必須另外安裝 Incredibuild(試用版可用)。

⚡ 主要用途

1. 分散式編譯 (Distributed Build)

如果公司內部有多台電腦(甚至虛擬機),Incredibuild 可利用其他電腦的 CPU 來幫忙建置專案。例如:
  • 本機 8 核心
  • 其他電腦提供 40 核心
=> 建置時你瞬間擁有 48 核心

適用範圍:
  • C/C++(最有效果,VS/Clang 皆可)
  • C#/MSBuild(改善不如 C++ 大,但仍能加速)
  • 嵌入式/Driver 程式
  • 3D/遊戲引擎(如 Unreal Engine)
  • Android NDK
  • Unity
2. 加速 Visual Studio Build 與 Rebuild

尤其在大型 C++ Solution 中,重建(Rebuild)可能要 10–60 分鐘;啟用後可能縮到 2–10 分鐘。

**因為:**大部分建置工作可分散出去跑。

3. 最大加值:PCH、Clang、Link 也能加速

含:
  • Precompiled headers(會拆分併行)
  • Linking(LINK 也能部分併行)
  • Resource compilation
  • Code Analysis
🛠 Visual Studio 中 Incredibuild 的功能位置

在 VS 2019 中,你會看到:

Incredibuild
 ├─ Build
 ├─ Rebuild
 ├─ Stop Build
 └─ Management Console

若未安裝 Incredibuild 本體,這些選項會無法使用。

📦 使用是否需要額外安裝?

✔ Visual Studio 附的是「VS Integration」
✘ 但 核心服務(Agent / Coordinator)必須安裝 Incredibuild 主程式 才能運作

三種角色:
角色 用途
Coordinator 控制整個分散式編譯的任務排程(可安裝在一台 Server)
Agent(含 Helper Agent) 提供可用 CPU 核心(建置工作在此執行)
Visual Studio Extension 讓開發者可透過 VS 啟用 Incredibuild

📈 有沒有實際加速效果?

官方實測:
專案類型 未使用 使用後
UE4(大型 C++) 30–60 分鐘 5–15 分鐘
大型 C# + MSBuild 8–12 分鐘 約 2–6 分鐘
Android NDK 20–40 分鐘 5–12 分鐘

👉 如果你是 C++ 或遊戲開發,Incredibuild 的效果是「爆炸性提高」。
👉 若你是 C#/.NET WebForm,提升有限(通常 10%~40%)。

❗ 你需要 Incredibuild 嗎?(直接給你判斷)
如果你是以下情況 → 非常適合

✔ 大量 C/C++
✔ UE4 / CryEngine / Unity
✔ Android NDK
✔ 每天 build 超過 20 分鐘
✔ 團隊多台電腦,想善用 CPU

如果你是以下情況 → 改善有限

⚠ ASP.NET WebForm(C#)
⚠ WinForm / WPF(C#)
⚠ Console / 小規模專案
⚠ Fortify SCA / SonarQube 掃描(跟 Incredibuild 無關)

💡 環境(Jenkins + Fortify + WebForm)適用嗎?

➡ Incredibuild 對 Fortify / Jenkins / WebForm 幾乎沒有幫助
因為 Fortify 的 Sourceanalyzer 並不是 Visual Studio 編譯器,所以無法透過 Incredibuild 加速。

對 ASP.NET WebForm (C#) 的 MSBuild 加速提升也很有限。

📝 總結

問題 答案
Visual Studio 2019 的 Incredibuild 是做什麼? 分散式平行編譯,加速建置
要不要額外安裝? 要,VS 只裝介面,需要 Incredibuild 主程式
加速效果? C++ 明顯,大型 C# 中度,小型專案有限
對 Fortify/Jenkins 有幫助嗎? 幾乎沒有

(完)

[研究]新機用 VS2019 的 VisualStudioSetup.exe 會變成安裝 VS2022 了

[研究]新機用 Visual Studio 2019 的 VisualStudioSetup.exe 會變成安裝 Visual Studio 2022 了

2025-12-04

Visual Studio 2019 產品生命週期和服務
https://learn.microsoft.com/zh-tw/visualstudio/releases/2019/servicing-vs2019
版本 16.11 終止支援 2029 年 4 月

Visual Studio 2019 – Microsoft Lifecycle
https://learn.microsoft.com/zh-tw/lifecycle/products/visual-studio-2019
清單 開始日期 主要支援結束日期 延伸支援結束日期
Visual Studio 2019 2019年4月2日 2024年4月9日 2029年4月10日

(完)


[研究]Symantec EDR 對效能預估影響百分比 ?

[研究]Symantec EDR 對效能預估影響百分比 ?

2025-12-04

EDR(Endpoint Detection & Response)= 端點偵測與回應系統

Symantec EDR 對效能預估影響百分比 ?

ChatGPT

(1) 一般辦公用 Windows PC(文書 / 上網 / Outlook)

資源 平均影響 峰值(短時間)
CPU +1% ~ +5% 可達 10%(檔案大量開啟、更新或病毒碼更新時)
RAM +150 ~ 300 MB 400 MB
磁碟 I/O +3% ~ +8% 10%(寫入行為事件時)

(2) 開發者電腦(大量 I/O、編譯、Git、Docker)

資源 平均影響 峰值
CPU +5% ~ +12% 15%~20%(大量 small file I/O)
RAM +200 ~ 400 MB 500 MB
磁碟 I/O +10% ~ 20% 30%(大量編譯或容器 I/O)

(3) Windows Server(AD / 應用伺服器 / 一般 VM)

伺服器角色 CPU 平均影響 I/O 影響 說明
AD / DC +5% ~ 10% 10%~20% EDR 對大量 LDAP / Sysvol I/O 會有影響
Web Server(IIS) +3% ~ 8% 8%~15% 頻繁寫 log、ASP.NET 即時編譯會被監控
File Server +10% ~ 25% 20%~40% 空前大:大量檔案開啟/寫入/讀取均會被監控
DB Server(SQL Server) < 5%(若有正確排除) < 10% 若未排除 DB 資料夾則會產生重大 I/O 開銷

(4) 虛擬機(VMware / Hyper-V)

類型 預估影響
VM CPU / RAM 本身 +5% ~ +15%(CPU scheduling 放大)
Host 整體 +3% ~ 8%

綜合結論 — “一般平均影響”
若需要一句話:
Symantec EDR 平均會造成 3%~10% 的整體效能影響;在重 I/O 伺服器上可能達 15%~30%。

**********
用途 : 開發 + IIS + SQL Server + ASP.NET
CPU : Core i7-8700 3.2GHz
RAM 容量 : 32 GB
系統磁碟 C:SSD,1TV / D:HDD,1 TB
是否大量 I/O : 是

ChatGPT

具體數字總結(針對你環境,未排除情況)
  • 平均 CPU 增加:+6% ~ +10%
  • 平均 RAM 增加:+250 ~ +600 MB
  • 磁碟 I/O 增加(HDD 為主):+15% ~ +30%(會導致 I/O 等待時間上升)
  • 整體應用響應:下降 8% ~ 18%(平均);峰值 25% ~ 35%(壓力/編譯/大量 DB 寫入時)
註:似乎可以做某些排除或優化,但 EDR 非敝人管理,無法做這種設定。

(完)

2025年12月3日 星期三

[研究]Jenkins 的 "執行 Windows 批次指令" 開始執行前,就花了 7 小時,如何加速 ?

[研究]Jenkins 的 "執行 Windows 批次指令" 開始執行前,就花了 7 小時,如何加速 ?

2025-12-03

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

經過時間 00:07:30.04  <=== 發現 Jenkins 的 "執行 Windows 批次指令" 開始執行前,就花了 7 小時 40 分,如何加速 ?

建置成功。

"D:\Jenkins\workspace\Fortify_WebApplication1\WebApplication1\WebApplication1.sln" (預設目標) (1) ->
"D:\Jenkins\workspace\Fortify_WebApplication1\WebApplication1\WebApplication1\WebApplication1.csproj" (預設目標) (2) ->
(AspNetPreCompile 目標) -> 
  ASPNETCOMPILER : warning CS1685: 預先定義的類型 'System.ObsoleteAttribute' 在全域別名的多個組件中都有定義; 使用 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll' 中的定義 [D:\Jenkins\workspace\Fortify_WebApplication1\WebApplication1\WebApplication1\WebApplication1.csproj]

    1 個警告
    0 個錯誤

經過時間 00:07:30.04
[Fortify_WebApplication1] $ cmd /c call C:\Users\ADMINI~1\AppData\Local\Temp\jenkins4235466723566878775.bat

ChatGPT (敝人摘要)

  • 關閉防毒 or 排除一些目錄 C:\Jenkins\workspace\... 和 Temp 目錄、、、
  • 改用 SSD
  • 增加 CPU、RAM
  • Temp 裡檔案太多或磁碟 I/O 慢,刪除

del /q /f /s  "C:\Users\ADMINI~1\AppData\Local\Temp\*.*"

  • 太多 Jenkins Job同時執行 (敝人當下只有一個 Job)
  • Workspace 在 NAS 或網路磁碟 (敝人不是)
  • 剩餘HDD空間低,建議20GB

********************************************************************************

Jenkins 組態畫面這些參數用途 ? 移除會否更快 ?

Build a Visual Studio project or solution using MSBuild Command Line Arguments ? 
/p:DeployOnBuild=true /p:PublishProfile=FolderProfileDev

ChatGPT

1️⃣ /p:DeployOnBuild=true

用途:

  • DeployOnBuild=true 告訴 MSBuild 在 Build 完成後同時執行部署(Deploy)。
  • 對 Web 專案(ASP.NET WebForm)常用於自動把建置產物拷貝到發佈目錄或 IIS 目錄。

對速度的影響:

  • 會增加建置時間,因為不只是編譯,還會做部署動作(拷貝、設定發佈資料夾等)。
  • 如果只是給 Fortify SCA 掃描程式碼,實際上 不需要做部署,可以移除加快速度。

2️⃣ /p:PublishProfile=FolderProfileDev

  • 用途:
    • 指定 Visual Studio 的 Publish Profile。
    • 例如 FolderProfileDevLocal 通常設定了:
      • 發佈目錄(Output Path)
      • 包含/排除檔案
      • 配置 Web.config 轉換
    • MSBuild 在 Build 後會自動套用該 Profile 進行發佈。
  • 對速度的影響:
    • 同樣會增加時間,因為 MSBuild 會做額外步驟:
      • 複製檔案
      • Web.config 轉換
      • 建立發佈資料夾結構
    • 對 Fortify SCA 不需要部署的情況,這部分可以移除,節省幾分鐘甚至十幾分鐘。

🔹 總結建議

可以移除。

(完)

相關

[研究]sourceanalyzer.exe 的 -Xmx 建議值?

[研究]sourceanalyzer.exe 的 -Xmx 建議值?

2025-12-03

虛擬機

  • CPU*8顆, RAM 24GB 
  • Windows Server 2019
  • SQL Server 2019
  • Gitea Server
  • Jenkins Server
  • Fortify SAST (SCA) 25.4

請問 sourceanalyzer.exe 的 -Xmx 建議值?

********************************************************************************

ChatGPT

1️⃣ Fortify 官方建議

Fortify SCA 官方建議:

  • 小型專案(少於 100k 行程式碼):-Xmx4G ~ 8G
  • 中型專案(100k~500k 行程式碼):-Xmx8G ~ 12G
  • 大型專案(500k 行程式碼以上):-Xmx16G 或更多

參考來源:Fortify SCA Installation and Administration Guide 25.x

https://www.microfocus.com/documentation/fortify-software-security-center/

2️⃣ 調整建議(你的環境)

你的 VM 有 24 GB RAM,還要同時跑 SQL Server / Jenkins / Gitea,建議保留給 OS 和其他服務至少 8~10 GB,所以給 sourceanalyzer.exe 的 -Xmx 不宜設定過高。

建議設定:-Xmx12G ~ 14G

如果專案非常大、分析時間過長,可以逐步增加到 16G,但不要超過 16~18G,否則可能造成系統 swap 或其他服務不穩定。

3️⃣ 設定範例

sourceanalyzer.exe -b MyProject -Xmx12G -clean

sourceanalyzer.exe -b MyProject -Xmx12G MySourceCode

注意:-Xmx 單位是 MB 或 GB,Fortify 25.x 可以直接使用 G。

✅ 小結

專案大小 建議 -Xmx
小型 <100k LoC 4~8G
中型 100k~500k LoC 8~12G
大型 >500k LoC 12~16G


********************************************************************************

檢測總檔案數:7500,程式碼總行數:1200000 的 -Xmx 建議值?

ChatGPT

  • 安全起點:-Xmx14G
  • 最大可行:-Xmx16G
  • 注意保留 RAM 給其他服務 (SQL / Jenkins / Gitea / OS)

(完)

相關

[研究]Jenkins 觸發 Fortify SCA (SAST) 25.4 掃描的組態指令效能改善

[研究]Jenkins 觸發 Fortify SCA (SAST) 25.4 掃描的組態指令效能改善

2025-12-03、2025-12-04、2025-12-05修正

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

ChatGPT

【執行Windows批次指令】原來指令

D:\BuildTool\nuget.exe restore .\WebApplication1\WebApplication1.sln

if "%GIT_COMMIT%" NEQ "%version%" (
   sourceanalyzer.exe -b %JOB_NAME% -clean
   sourceanalyzer.exe -b %JOB_NAME% -exclude "**\*.js" -Dcom.fortify.sca.fileextensions.sql=TSQL msbuild /t:rebuild %WORKSPACE%\WebApplication1\WebApplication1.sln
   sourceanalyzer.exe -b %JOB_NAME% -scan -verbose -Xmx14G -format "fpr" -f "%WORKSPACE%\report.fpr"
   ReportGenerator.bat -template %FORTIFY_TEMPLATE% -format "pdf" -f "%WORKSPACE%\report.pdf" -source  "%WORKSPACE%\report.fpr" 
)

說明

D:\BuildTool\nuget.exe restore .\WebApplication1\WebApplication1.sln  

  • 這會完整從 NuGet 官方源或設定的源下載 全部缺失套件,對大型專案或網路慢時會很耗時。
if "%GIT_COMMIT%" NEQ "%version%"  

  • 意義:只有當 Jenkins 的 GIT_COMMIT 與環境變數 version 不同時才執行掃描。
  • 作用:避免重複掃描相同的 commit,提高效率。
  • 優化建議:如果你確定每次掃描都需要,這行可保留;若每次都掃描,這行可以刪除,簡化流程。

sourceanalyzer.exe -b %JOB_NAME% -clean   

  • 意義:清除 Fortify SCA 先前分析中累積的 build 追蹤檔(build session),確保本次掃描乾淨。
  • 耗時:通常不會太久,但對大型專案可能稍慢。
  • 優化建議:
    • 若你的專案檔案改動不大,可以選擇 增量掃描(Incremental Scan),就不必每次都 -clean。
    • 例如保留 build session,下次只分析改動檔案。


sourceanalyzer.exe -b %JOB_NAME% -exclude "**\*.js" -Dcom.fortify.sca.fileextensions.sql=TSQL msbuild /t:rebuild %WORKSPACE%\PMSWeb\PMSWeb.sln

  • 意義:
    • -b %JOB_NAME%:指定 build ID。
    • -exclude "**\*.js":排除所有 JavaScript 檔案(假設不掃描 JS)。
    • -Dcom.fortify.sca.fileextensions.sql=TSQL:設定 SQL 檔案副檔名為 TSQL。
    • 後面接 msbuild /t:rebuild:進行完整重建(rebuild),同時讓 Fortify 收集程式碼資訊。

Translating SQL

  • 耗時:對大型專案,msbuild /t:rebuild 最耗時間。
  • 優化建議:
    • 改成 增量 build,只編譯修改的檔案:


msbuild  /t:build   

    • 使用 Fortify 增量掃描,只分析改動檔案,避免重複掃描:

sourceanalyzer.exe -b %JOB_NAME% -incremental  

  • 確認不必要的檔案(例如大型第三方套件)是否可 -exclude,減少分析量。
  • 若專案有很多未用到的模組,可考慮 分模組掃描(scan per module)。

sourceanalyzer.exe -b %JOB_NAME% -scan -verbose -Xmx14G -format "fpr" -f "%WORKSPACE%\report.fpr"   

  • 意義:
    • -scan:正式執行 SAST 分析。
    • -verbose:輸出詳細訊息(debug 用)。
    • -Xmx14G:Java 最大記憶體 14GB。
    • -format "fpr":輸出 Fortify FPR 檔案。
    • 耗時:這通常是最耗時步驟。
  • 優化建議:
    • 若不需要 verbose 日誌,可移除 -verbose,減少 I/O 開銷。
    • 調整記憶體:確認 14GB 足夠但不要過大,過大可能反而 GC 負擔。
    • 分模組掃描或使用 增量掃描。
    • 排除不必要檔案或資料夾,例如 node_modules、bin/obj。

ReportGenerator.bat -template %FORTIFY_TEMPLATE% -format "pdf" -f "%WORKSPACE%\report.pdf" -source  "%WORKSPACE%\report.fpr" 

  • 意義:
    • 將 FPR 轉成 PDF 報告。
    • -template:指定報告模板。
  • 耗時:通常比掃描快,但大型專案可能也需要幾分鐘。
  • 優化建議:
    • 若 Jenkins pipeline 只是用於後續分析,可考慮先不產生 PDF,或只產生 HTML。
    • 也可以僅生成 PDF 的 subset(重要模組/高風險項目)。

********************************************************************************

綜合結果

del /q /f /s "C:\Users\ADMINI~1\AppData\Local\Temp\*.*" 2>nul

D:\BuildTool\nuget.exe restore .\WebApplication1\WebApplication1.sln

if "%GIT_COMMIT%" NEQ "%version%" (
    REM 清除舊的 build session (可視需求保留增量掃描)
    sourceanalyzer.exe -b %JOB_NAME% -clean

    REM 建置並收集程式碼,排除指定檔案/目錄
sourceanalyzer.exe -b "%JOB_NAME%" ^
 -exclude "**\*.js" ^
 -exclude "**\packages\**" ^
 -exclude "**\bin\**" ^
 -exclude "**\obj\**" ^
 -exclude "**\Asset\**" ^
 -exclude "**\Content\**" ^
 -exclude "**\Scripts\**" ^
 -exclude "**\doc\**" ^
 -exclude "**\docs\**" ^
 -exclude "**\docx\**" ^
 -exclude "**\node_modules\**" ^
 -exclude "**\dist\**" ^
 -exclude "**\build\**" ^
 -exclude "**\*.pdf" ^
 -exclude "**\*.sql" ^
 -exclude "**\*.zip" ^
 -exclude "**\*.ods" ^
 -exclude "**\*.xlsx" ^
 -exclude "**\*.dll" ^
 -exclude "**\*.pdb" ^
 -exclude "**\App_Data\*.mdb" ^
 -exclude "**\App_Data\*.xlsx" ^
 -Dcom.fortify.sca.fileextensions.sql=TSQL ^
msbuild /t:build "%WORKSPACE%\PMSWeb\PMSWeb.sln"

    REM 執行掃描,使用增量掃描加速
    sourceanalyzer.exe -b %JOB_NAME% -scan -incremental -Xmx14G -format "fpr" -f "%WORKSPACE%\new.fpr"

    REM 產生 PDF 報告
    ReportGenerator.bat -template %FORTIFY_TEMPLATE% -format "pdf" -f "%WORKSPACE%\Assessment_all.pdf" -source "%WORKSPACE%\new.fpr"
)


2>nul 會忽略錯誤(像是檔案被鎖定)。

不會列出路徑,不會卡住。

缺點:del 會在遇到被鎖定檔案時仍顯示錯誤訊息,但不會停止。

這比 for /f dir 快得多,因為不需要列舉全部檔案。

注意,所有換行必須加 ^,最後一行的 msbuild 前面不需 ^

注意,

 -exclude "**\Content\**"

 -exclude "**\Scripts\**"

如果是 WebForm,通常沒問題

但如果靠 script bundling 產生 .js / css,有些重要檔案可能被排除。

********************************************************************************

Jenkins 執行到下面這行前,

del /q /f /s "C:\Users\ADMINI~1\AppData\Local\Temp\*.*" 2>nul

會產生 .bat
C:\Users\Administrator\AppData\Local\Temp\jenkinsXXXXXX.bat


del會刪除這些檔案,導致無法執行
  • Jenkins Job 產生的暫存批次檔 (jenkins-xxxxx.bat)
  • Jenkins 用來包裝 script 的 cmd 檔
  • Jenkins 日誌暫存檔
要刪除,在最後一行刪除。

還有,他不會刪除空的子目錄。
CMD 沒有「刪空資料夾」的遞迴命令。
rd /s 會刪掉裡面的檔案。
rd /q 只能刪單個資料夾,無法遞迴。


(完)

相關

[研究]HTML、CSC表格內外框線

[研究]HTML、CSC表格內外框線

2025-12-03

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

某 <table border="1"> 只會產生 表格外框 的線,但內部 不會有格線,解決方法。

方式 1:使用 border-collapse: collapse 搭配 CSS 邊框

<table style="border-collapse: collapse; border: 1px solid black;">
  <tr>
    <th style="border: 1px solid black;">欄位1</th>
    <th style="border: 1px solid black;">欄位2</th>
  </tr>
  <tr>
    <td style="border: 1px solid black;">資料1</td>
    <td style="border: 1px solid black;">資料2</td>
  </tr>
</table>

方式 2:用全局 CSS 樣式(建議)

<style>
  table {
    border-collapse: collapse; /* 合併邊框 */
    border: 1px solid black;   /* 表格外框 */
  }
  th, td {
    border: 1px solid black;   /* 每個儲存格邊框 */
    padding: 5px;              /* 內距,看起來不擠 */
  }
</style>

<table>
  <tr>
    <th>欄位1</th>
    <th>欄位2</th>
  </tr>
  <tr>
    <td>資料1</td>
    <td>資料2</td>
  </tr>
</table>

方式 3:用 id(只影響那一個 table)

HTML

<style>
  #MyTable {
    border-collapse: collapse;   
    border: 1px solid black;
  }
  #MyTable th,
  #MyTable td {
    border: 1px solid black;
    padding: 5px;
  }
</style> <table id="MyTable"> <tr> <th>欄位1</th> <th>欄位2</th> </tr> <tr> <td>資料1</td> <td>資料2</td> </tr> </table>

方式 4:用 class(可套用到多個表格)

<style>
  .bordered-table {
    border-collapse: collapse;
    border: 1px solid black;
  }
  .bordered-table th,
  .bordered-table td {
    border: 1px solid black;
    padding: 5px;
  }
</style>

<table class="bordered-table">   
  <tr>
    <th>欄位1</th>
    <th>欄位2</th>
  </tr>
  <tr>
    <td>資料1</td>
    <td>資料2</td>
  </tr>
</table>

(完)

相關

2025年12月2日 星期二

[研究]ASP.NET WebForm 用 IIS GUI 判斷使用的 .NET Framework 版本? 32 bits 或 64位元?

[研究]ASP.NET WebForm 用 IIS GUI 判斷使用的 .NET Framework 版本? 32 bits 或 64位元?

2025-12-02

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

ChatGPT

1️⃣ 判斷應用程式使用的 .NET Framework 版本

  1. 打開 IIS 管理員。
  2. 左側選擇你的 網站 或 應用程式集區 (Application Pool)。
  3. 若要看整個 AppPool 使用

    .NET Framework 版本:

    • 選擇 應用程式集區 → 找到你的 AppPool → 右鍵 → 進階設定 (Advanced Settings...)。
    • 找到 .NET CLR 版本 (.NET CLR Version) 欄位:
      • v4.0 → 代表使用 .NET Framework 4.x(包括 4.5, 4.6, 4.7, 4.8)。
      • v2.0 → 代表使用 .NET Framework 2.0/3.0/3.5。

注意:IIS GUI 只能顯示 CLR 版本,而不能精確顯示小版本(如 4.7.2 或 4.8),要看精確版本仍需程式判斷。


2️⃣ 判斷應用程式集區是 32-bit 或 64-bit

  1. 同樣在 應用程式集區 → 選擇你的 AppPool → 右鍵 → 進階設定。
  2. 找到 啟用 32 位元應用程式 (Enable 32-Bit Applications):

    • True → 應用程式在 32-bit 模式 執行,即使 OS 是 64-bit。
    • False → 應用程式跟隨 OS 執行:
      • OS 64-bit → 應用程式 64-bit。
      • OS 32-bit → 應用程式 32-bit。


3️⃣ 判斷 OS 位元數(IIS Server 環境)

在 IIS GUI 沒有直接顯示 OS 位元數,但可以透過:

伺服器管理員 (Server Manager) → 系統資訊 查看作業系統版本和位元數。

或者在 命令提示字元 輸入:

systeminfo | findstr /B /C:"OS 名稱" /C:"系統類型"   

會顯示:

系統類型: x64-based PC → 64-bit OS

系統類型: x86-based PC → 32-bit OS

🔹 小結

判斷項目 IIS GUI 路徑 說明
.NET Framework 版本 AppPool → Advanced Settings → .NET CLR Version v2.0 / v4.0
應用程式位元數 AppPool → Advanced Settings → Enable 32-Bit Applications True = 32-bit, False = 隨 OS
OS 位元數 系統資訊或 systeminfo 指令 x64 / x86


(完)

相關

[研究]ASP.NET Webform 取得 Request Id 或 Response Id 儲存到的 Log Table ?

[研究]ASP.NET Webform 取得 Request Id 或 Response Id 儲存到的 Log Table ?

2025-12-02

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

********************************************************************************

✅ 一、WebForm 沒有內建 RequestId,需要自行產生

ASP.NET Core 才有內建 HttpContext.TraceIdentifier。

ASP.NET WebForm (.NET Framework) 沒有預設 RequestId,所以我們要 自行產生 GUID 或類似唯一值,並在整個 Request 生命周期保持一致。

最常見方式:

每一個 Request 進入 Pipeline 時產生 RequestId

儲存在 HttpContext.Items 中(僅在該 Request 有效)

Log 時從 HttpContext.Items 取得

✅ 二、在 Global.asax 產生 RequestId(推薦做法)

Global.asax

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string requestId = Guid.NewGuid().ToString();
    HttpContext.Current.Items["RequestId"] = requestId;
}

✅ 三、在任何 .aspx.cs 取得 RequestId

Page_Load / Button_Click / 任何地方

string requestId = HttpContext.Current.Items["RequestId"]?.ToString();

、、、(略)

**********

其實說穿了,ChatGPT 只是讓 table 中每一筆資料有一個唯一的值而已,用 SQL Server 的 識別 IDENTITY(1,1) 即可。而 Request Id 和 Response Id 其實用同一個欄位即可。


(完)


[研究]SQL Server 2025 Standard Developer 升級 Standard 安裝

[研究]SQL Server 2025 Standard Developer 升級 Standard 安裝

2025-12-02







(完)

相關

2025年12月1日 星期一

[研究]3xx MB 的 .sql 用SSMS匯入 SQL Server (32 GB) 出現記憶體不足

[研究]3xx MB 的 .sql 用SSMS匯入 SQL Server (32 GB) 出現記憶體不足

2025-12-01


Microsoft SQL Server Management Studio

無法執行指令碼。

其他资讯:

Insufficient memory to continue the execution of the program. (mscorlib)

省複製 顯示詳細資料 確定



Insufficient memory to continue the execution of the program. (mscorlib)

程式位置:

System Runtime InteropServices.Marshal.AllocCo.TaskMem(Int32 cb)

Microsoft.SqUerver Management UI UI VSIntegration Shell TexEutfer.GetText(Unt32 startPostion, Int32 chars)

Microsoft SolServer Management UI YSInte gration Shell TextBuffer.get Text)

Micoosoft.SqlServer Management UI.UI.YSIntegration ShellCode WundowControl GetSelected TextSpen)

Microsoft.So Server.Management UI VSInte gration Edidors ScriptidorControl GetSelected TextSpan)

R Miczoout SoNerver Management Ul USIntegrateshon EdiScopthondReiptAndResmlbaditorContol OnExExecSonpt(Obect sendes, Eventkra)

**********

ChatGPT


你遇到的錯誤是 SSMS 在匯入大型 .sql 檔案時出現的記憶體不足 (Insufficient memory),即使你電腦有 32 GB RAM,也可能發生,原因和背景如下:


1️⃣ SSMS 與大型 SQL 檔案的限制

  • SSMS 是以 .NET Framework 開發的桌面程式。
  • SSMS 的 32 位元或 64 位元程式記憶體管理有限制:
    • 32-bit SSMS 會受限於 2–4 GB 的最大可用記憶體。
    • 即使是 64-bit SSMS,也可能因 單個物件在記憶體中的分配而遇到限制。
  • 當你用 SSMS 打開並執行大型 .sql 文件 (幾百 MB):
    • SSMS 會 先把整個檔案讀入記憶體。
    • 若檔案內容龐大,尤其有大量 INSERT 語句,會瞬間消耗大量記憶體。
    • 這會觸發 .NET mscorlib 的 “Insufficient memory” 錯誤。

2️⃣ 其他潛在因素

  • SSMS 版本過舊:早期版本在處理大檔案時記憶體管理不佳。
  • 單行語句過長:.sql 裡的 INSERT 語句或資料列非常長,可能導致暫存物件占用超大記憶體。
  • Windows 記憶體碎片或其他程式佔用:即使總 RAM 足夠,連續大記憶體區塊可能不足。


3️⃣ 解決方案 / 替代方法


  • 用 SQLCMD 匯入(推薦)

sqlcmd -S <ServerName> -d <DatabaseName> -U <User> -P <Password> -i "C:\path\to\file.sql"


    • SQLCMD 是命令列工具,不會一次把整個檔案載入記憶體。
    • 對大檔案 (百 MB ~ GB) 很穩定。

  • 分割 SQL 檔案

    • 用文字編輯器或專用工具把 3xx MB 的檔案拆成多個小檔案,每個 50~100 MB 執行一次。
    • 避免一次塞入 SSMS 記憶體。
  • 改用批次 INSERT 或 BCP

    • 若檔案是大量 INSERT 資料,可以改成 CSV + BULK INSERT 或 BCP 工具匯入。
    • 效能更好,對大型資料庫匯入更穩定。
  • 使用最新 64-bit SSMS
    • 確認你安裝 SSMS 18+ 或 19+ 64-bit 版本。
    • 舊版 32-bit SSMS 很容易在大檔案時爆記憶體。


💡 重點結論

  • 問題不是你 RAM 不夠,而是 SSMS 將整個檔案載入記憶體 的方式與 .NET 記憶體限制。
  • 對於幾百 MB 的 .sql,最好不要用 SSMS GUI,改用 SQLCMD 或分割檔案。

(完)



2025年11月25日 星期二

[研究]GridView顯示到豪秒

[研究]GridView顯示到豪秒

2025-11-25

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 20.2

資料表 LogTime 欄位資料型態 datetime2(3)

GridView 的 <asp:BoundField> 無法自行格式化 datetime 到毫秒。

要顯示到毫秒,必須改用 TemplateField + Eval("欄位","格式字串")。

.aspx

<asp:TemplateField HeaderText="事件時間" SortExpression="LogTime">
    <ItemTemplate>
        <%# Eval("LogTime", "{0:yyyy-MM-dd HH:mm:ss.fff}") %>
    </ItemTemplate>
</asp:TemplateField>

(完)

相關

2025年11月24日 星期一

[研究]Windows 11 26H1 英文專業測試版

[研究]Windows 11 26H1 英文專業測試版

2025-11-24

28000.1.251103-1709.BR_RELEASE_CLIENTPRO_OEMRET_X64FRE_EN-US.iso

4.92 GB (5,285,885,952 位元組)




































(完)