相关疑难解决方法(0)

使用Web.Config转换的高级任务

有没有人知道是否有办法"转换"值的特定部分而不是替换整个值或属性?

例如,我有几个appSettings条目,指定不同Web服务的Url.这些条目在开发环境中与生产环境略有不同.有些不像其他人那么微不足道

<!-- DEV ENTRY -->
<appSettings>
 <add key="serviceName1_WebsService_Url" value="http://wsServiceName1.dev.domain.com/v1.2.3.4/entryPoint.asmx" />
 <add key="serviceName2_WebsService_Url" value="http://ma1-lab.lab1.domain.com/v1.2.3.4/entryPoint.asmx" />
</appSettings>

<!-- PROD ENTRY -->
<appSettings>
 <add key="serviceName1_WebsService_Url" value="http://wsServiceName1.prod.domain.com/v1.2.3.4/entryPoint.asmx" />
 <add key="serviceName2_WebsService_Url" value="http://ws.ServiceName2.domain.com/v1.2.3.4/entryPoint.asmx" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

请注意,在第一个条目中,唯一的区别是".prod"中的".dev".在第二项,子域名是不同的:"MA1-lab.lab1""ws.ServiceName2"

到目前为止,我知道我可以在Web中做这样的事情.Release.Config:

<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes(value)" key="serviceName1_WebsService_Url" value="http://wsServiceName1.prod.domain.com/v1.2.3.4/entryPoint.asmx" />
<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes(value)" key="serviceName2_WebsService_Url" value="http://ws.ServiceName2.domain.com/v1.2.3.4/entryPoint.asmx" />
Run Code Online (Sandbox Code Playgroud)

但是,每次更新该Web服务的版本时,我都必须更新Web.Release.Config,这会破坏我的web.config更新的目的.

我知道我也可以将该URL拆分为不同的部分并单独更新它们,但我宁愿将它全部放在一个键中.

我已经浏览了可用的web.config Transforms但是nothings似乎是我想要完成的东西.

这些是我用作参考的网站:

Vishal Joshi的博客,MSDN帮助Channel9视频

任何帮助将非常感激!

-D

asp.net web-config transformation visual-studio-2010 web-deployment

41
推荐指数
1
解决办法
1万
查看次数

Web.config Build vs Release转换不起作用

我有一个ASP.NET Web应用程序项目,通过实体框架连接到远程数据库.在调试期间(例如,在我的本地计算机上运行项目),数据库的IP地址与发布期间的IP地址不同(例如,在将项目上载到我的Web服务器并从浏览器运行之后).到目前为止,我总是手动更改Web.config文件中的数据库连接字符串以在两者之间切换(基本上我必须连接字符串,一个名为'Debug',一个'Release',我只是在部署时交换名称).

现在我只是注意到应该可以通过Web.config Transformation Syntax自动发生这种情况,你可以将修改后的连接字符串放在Web.Release.config版本中,然后在Release版本下构建DLL时应该使用它.

但它似乎对我不起作用......

这是我的常规Web.config文件的相关部分(其中包含用于本地使用的Debug连接字符串):

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <!-- Debug connection string. Release connection string is in Web.Release.config file -->
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>
Run Code Online (Sandbox Code Playgroud)

这是Web.Release.config文件,如果DLL处于Release模式下,根据示例应将"DatabaseEntities"连接字符串"A"替换为"B":

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
  <connectionStrings>
    <add name="DatabaseEntities"
      connectionString="B"
      xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>

</configuration>
Run Code Online (Sandbox Code Playgroud)

(显然"A"和"B"只是我真实连接字符串的占位符)

当我调试应用程序时(例如只按F5),使用默认的Web.config,我可以访问数据库.然后,我通过Configuration Manager将构建配置更改为Release.解决方案中的所有项目都设置为发布配置.然后我构建解决方案(仅通过Build或甚至通过完整的重建(例如Clean,Rebuild)).我将新构建的DLL上传到Web服务器,以及Web.config和Web.Release.config文件,当我尝试访问我无法访问的数据库时,它仍然试图通过调试IP地址访问数据库因此无法找到它......

似乎Web.Release.config文件被完全忽略,或者至少没有替换连接字符串.

我究竟做错了什么?转换语法错了吗?我没有正确地在发布模式下构建应用程序吗?

asp.net release web-config build web-config-transform

29
推荐指数
1
解决办法
3万
查看次数

在本地应用web.config转换

我对我的web.config进行了转换,如果我发布到Azure,它当前有效,但是在构建/运行时它不能在本地工作.如何在本地进行"发布",以便在我的开发框中将本地转换应用于我的web.config?

目前,我右键单击>发布到Azure,是否需要为本地框创建新的发布配置文件?有没有办法让变换在Build上工作?

web-config web-config-transform

6
推荐指数
1
解决办法
3255
查看次数