我制作了web.config
( full file ,它没有显示XML错误)
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
...
<location path="." inheritInChildApplications="false">
<connectionStrings>
<add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" />
<add name="database" connectionString="w" providerName="System.Data.EntityClient"/>
</connectionStrings>
</location>
...
使用转换文件(web.Staging.config
)
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="database"
connectionString="c"
providerName="System.Data.EntityClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<customErrors defaultRedirect="error.aspx"
mode="RemoteOnly" xdt:Transform="Replace">
</customErrors>
</system.web>
</configuration>
我以Staging
模式发布(右键点击网站&gt;发布&gt;方法:文件系统...)
------ Build started: Project: Drawing, Configuration: Staging Any CPU ------
Drawing -> D:\Project\bin\Staging\Drawing.dll
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------
MySystem -> D:\Project\bin\Staging\MySystem.dll
...
但是当我查看输出文件夹中的web.config
时,它不会被更改。
我在构建日志中找到以下内容:
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config.
可能是什么问题?我这样做了吗?
答案 0 :(得分:20)
回答迟到但也许我可以让别人头疼。在Visual Studio 2013中,有两个位置可供选择用于构建和部署的配置。配置管理器,然后再次使用“发布Web”,其中“向导”向导中的第三步允许您选择要使用的配置。如果您没有选择新配置,它将使用所选配置的变换而不是您的配置。
答案 1 :(得分:16)
我发现了两件事:
<configuration>
代码上设置名称空间(例如:for <location path="." inheritInChildApplications="false">
)像
<configuration>
<location>
<connectionStrings>
而不是
<configuration>
<connectionStrings>
答案 2 :(得分:4)
确保在Web.Config文件Build Action
的属性中设置为Content
。
如果构建操作设置为None
,则即使将其复制到输出目录,也不会对其进行转换。
答案 3 :(得分:1)
如果要添加的部分尚未出现在输出中,请确保包括InsertIfMissing
。
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location>
<system.webServer>
<security xdt:Transform="InsertIfMissing">
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
</location>
</configuration>
答案 4 :(得分:0)
不要忘记从原始的“web.config”复制“配置”的所有其他属性,因为看起来VS2012不会自动执行,当然也不会有匹配...
答案 5 :(得分:0)
答案也很晚,但这可能有助于某人。
我意识到,如果您在同一个解决方案中有两个网站,那么当您尝试发布其中一个网站时,如果您只为这两个项目配置一个网站,则转换可能无效。
我的一个网站总是在改变,但另一个网站有时是,有时候不是。
例如,我有配置&#34; Auto&#34;在解决方案中,两个网站都有web.Auto.config。
我通过创建一个具有不同名称的新配置来解决这个问题 - &#34; AutoAdmin&#34; - 为第二个项目创建web.AutoAdmin.config文件,当我再次发布它时,最终发生了转换。
答案 6 :(得分:0)