2016-12-23 28 views
1

我有一個使用第三方軟件「DevExpress」的大型點擊應用程序。 DevExpress DLL包含我的應用程序的95%的大小。他們從不改變,但每次我部署更新時,我需要將它們上傳到我的FTP服務器,這需要一段時間。有沒有辦法有一個單獨的包,這是我的點擊一次的DevExpress文件的應用程序鏈接?ClickOnce:避免部署永不改變的大文件

注意:在客戶端,點擊一次可以有效地管理它,並且不會下載沒有更改的文件。

感謝

+0

我想作爲Infragistics組件,您可以將其安裝在GAC – McNets

+0

我寧願將它集成到clickonce進程中,而不必單獨安裝這些DLL。這個過程對最終用戶來說必須是透明的,比如現在點擊一次。 – Acanocois

+0

您可以選擇部署中包含哪些文件(查看項目屬性),但我想如果您沒有將這些文件包含在您的實際設置中,那麼在用戶下次執行應用程序時,它將被刪除。 – McNets

回答

0

您可以本地化組件,這是有點像把他們在GAC中,只有他們將被安葬在%USERPROFILE%文件夾(與其他的ClickOnce組件)。

通過在App.Config文件中聲明它們,然後在項目中將每個程序集設置爲「排除」來完成此操作。這是一個什麼樣的App.Config中需要看起來像一個片段:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="DevExpress.BonusSkins.v16.1" culture="neutral" publicKeyToken="B88D1754D700E49A"/> 
     <codeBase version="16.1.4.0" href="http://YourUrl/DevExpress/16.1.4/DevExpress.BonusSkins.v16.1.dll"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="DevExpress.Charts.Designer.v16.1" culture="neutral" publicKeyToken="B88D1754D700E49A"/> 
     <codeBase version="16.1.4.0" href="http://YourUrl/DevExpress/16.1.4/DevExpress.Charts.Designer.v16.1.dll"/> 
     </dependentAssembly> 

第一次點擊一次部署運行時,它會檢查該文件本地化。如果是這樣,它會使用它們。如果沒有,它將下載它們一次(並且僅一次)。

優點:

  • 你點擊一次部署(EXE)現在是非常小的
  • 您可以添加你想要的所有真棒開發防爆件,像獎金皮膚,而不必擔心使你的部署巨大
  • 這適用於任何簽署DLL,而不僅僅是開發快速
  • 就像點擊一次,用戶不需要管理員權限做到這一點(與GAC的解決方案,他將)
  • 更新您的應用程序將會以最快的速度快速運行。
  • 對用戶完全透明。這一切都無聲地發生在初始安裝

缺點:

  • 你,當你升級
  • 這是每個用戶來管理App.Config中,因此,如果六個用戶登錄到同一臺機器,您複製DLL六次

這也適用於UNC路徑 - 如果您的用戶都是內部用戶,則不需要Web引用。