我开发了ClickOnce应用程序(C#Framework 4.5) 它通过Web Service访问数据。 我们有三个环境:dev,test和prod。 每个环境 - 另一个服务器名称。 我想发布一个并使用外部工具将其复制到每个环境。 问题,为每个环境访问Web服务的正确URL。 我需要在每个环境的代码中动态更改url。
我向app.config添加了WS引用
<add key="ws_url_local" value="http://localhost/app/ws.asmx" />
<add key="ws_url_prod" value="http://server_prod/app/ws.asmx" />
<add key="ws_url_test" value="http://server_test/app/ws.asmx" />
<add key="ws_url_dvlp" value="http://server_dvlp/app/ws.asmx" />
我发布到文件夹,然后,另一个系统将文件夹复制到 所有环境。 我如何在代码中按环境动态更改网址?
switch(fromWhereInstaled?){
case "prod":
url = ConfigurationManager.AppSettings["ws_url_prod"];
break;
case "test":
...
}
感谢您的帮助!
答案 0 :(得分:1)
找到解决方案:
string url = ConfigurationManager.AppSettings["url_ws_local"];
if(ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
if(ad.ActivationUri.AbsolutePath.Contains("prodservername"))
{
url = ConfigurationManager.AppSettings["url_ws_prod"];
}
else if ad.ActivationUri.AbsolutePath.Contains("testservername")
.....
}
ws.Url = url;
但如果您在没有更新ActivationUri的情况下移动应用程序,请使用此解决方案:
string url = ConfigurationManager.AppSettings["url_ws_local"];
if(AppDomain.CurrentDomain.SetupInformation.ActivationArgument != null && AppDomain.CurrentDomain.SetupInformation.ActivationArgument.ActivationData != null) // Network published
{
string strParam = AppDomain.CurrentDomain.SetupInformation.ActivationArgument.ActivationData[0];
if(strParam.Contains("prodservername"))
{
url = ConfigurationManager.AppSettings["url_ws_prod"];
}
else if ...
}
ws.Url = url;
但不要忘记转到Properties =&gt; Publish&gt; Options =&gt; Manifest,并检查: 允许将URL参数传递给应用程序。 同样通过这种方式,您可以更改检查更新的URL。