簡體   English   中英

通過單擊一次部署防止配置文件發布

[英]Prevent Config File From Publishing With Click-Once Deployment

我正在嘗試使用Click-Once發布,麻煩的是,它也在發布Config文件,該文件包含我在開發計算機上使用的連接字符串,而不是我在生產環境中使用的正確字符串。 如何防止配置文件被發布超過一次? 我嘗試在屬性中將其不包括在發布列表中,但是沒有選擇這樣做。

配置文件是Deployment的一部分,因為它們存儲在Addin中使用的所有必要設置。

如果我正確理解了問題,那么您想要使用一些設置,例如當Addin在生產環境中時說HOSTURL=http://example.com ,而在開發Addin並期望所有這些時HOSTURL=http://localhost這自動地無需人工干預。

然后,您可以嘗試以下方法之一:

[1]嘗試找到ClickOnceLocation並根據ClickOnceLocation值使用設置。 假設在開發/調試外接ClickOnceLocation包含"Debug"

//CodeBase is the location of the ClickOnce deployment files
Uri uriCodeBase = new Uri(assemblyInfo.CodeBase);
string ClickOnceLocation = Path.GetDirectoryName(uriCodeBase.LocalPath.ToString());
if(ClickOnceLocation.Contains("Debug"))
{
    URL = "http://localhost";    
}
else
{
    URL = //from app.config
}

[2] 使用構建配置更新app.config

您可以使用一些技巧,以便在發布過程中獲取具有生產服務器值的其他文件。

您可以有兩個單獨的配置文件,一個用於本地部署/調試,一個用於應用程序的實際發布或生產版本。 調試配置文件可能指向本地服務器,而實際發布的配置文件可能指向實際服務器。 然后,您可以配置構建配置,以便根據活動的構建配置選擇適當的配置文件。

要將兩個不同的app.config文件添加到項目中,可以在項目文件中更新對app.config的引用。 app.config在項目文件(vbproj或csproj)中使用以下xml定義:

<ItemGroup>

…

<None Include=”app.config” />

</ItemGroup>

ItemGroup中可能還有其他節點以及app.config節點。 從此ItemGroup節點中刪除公正的app.config,並在該節點下使用以下xml創建一個新的ItemGroup:

<ItemGroup Condition=” ‘$(Configuration)|$(Platform)’ == ‘Debug|AnyCPU’ “>
<None Include=”app.config” />
</ItemGroup>

<ItemGroup Condition=” ‘$(Configuration)|$(Platform)’ == ‘Release|AnyCPU’ “>
<None Include=”publishedapp.config” />
</ItemGroup>

這基本上意味着,當將活動配置設置為“調試”時將使用常規app.config文件,而在將活動配置設置后,將使用具有存儲在項目的“已發布”子文件夾中的實際生產變量的修改后的app.config到“發布”。

您可以更改ItemGroup條件以匹配您可能已定義的其他構建配置。 一種可能性是基於“發布”配置定義一個單獨的“發布”配置,但僅在您實際要發布應用程序時使用。

此過程的另一個免責聲明是VS項目系統本身和設計人員都不知道其他app.config文件; Visual Studio僅知道原始文件。 帶有生產環境值的修改后的app.config僅由msbuild進程使用。 因此,如果通過設置設計器更新主app.config,則修改后的app.config將不會更新,而您必須手動更新文件。

一旦正確配置了項目,您就可以在不同的生成配置之間進行切換,以更改配置文件並從Visual Studio發布應用程序,而無需執行更新和重新簽名過程。

暫無
暫無

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

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