2011-03-25 59 views
11

我做了一個web.configfull file,它不顯示XML錯誤)發佈不轉換web.config?

<?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模式(右鍵點擊網站>發佈>方法:文件系統...)

------ 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

當你發佈它是爲'staging'或'release'構建的嗎? – Jimmy 2011-03-25 15:13:44

+0

@Jimmy在生成日誌中說,它是在'Staging'中編譯的。有一個'Release'的轉換文件,但它也不起作用。 – BrunoLM 2011-03-25 15:15:35

+0

您是否看到表示正在執行轉換的消息?像我的說:「使用Web.Beta.config轉換成obj \ Beta \ TransformWebConfig \轉換\ Web.config。」Web.config。「 – CodingGorilla 2011-03-25 15:19:35

回答

16

我發現了兩件事情:

  • 你不能設置在<configuration>標籤的命名空間(例如:對於<location path="." inheritInChildApplications="false">
  • 你必須注意在轉換文件正確的層次結構。

<configuration> 
    <location> 
    <connectionStrings> 

而不是

<configuration> 
    <connectionStrings> 
+0

關於xmlns:實際上你可以使用它,但是你也必須將它添加到變換根標籤中。沒有xmlns它可以工作,但是VS不能識別'inheritInChildApplications'屬性。 – amartynov 2013-04-17 14:05:34

0

不要忘了 「配置」 的所有其他屬性從原來的 「web.config」 複製,因爲它似乎VS2012不會自動執行它,當然不會有匹配...

+3

這不是事實。你可以只指定正在改變的屬性,並指示變換隻更新屬性(不能替換元素):'' – 2014-07-17 13:45:35

14

回答遲到,但也許我可以救人頭痛。在Visual Studio 2013中,有兩個地方可以爲您的構建和部署選擇配置。配置管理器,然後再次使用Publish Web,其中嚮導中名爲Settings的第三步允許您選擇要使用的Config。如果您不選擇新的配置,它將使用所選配置的變換而不是您的配置。

+3

你的確保存了我一個頭痛。 – izb 2014-11-27 14:51:41

+1

這是真正的答案。 – 2016-06-09 12:02:18

0

回答遲到,但這可能有助於某人。

我意識到如果您在同一個解決方案中有兩個網站,當您嘗試發佈其中一個網站時,如果兩個項目只有一個配置,則轉換可能不起作用。

我的一個網站總是在變化,但另一個網站有時候是,有時不是。

例如,我在解決方案中配置了「Auto」,並且兩個網站都有web.Auto.config。

我解決了,通過創建一個不同名稱的新配置 - 「AutoAdmin」 - 爲第二個項目創建其web.AutoAdmin.config文件,當我再次發佈它時,最終發生了轉換。

2

確保在Web的屬性中。配置文件Build Action設置爲Content

如果生成操作設置爲None,即使將它複製到輸出目錄,也不會進行轉換。