Visual Studio:publish include additional files (phantomjs.exe)

RojerChen.2019.10.14

客戶:「先前上版的程式有問題喔,某個功能不能用,你改天過來一下」。

我:「是哪個功能有問題啊?是這樣啊,我再來了解一下」。

查了一下同事寫的筆記,才發現到每次上版的時候,都要額外檢查匯出的資料夾有無 phantomjs.exe 這個檔案,如果沒有的話要手動複製一份。


這樣也太麻煩了吧,那如果我想要在發行的時候加上這個檔案應該要怎樣做?


使用 VS 開發,如果是透過 nuget 安裝相關套件,通常都會把會用到的檔案匯出,只不過這次安裝的是 Selenium.PhantomJS.WebDriver,在開發期間雖然 bin\debug 資料夾底下會有 phantomjs.exe,只不過當你要發行程式的時候,這個檔案是不會包含在匯出的資料夾的。

作者的 github上面是這樣寫的

How to include the driver file into published files?

"phantomjs(.exe)" isn't included in published files on default configuration. This behavior is by design.

雖然作者有提到使用修改 csproj 的方式去處理,但是寫得很不清楚,讓人一點頭緒都沒有,而且在修改這些 xml 的時候,到底有哪些 tag 或變數可以用?既然 csproj 不知道該如何改,那就來調整 publish 設定檔吧

修改 publish 設定檔案 

修改 pubxml,經過這樣的調整後,程式發行就會將該檔案匯出到 bin 資料夾底下。

如果想要將原本的目錄原封不動的複製過去,就在去調整 DestinationRelaticePath 即可。

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="..\**\APC_SRMS\bin\phantomjs.exe" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>.\bin\%(Filename)%(Extension)
        </DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>

※後記

經過這樣的調整之後,就可以不用再透過手動的方式複製該檔案。雖然也是可以透過其他的 script 等方式來處理,但是處理的動作並沒有減少,還是會有漏掉的狀況發生,


※參考來源

使用 Visual Studio 的 ASP.NET Web 部署:部署其他檔案

How to get Visual Studio 'Publish' functionality to include files from post build event?

    Blogger Comment

0 意見: