xml file is missing with clickonce

來源:互聯網
上載者:User

將用戶端登陸介面的公司資料放在CompanyData.xml中儲存,在smartclient/clickonce的部署模式下,直接將該xml檔案從服務端下載至用戶端,這個思路解決了在系統登入前訪問服務端資料的需要,又避免了在用戶端將部分資料hardcode的問題。

但是在clickonce下,用戶端安裝完成後,發現CompanyData.xml檔案不見了。我檢查了manifest檔案,用mageui開啟,可以看到該檔案確實在裡面。其中一個細節是,CompanyData.xml是被作為Data file而存在的。

 

最開始以為是xml檔案的下載出現了問題,以為就像config檔案的下載被Request Filtering過濾掉了的問題一樣,企圖通過在ClientPublish的web.config中增加一行:<remove fileExtension=".xml" />來解決這個問題,這個問題沒有定位清楚,這麼做肯定是不行的。這源於一個發現,我在用戶端的本機使用者目錄查詢,按照Shell.exe.config來查詢,查到了兩個結果,如:

 

smartclient在被安裝到使用者本地臨時目錄時,怎麼會存到兩個地方呢?各自開啟對應的目錄一看,恍然大悟。

路徑1:

路徑2:

 

路徑2下的兩個檔案引起了我的注意,這說明CompanyData.xml檔案已經被下載到用戶端了,只是沒有被拷貝到program file folder。那麼這顯然就與IIS的配置無關了,純粹是clickonce的Application Files的配置問題了。開啟MSDN上關於Application Files Dialog的主題,原來Data file不會被自動安裝到program file folder,只有Include類型才會預設將當前檔案拷貝到program file folder中。就理解而言,CompanyData.xml確實是Data file,但是我又希望它能夠被安裝到program file folder中,怎麼辦?在這裡我採用的是折中的辦法,將CompanyData.xml的類型改為Include(而Data file如何拷貝到program file folder的方向我沒有深入進去),有了這樣的思路,那麼就好辦了。

開啟Shell項目屬性,進入Publish頁,點擊Application files按鈕,可以看到Shell項目中所有檔案的資源清單,找到CompanyData.xml,將其publish status由Data file改為Include,然後儲存,比較一下Shell.csproj的變化,發現多了很多東西,例如:

<ItemGroup>  <IsWebBootstrapper>false</IsWebBootstrapper>  <PublishUrl>publish\</PublishUrl>  <Install>true</Install>  <InstallFrom>Disk</InstallFrom>  <UpdateEnabled>false</UpdateEnabled>  <UpdateMode>Foreground</UpdateMode>  <UpdateInterval>7</UpdateInterval>  <UpdateIntervalUnits>Days</UpdateIntervalUnits>  <UpdatePeriodically>false</UpdatePeriodically>  <UpdateRequired>false</UpdateRequired>  <MapFileExtensions>true</MapFileExtensions>  <ApplicationRevision>0</ApplicationRevision>  <ApplicationVersion>1.0.0.%2a</ApplicationVersion>  <UseApplicationTrust>false</UseApplicationTrust>  <BootstrapperEnabled>true</BootstrapperEnabled><ItemGroup />

其中,多了一段重要的一個ItemGroup:

<ItemGroup>  <PublishFile Include="CompanyData.xml">  <Visible>False</Visible>  <Group>  </Group>  <TargetPath>  </TargetPath>  <PublishState>Include</PublishState>  <IncludeHash>True</IncludeHash>  <FileType>File</FileType>  </PublishFile></ItemGroup>

出于謹慎的考慮(因為之前在搞clickonce的時候,Shell項目的publish配置調整,引出了不少問題),所以我只將上面的這個ItemGroup加了進去,其它不相關的忽略不問。(感覺這也是visual studio project的一個問題,當修改了publish頁的配置,專案檔中增加了很多不必要的東西)

加上去之後,趕緊將代碼提交到SVN,在jenkins中kick一個新的build,登入test server執行client publish,然後到test client上將之前安裝的Shell(多個版本)刪除,然後重新安裝,一試,果真OK,CompanyData.xml已經可以按照設想被拷貝到program file folder中了。剛做完,趕緊將這個過程分享出來。:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.