[英]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
(僅在需要單獨的修訂計數器的情況下), PublishUrl
, ProductName
和SuiteName
(需要最后兩個才能區分目標計算機上的配置)。 您還必須重寫AssemblyName
屬性(不能從第一組中將其刪除)。
如果要能夠在任何配置下調試項目,則還必須在覆蓋AssemblyName
屬性的每個組中添加StartAction
和StartProgram
屬性。
在為這些屬性指定了足夠的值(即不同的值)之后,您只需選擇所需的配置就可以發布兩個配置, 而無需修改項目 。 但是請注意, 您將必須在不同配置的發布之間卸載項目 ,否則Visual Studio會弄亂您的參數。
之后,您還可以將兩個版本安裝在同一台目標計算機上。
我一直都這樣。 我什至在我的應用程序中都有一個屏幕,用於更改特定用戶將獲得的版本。 而且我在應用程序方面沒有做任何棘手的事情,所有的魔力都在托管ClickOnce文件的Web服務器上。
看一下我的伙伴寫的文章,《 ClickOnce的精細粒度版本控制》 。 它說明了我們是如何做到的。
Peter Mortensen的兩個項目方案的變體。 我想要開發人員,客戶測試和客戶發布。 在我的情況下,我希望客戶測試提供一些視覺線索,表明它是經過測試的,而不是實時的(例如標題中的“ TEST”和其他視覺主題)。
我發現擁有兩個解決方案以及兩個存根項目是最簡單的。 每個項目都在其自己的目錄中,並帶有自己的存根program.cs,app.config和assemblyinfo.cs。
在開發/測試解決方案中,調試配置用於開發,發布配置用於客戶測試。 我使用SlowCheetah來轉換后者的app.config。
在客戶發布解決方案中,我只需要一個發布配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.