---
# System prepended metadata

title: '[筆記] Web API 2 發布的 XML 檔案同步問題'
tags: [Bin, Build, Publish, XML, WebAPI]

---

# [筆記] Web API 2 發布的 XML 檔案同步問題

### :question: **疑問**
1. 如何在預設的**建置**下產生專案的 XML 檔案 ?
2. 如何在預設的**發布**下的資料夾產生專案的 XML 檔案 ?
3. 如何將所有 Nuget 套件所生成的 XML 都複製到指定資料夾 ?
  
:::success
:bulb: **快速解答**
1. 開啟**專案屬性**進行設定就可以了。
2. 同上作法。
3. 需要變動 .csproj 或者 .pubxml 檔案。
:::

---

### 1. 在預設的 Debug 模式下建置生成專案的 XML 檔案
#### (1) 運行專案後，到專案下的 bin 資料夾：
- 發現有很多的 Nuget 套件 XML 檔案
- 但是唯獨沒有專案的 XML 檔案 ( **{專案名稱}.xml** )

![image](https://hackmd.io/_uploads/H1voG1SQC.png)

#### (2) 開啟專案屬性的建置設定：
- 對右側 **"方案總管"** 的 **"專案(Project)"** 按下右鍵
- 最下方有個 **"屬性"** 選項

![image](https://hackmd.io/_uploads/HkaSVyH7C.png)
- 點選左側的 **"建置"** 標籤，右側視窗拖拉到最下方可以看到 **"XML 文件檔案"** 的方框

![image](https://hackmd.io/_uploads/SkA3VySXA.png)

#### (3) 開啟設定，並重新運行專案：
- 開啟 **"XML 文件檔案"** 的方框設定，保持預設路徑位址

![image](https://hackmd.io/_uploads/r16cHkrmR.png)

- 重新運行專案，就可以在專案下的 bin 資料夾，找到專案的 XML 檔案了

![image](https://hackmd.io/_uploads/BkRbIJBmA.png)

---

### 2. 在 Release 模式下發布生成專案的 XML 檔案
#### (1) 發布專案後，到專案下的 bin\app.publish\bin 資料夾：
- 沒有發現任何的 XML 檔案 (亦沒有 **{專案名稱}.xml** )

![image](https://hackmd.io/_uploads/HyLhv1B7R.png)

#### (2) 同樣，開啟專案屬性的建置設定，再重新發布專案：

- 開啟**建置設定**的視窗之後，需要調整上方的**組態:Release**
- 並開啟 **"XML 文件檔案"** 的方框設定，保持預設路徑位址

![image](https://hackmd.io/_uploads/SkySuyBm0.png)

- 重新發布專案，就可以在專案下的 bin\app.publish\bin 資料夾，找到專案的 XML 檔案了
- 每次發布後，就會自動生成新的 XML 檔案到 bin\app.publish\bin 資料夾
- 這樣就可以避免每次重新發布專案時，還要去 \bin 資料夾複製專案的 XML 檔案

![image](https://hackmd.io/_uploads/ryciKkSQ0.png)


---

### 3. Nuget 套件的 XML 檔案複製
- 上面有看到在專案下的 bin 資料夾，還有很多的 XML 檔案，是否需要遷移到 publish 的資料夾呢？
    - 答案是：看情況，而多數的情況是，**不需要**
    - 例如：使用 .Net Framework Web API 2 生成 Swagger 文件，就需要在 publish 的資料夾含有 **{專案名稱}.xml**
    - 而多數的 Nuget 套件所相依的 XML 檔案，並不需要遷移到 publish 資料夾

#### (1) 為了保險起見，我想要所有的 XML 檔案，都從 bin 複製到 bin\app.publish\bin：
- 手動編輯 .csproj 或者 .pubxml 檔案 (缺點是：要手動改)
- 或者調整部署的項目 (缺點是：app.publish 會變得很大包)
- ~~又或者是 ... 手 動 複 製 ...~~ (缺點是：我們又回到了問題的起點...)
- 如果有興趣的話，相關方法可以參考下面的文章內容
:::info
:bookmark_tabs: **參考資料**
>stackoverflow 1：https://stackoverflow.com/questions/23681534/asp-net-webapi-publish-xml-files-not-copy
>stackoverflow 2：https://stackoverflow.com/questions/44643151/how-to-include-xml-comments-files-in-swagger-in-asp-net-core/
:::

---