簡體   English   中英

如何同時部署兩個 ClickOnce 版本?

[英]How do I deploy two ClickOnce versions simultaneously?

我希望能夠為我的應用程序提供一個測試 ClickOnce 服務器,用戶可以在其中並行運行生產版本和測試版本。 這可能嗎?

我首先嘗試在AssemblyInfo.cs中使用以下內容,並在 ClickOnce 部署中更改名稱,盡管所有這些實現都是用測試版本覆蓋用戶的生產版本。 同樣,當他們回到生產服務器時,它也做了同樣的事情。

#if DEBUG
[assembly: AssemblyTitle("Product Name - Test")]
#else
[assembly: AssemblyTitle("Product Name")]
#endif

我想我還應該澄清一下,這兩個部署位置彼此不同,並且在不同的服務器上。

更新

我還嘗試根據調試模式為清單設置 GUID,但它同樣不起作用(下面使用虛擬 GUID)。

#if DEBUG
[assembly: Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
#else
[assembly: Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
#endif

兩者如何區分? 似乎安裝程序將它們視為兩個獨立的程序,因為我得到了每個程序的安裝確認。 雖然,當我安裝第二個時,“添加/刪除程序”只看到后者,雖然前者仍在磁盤上,因為當我 go 稍后重新安裝它時,它只是簡單地運行,但隨后添加/刪除程序切換回到以前的名字。

聽起來有些la腳,但是最簡單的方法是在解決方案中包含兩個EXE項目。 這些中的每一個的Main方法將只在原始EXE項目中調用Main方法(您將剛剛轉換為DLL文件)。

這意味着每個EXE項目都可以具有自己的ClickOnce發布設置以及自己的app.config文件。 這意味着生產版本和測試版本具有不同的連接字符串。

您的另一種選擇(似乎最有意義的選擇)是使用MageUI.exe手動生成ClickOnce文件,這樣您就可以選擇其他配置文件,並在每次運行該工具時發布位置。 還有一個命令行版本(Mage.exe),因此從理論上講您可以使它自動化。

但是,我們發現使用兩個“運行程序”項目的解決方案要簡單得多。 我建議您先嘗試一下。

ClickOnce:並發版本說明了如何執行此操作。

我手動編輯了.csproj以為debug/release指定一個不同的ProductName。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...
    <PublishUrl>publishbeta\</PublishUrl>
    <InstallUrl>http://www.softwareabc.com/download/beta/</InstallUrl>
    <ProductName>Software ABC Test</ProductName>
    <AssemblyName>SoftABCTest</AssemblyName>
    <ApplicationIcon>Resources\Test.ico</ApplicationIcon>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <PublishUrl>publish\</PublishUrl>
    <InstallUrl>http://www.softwareabc.com/download/</InstallUrl>
    <ProductName>Software ABC</ProductName>
    <AssemblyName>SoftABC</AssemblyName>
    <ApplicationIcon>Resources\Application.ico</ApplicationIcon>
</PropertyGroup>

一個警告是,如果在調試/發行版之間切換,Visual Studio 2010不會更新此版本。 它僅在加載解決方案時生效,因此請確保切換調試/釋放,然后關閉並重新打開解決方案。

請參見有關並發版本控制的簡要視頻: ClickOnce:並發版本

嘗試在屬性窗口的“應用程序”選項卡中更改程序集名稱。

在至少將項目配置為發布“單擊一次”應用程序之后,您必須手動編輯csproj。

將與“單擊一次”相關的某些屬性從<PropertyGroup>移到<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">屬性組,並在<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">下復制它們<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">屬性組。

要復制的屬性是ApplicationRevision (僅在需要單獨的修訂計數器的情況下), PublishUrlProductNameSuiteName (需要最后兩個才能區分目標計算機上的配置)。 您還必須重寫AssemblyName屬性(不能從第一組中將其刪除)。

如果要能夠在任何配置下調試項目,則還必須在覆蓋AssemblyName屬性的每個組中添加StartActionStartProgram屬性。

在為這些屬性指定了足夠的值(即不同的值)之后,您只需選擇所需的配置就可以發布兩個配置, 而無需修改項目 但是注意, 您將必須在不同配置的發布之間卸載項目 ,否則Visual Studio會弄亂您的參數。

之后,您還可以將兩個版本安裝在同一台目標計算機上。

我一直都這樣。 我什至在我的應用程序中都有一個屏幕,用於更改特定用戶將獲得的版本。 而且我在應用程序方面沒有做任何棘手的事情,所有的魔力都在托管ClickOnce文件的Web服務器上。

看一下我的伙伴寫的文章,《 ClickOnce的精細粒度版本控制》 它說明了我們是如何做到的。

Peter Mortensen的兩個項目方案的變體。 我想要開發人員,客戶測試和客戶發布。 在我的情況下,我希望客戶測試提供一些視覺線索,表明它是經過測試的,而不是實時的(例如標題中的“ TEST”和其他視覺主題)。

我發現擁有兩個解決方案以及兩個存根項目是最簡單的。 每個項目都在其自己的目錄中,並帶有自己的存根program.cs,app.config和assemblyinfo.cs。

在開發/測試解決方案中,調試配置用於開發,發布配置用於客戶測試。 我使用SlowCheetah來轉換后者的app.config。

在客戶發布解決方案中,我只需要一個發布配置。

可以在不更改 AssemblyName 的情況下部署同一應用程序的 2 個版本,這是如何完成的...

  1. 創建一個 clickonce 部署
  2. 打開 .application 文件並進行以下編輯:

在此處輸入圖像描述 3. 運行安裝程序,MyApp 將被安裝。 根據之前的嘗試,您可能需要使用 mage -cc 清除應用程序緩存

  1. 再次編輯 .application 文件,用 MyApp2 替換 MyApp

  2. 運行安裝程序並安裝 MyApp2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM