none
認識できない要素 'providerOption' です Framework3.5のアプリケーションで RRS feed

  • 質問

  • .NET Framework 3.5 アプリケーションで必要となる構成情報

    system.codedom/compilers/compiler/providerOption 

    がweb.config または machine.config にあると IIS マネージャー、appcmd.exe config で構成エラーになってしまいます。

     

    IIS マネージャーの場合はsystem.codedomの箇所だけが編集できなくなるだけですが、

    appcmd.exe の場合は config コマンドがエラーで使えなくなってしまいます。

    現状、アプリケーションは実行出来ています。appcmd.exeを使っての構成設定が出来ない以外に問題は無さそうです。

     

    なにかサーバーの設定が悪いのか、回避する方法があるのか、このままでアプリケーションの実行に問題はないのか

    不安が募るばかりです。

     

    このエラーにどう対処すればよいでしょうか?

     

     

    2011年3月8日 12:27

すべての返信

  • 「問題は無さそうです」ってそんなにのんきな問題ではない可能性もありますので真剣に調査する事をお勧めします。

    現象としては .NET Framework が壊れてる(or else IIS モジュールが壊れてる)わけで

    壊れる理由は自然に壊れるか、人が壊すか

    自然に壊れるのはハードウェアエラーがなんか出てると思うので部品交換で良いのですが、人が壊すの場合、ネットにつながってるサーバですので誰?の内容によっては単なる管理オペレーションミスから、最悪として侵入改ざんまで考えなければいけません。OSのエラーログにハードウェアエラーが無く、何等かの管理オペレーションにミスがないのであればネットから切り離してセキュリティチェックを実施する事をお勧めします。


    Kazuhiko Kikuchi
    2011年3月8日 20:56
  • %windir%\System32\inetsrv\config\schema\FX_schema.xml に providerOption が宣言されていないのがエラーの直接の原因だと思うのですが。

    皆さんのところはどうですか?

     

    ちなみに私の場合、職場の windows server 2008, 2008 R2, windows 7 pro, 自宅の windows 7 home のどれでも同じエラーが出ます。

     

    webサイトのASP.NETコンパイル時には providerOption が効いているので  sectionHandler は"3.5"のものが使われています。

    ※aspxファイルに ラムダ式を書いてコンパイルが通るか確認(通らないことも確認) 

    2011年3月9日 1:29
  • 回避方法を見つけました。

     

    %windir%\system32\inetsrv\config\schema フォルダに

    <configSchema>
      <sectionSchema name="system.codedom">
      <element name="compilers">
       <collection addElement="compiler" removeElement="remove" clearElement="clear">
        <attribute name="language" type="string" isCombinedKey="true" />
        <attribute name="extension" type="string" isCombinedKey="true" />
        <attribute name="type" type="string" />
        <attribute name="warningLevel" type="int" />
        <attribute name="compilerOptions" type="string" />
        <collection addElement="providerOption">
         <attribute name="name" required="true" isUniqueKey="true" type="string" />
         <attribute name="value" required="true" type="string" />
        </collection>
       </collection>
      </element>
     </sectionSchema>
    </configSchema>
    

     

    と書いたファイルを追加すれば、FX_schema.xml のセクションスキーマを上書き出来るようです。これで、IISマネージャーから system.codedomセクションの編集が可能になります。

    リソースキットによれば、IIS 構成システムはスキーマ情報を使用するが、.NET構成システムはスキーマ情報を使用しない。IISの管理スタックによって管理できるようにスキーマ情報を提供している。だそうです。

     

    さて、回避方法は見つかりましたが今回のエラーが、kazukさんが仰るようにそもそも".NET Framework が壊れてる(or else IIS モジュールが壊れてる)"のかもしれず、 不安は募るばかりです。

    正直にいうと、この件はただの”よく知られた問題”でマイクロソフトからの更新待ちなのかと思っていました。

    しかしWebで検索しても2,3の情報があるだけで、しかも原因や解決には至っていないようなので、このエラーに遭遇する人は少ないようですね。

    インストール、アップデートで何か失敗していたり、あるいは侵入改ざんの可能性も否定できない以上もう少し真剣に調べてみます。

     

    そもそも普通にインストールが成功していれば、IIS マネージャで providerOption で構成エラーは発生しないのでしょうか?

    そこが一番怪しいです。


    • 編集済み Azechi 2011年4月26日 2:04
    2011年3月9日 3:56
  • ソモソモ、.NET Framework はどこから誰がインストールしたんでしょうか。

    Windows Server 2008R2であれば、IIS の役割サービスにあるアプリケーション開発から ASP.NETと.NET拡張性 を選択すれば普通は machine.config はいじる必要さえないはずなんですが。(2008でも一緒のはず)

    私自身は少なくとも 10台以上は Windows Server 2008/2008R2の面倒を見ていますが、 machine.config に手書きが必要だったマシンは一つもありません。


    Kazuhiko Kikuchi
    2011年3月10日 10:26
  • 私の説明が下手だったのか、私がそうとう考え違いをしているか...

     

    inetmgr.exe( IISマネージャー)の構成エディターと appCmd.exe が system.codedom/.../providerOption によってエラーになってしまう。

    これは壊れているのか、何らかの理由でスキーマがアップデートされなかったのか、そもそもアップデートされるものではないのか。

     

    machine.config をいじる必要なんて、私にもありません。

    .NET Framework 3.5 のASP.NETアプリケーションをプリコンパイルせずに動かすには

    v2.0のプロセスで構成情報として system.codedom/compilers/compiler/providerOption で CompilerVersion を v3.5 と指定しなければv3.5としてコンパイルされませんよね。

    そして、その構成情報の指定方法として アプリケーションルートweb.config に記述する方法と、machine.config に記述する方法がある。machine.configに記述した場合、v3.5でコンパイルされるのがそのマシンでの既定の設定になる、ということですよね。

    もうこの時点で理解が間違ってるんでしょうか。

     

    皆さんの Windows Server  2008/2008 R2, Windows 7 では、IISマネージャーの構成エディターで

    providerOption 要素がある system.codedom セクションをエラーなく開くことが出来るんでしょうか?

    2011年3月10日 11:49
  • Azechi さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    英語のサイトですがAzechi さんと同様の事象に関する質問があります。

    asp.net - How do you update FX_schema.xml file in IIS 7? - Stack Overflow
    http://stackoverflow.com/questions/4097365/how-do-you-update-fx-schema-xml-file-in-iis-7

    その質問への回答としては、Web.config ファイルからsystem.codedom の箇所を削除することを勧めるという内容ですが

    it is recommended that you also manually delete the system.codedom section, although this is not required

    Azechi さん自身で今回の回避方法を見つけられているので、もう一つの「何か壊れているのでは」という質問について。

    >さて、回避方法は見つかりましたが今回のエラーが、kazukさんが仰るようにそもそも".NET Framework が壊れてる(or else IIS モジュールが壊れてる)"のかもしれず、 不安は募るばかりです。

    TechNet ライブラリーの「.NET に関する質問 」
    Visual Studio 2008 Beta 2 または Visual Web Developer 2008 Express を使用して新たに ASP.NET Web サイトを構築するとweb.config ファイルに新しいエントリ system.codedom/compilers/compiler/providerOption が追加されるという記述があります。Azechi さんの状況があてはまるかどうかわかりませんが、Web.config ファイルのsystem.codedom に関連した問題についてはMSDN フォーラム ASP.NET もしくはVisual Studio で何か情報が得られそうな気がします。

    参考になれば幸いです。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
    2011年3月11日 5:28
  • どなたか一人でも結構です、

    providerOption要素があるweb.configで

    • InetMgr.exe(IISマネージャー)の構成エディターで system.codedomセクションを開く
    • appCmd.exe list config "対象のパス" 
    やってみて下さい、エラーになりませんか?


    手っ取り早い方法は、
    visual studio(2008/2010どちらでも) で  v3.5 の新規Webサイト(HTTP)を作って IISマネージャーで見てみて下さい。

    自分のところではエラーにならないよ、って情報でも結構です教えて下さい。


    ※星さん、ありがとうございます。
    今回の質問の趣旨は、
    .NET Framework 3.5 で構成情報として使える要素が増えました。IIS マネージャの構成エディタではその要素があるとエラーになる。
    これってこういうもの(対応されてないのが正常)?それとも自分の環境がおかしい?
    というものです。
    provdierOptionを削除してしまったら、 v4 で動かすしかなくなってしまうんじゃないでしょうか。

    2011年3月11日 7:53
  • Windows 7・Server 2008 R2 SP1 で同様のエラーが出ました。

    以上、ご報告まで。

    2011年4月13日 7:49
  • Chukiさん、ありがとうございます。

     

    IISExpress の構成スキーマにも providerOption はありませんでした。

    providerOption に対応した 構成セクションのスキーマはもともと提供されていないようですね。

     

    asp.net アプリケーションの実行には影響のない問題ですが、 IISExpress の場合だと appCmd.exe が使えないと大変不便ですよね。

    上に書いた 構成セクションスキーマの上書きは IISExpress でも同様に  config\schema フォルダにファイルを追加することで可能でした。

    2011年4月26日 2:03