【MVC】認識並解決"發行"時Xml說明文件(DocumentationFile)陷阱

  • 1035
  • 0
  • MVC
  • 2019-04-16

本文將介紹微軟MVC框架中的瑕疵(?),參考的共用專案Xml DocumentationFile於"發行(Publish)"時,並未一併帶出的問題。

 

問題介紹

 這個問題狀況基本如下圖所顯示,引用共用專案,設定共用專案的Xml說明文件(DocumentationFile)的輸出,並且於測試環境的bin也有出現(如果是初次使用Swagger的話,此時應該會很開心將共用專案的說明文字隨其他設定搞定後也一併載入了)。
 然而,事情沒那麼單純。當想要享受一鍵佈署並設定好那些該死的FTP、IIS,還是共享資料夾之類發行(Publish)相關設定後。準備吃著火鍋還唱著歌,發行後卻發現Swagger炸掉了!!!

 

 原來,問題是出現在這裡,共用專案的Xml說明文件並一起發行過去。這個是MVC的行為,XML檔案只有自己專案的說明文件會跟著發行,其他會跳過。

(如圖,發行後只有專案自己的Xml說明文件,共用專案"StandardService"並未一起發行)

解決方式

 解決方式其實很簡單很簡單的,就是手動調整發行(Publish)的設定檔,額外設定轉移檔案,就這樣而已。理論上當發行模式建置後,專案就會出現對應的.pubxml檔案,可以從專案的【Properties】中找到。

找到後於檔案中加入下面的XML設定,

  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      AddFilesToDeploy;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
  </PropertyGroup>
  <Target Name="AddFilesToDeploy">
    <ItemGroup>
      <XmlFile Include="bin\StandardService.xml" />
      <FilesForPackagingFromProject Include="%(XmlFile.Identity)">
        <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

重新發行後問題就解決了

延伸閱讀

1.使用 XML 註解記錄您的程式碼( https://docs.microsoft.com/zh-tw/dotnet/csharp/codedoc )

2.使用 Visual Studio 的 ASP.NET Web 部署:部署其他檔案( https://docs.microsoft.com/zh-tw/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-extra-files )

備註

1.【Web Api/.Net Core】沒有這問題。

2.偷懶的話(有多個共用專案),可以設定為 "*.xml",一口氣捕捉所有的(包含非相關的)Xml檔案一起輸出。

<XmlFile Include="bin\*.xml" />

 

3.如果有其他想跟著發行出去的檔案(如.TT動態產生的文件),也可以透過這個方式處理。

4.如果有其他佈署環境需要發行導致多個設定檔,每一個設定檔都要記得調整。