防止配置文件通过单击一次部署发布
Prevent Config File From Publishing With Click-Once Deployment
我正在尝试使用 Click-Once 发布,问题是,它还发布了配置文件,其中包含我在开发计算机上使用的连接字符串,而不是我在生产环境中使用的正确连接字符串。如何防止Config文件多次发布?我尝试在属性中不将其包含在发布列表中,但没有这样做的选项。
配置文件是部署的一部分,因为它们存储了在插件中使用的所有必要设置。
如果我理解正确的话,你想使用一些设置,当 Addin 在生产环境中时说 HOSTURL=http://example.com
和当你开发插件时说 HOSTURL=http://localhost
并且你期待所有这些无需人工干预即可自动完成。
那么,您可以尝试其中之一:
[1] 尝试找到 ClickOnceLocation
并根据 ClickOnceLocation
的值使用设置。
假设 ClickOnceLocation
包含 "Debug"
而你是 developing/debugging 插件。
//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] Updating the app.config by using build configurations
您可以使用一些技巧,以便在发布期间选择具有生产服务器值的不同文件。
您可以有两个单独的配置文件,一个用于本地 deployment/debugging,另一个用于应用程序的实际发布或生产版本。调试配置文件可以指向本地服务器,而真正发布的配置文件可以指向真实服务器。然后,您可以配置构建配置,以便根据活动构建配置选择适当的配置文件。
要将两个不同的 app.config 文件添加到项目中,您可以在项目文件中更新对 app.config 的引用。 app.config 在项目文件(vbproj 或 csproj)中定义如下 xml:
<ItemGroup>
…
<None Include=”app.config” />
</ItemGroup>
ItemGroup 中可能还有其他节点以及 app.config 节点。从这个 ItemGroup 节点中删除刚刚的 app.config 并在节点下创建一个新的 ItemGroup 如下 xml:
<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 发布应用程序,而无需经历更新和重新签名过程。
我正在尝试使用 Click-Once 发布,问题是,它还发布了配置文件,其中包含我在开发计算机上使用的连接字符串,而不是我在生产环境中使用的正确连接字符串。如何防止Config文件多次发布?我尝试在属性中不将其包含在发布列表中,但没有这样做的选项。
配置文件是部署的一部分,因为它们存储了在插件中使用的所有必要设置。
如果我理解正确的话,你想使用一些设置,当 Addin 在生产环境中时说 HOSTURL=http://example.com
和当你开发插件时说 HOSTURL=http://localhost
并且你期待所有这些无需人工干预即可自动完成。
那么,您可以尝试其中之一:
[1] 尝试找到 ClickOnceLocation
并根据 ClickOnceLocation
的值使用设置。
假设 ClickOnceLocation
包含 "Debug"
而你是 developing/debugging 插件。
//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] Updating the app.config by using build configurations
您可以使用一些技巧,以便在发布期间选择具有生产服务器值的不同文件。
您可以有两个单独的配置文件,一个用于本地 deployment/debugging,另一个用于应用程序的实际发布或生产版本。调试配置文件可以指向本地服务器,而真正发布的配置文件可以指向真实服务器。然后,您可以配置构建配置,以便根据活动构建配置选择适当的配置文件。
要将两个不同的 app.config 文件添加到项目中,您可以在项目文件中更新对 app.config 的引用。 app.config 在项目文件(vbproj 或 csproj)中定义如下 xml:
<ItemGroup>
…
<None Include=”app.config” />
</ItemGroup>
ItemGroup 中可能还有其他节点以及 app.config 节点。从这个 ItemGroup 节点中删除刚刚的 app.config 并在节点下创建一个新的 ItemGroup 如下 xml:
<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 发布应用程序,而无需经历更新和重新签名过程。