2016-04-20 8 views
0

展開のために、web.configの設定を開発環境から運用環境に変更するツールを作成しました。つまり、ある場合を除いてうまく機能:web.configをプログラムによって変更します:section "buildProviders"

私はセクションが消えデバッグ、私のbuildProvidersを設定してみてください。

これは私のsystem.webセクションである:

<system.web> 
 
    <machineKey ... /> 
 
    <compilation debug="true" strict="false" targetFramework="4.0"> 
 
     <buildProviders> 
 
     <remove extension=".resx"/> 
 
     <remove extension=".resources"/> 
 
     </buildProviders> 
 
     <assemblies> 
 
      ... 
 
     </assemblies> 
 
    </compilation>

、これは私の修正コードである:得られたweb.configファイルで

private void ChangeDebugSetting() 
    { 
     System.Configuration.Configuration configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
     System.Web.Configuration.CompilationSection comp = (System.Web.Configuration.CompilationSection)configuration.GetSection("system.web/compilation"); 
     comp.Debug = false; 
     configuration.Save(); 
    } 

buildProvidersセクションがありません。

デバッガでは、comp.BuildProvidersコレクションが空であることがわかります。ただし、保護されたプロパティbase.Itemsには、の2つの要素が含まれています。_entryType =削除されましたおよび_key = ".resx" resp。 _key = ".resources"

「削除」の両方の要素が保存されるようにするにはどうすればよいですかweb.config

+0

なぜプロジェクトファイルでTransformXMLタスクを使用しないのですか?可能な解決策はこちら(https://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859)を参照するか、ここで手動変換を使用してください:http://johan.driessen.se/posts/Applying-MSBuild-Config Visual Studioの拡張機能を使用しないでトランスフォーメーションからany-config-fileへ –

+0

私は、実行時に特別なWebページを介していくつかのweb.config設定を変更するメカニズムをすでに持っているからです。 ASP.Netトレースのオン/オフ)。私は、デバッグをオン/オフに切り替えるのにこのメカニズムを使うこともできると思っていました。 (場合によっては、例外スタックトレースに行番号が必要です。) –

答えて

0

最後に、System.Configuration名前空間の代わりにSystem.Xml名前空間(XmlDocument、XmlElementなど)のクラスを使用して問題を解決しました。

これは問題なく動作します。

関連する問題