none
突然、「パーサー エラー メッセージ: 型 'Global_asax' を読み込めませんでした。」が出てWebアプリケーションが起動しなくなりました。 RRS feed

  • 質問

  • Webアプリケーションを開発しています。

    数日前にデバッグ実行時に以下のメッセージが出てWebアプリケーションが起動しなくなりました。

    原因、対処法が分からず困っています。

    開発環境:Visual Stadio 2017

    言語:VB

    ターゲットCPU:AnyCPU

    IISexspress:64ビット

    色々と検索して、以下のことを実行したり確認してみましたが、原因が分からないし、事象も解消しません。

    (1)ソリューションをクリーンしてビルドしなおす。

       (クリーンもビルドもVisual Stadioで行っています。)

    (2)ildasmでアプリケーションのDLLを見てみましたが、Global.asaxは存在するようです。

    そのほか、PCの再起動や、ソリューションを丸ごと別のフォルダにコピーしてそれをVisual Stadioで

    開いて実行してみる、なども試しましたが、解決しません。

    解決方法をご存じの方がいらっしゃいましたら、ご教示のほどお願いいたします。

    ーーーーーーーーーー以下、エラーメッセージーーーーーーーーーーーーーーーーーーーーーーーーー

    '/' アプリケーションでサーバー エラーが発生しました。

    パーサー エラー

    説明: この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソース ファイルに変更を加えてください。

    パーサー エラー メッセージ: 型 'Global_asax' を読み込めませんでした。

    ソース エラー:
    行 1:  <%@ Application CodeBehind="Global.asax.vb" Inherits="Global_asax" Language="vb" %>
    

    ソース ファイル: /global.asax    行: 1


    バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.7.3429.0

    2019年10月26日 7:40

回答

  • > <%@ Application CodeBehind="Global.asax.vb" Inherits="Global_asax" Language="vb" %>

    上の Global_asax を自分で書き換えたりしてませんか?

    Inherits とはオブジェクト指向言語の「継承」のことなのですが、何を継承しなければならないかと言うと、CodeBehind の Global.asax.vb に定義されているクラスです。実際どうなっているのか調べてみてください。

    質問者さんがどうのようにしてプロジェクトを作ったか分かりませんが(書いてないので)、Visual Studio のテンプレートでプロジェクトを自動生成してとすると Global_asax とはならないはずです。

    例えば、VS2015 のテンプレートで作った MVC5 アプリの場合、Global.asax.vb には下の画像のように System.Web.HttpApplication を継承した MvcApplication クラスが定義されます。

    Global.asax は下の画像のように、上の Global.asax.vb に定義されている MvcApplication クラスを継承します。Mvc5AppVB は名前空間名(=プロジェクト名)です。

    質問者さんが作っているかのが Web Forms なのか MVC なのかその他なのか不明ですが(書いてないので)、上に述べた継承関係は同じになるはずです。

    • 回答としてマーク みどり猫 2019年11月4日 1:08
    2019年10月28日 1:12
    1. その Web アプリケーションは、どのテンプレートで作成されたものか覚えておられますか?
    2. ルート名前空間は何に設定されていますか?

     

    上記 2 点を確認してみてください。

    .NET Framework バージョンにもよりますが、たとえば
    [ASP.NET Web アプリケーション] - [Web フォーム]
    を選択した場合に Global_asax が作成されますが、初期状態では
    『Inherits="ルート名前空間.Global_asax"』と記入されます。

    それが 『Inherits="Global_asax"』になっているという事は、
    誰かが意図的にルート名前空間を削除したことで、デザイナが自動的に
    Global.asax の名前空間も連動して削除されてしまっている可能性が伺えます。

    この場合、後からルート名前空間を元の値または別の値に復元したとしても、
    コードが復元されず『Inherits="Global_asax"』のままになりえます。そうすると
    ビルドは成功しても、Web アプリケーションとしての実行には失敗することになるでしょう。

    プロジェクトの「ルート名前空間」を確認したうえで、それが
    "Global.asax" や 各種.aspx を始めとするファイル群が指し示す名前空間と
    違っていないかどうか、あらためて確認してみてください。


    2019年10月28日 2:33

すべての返信

  • > <%@ Application CodeBehind="Global.asax.vb" Inherits="Global_asax" Language="vb" %>

    上の Global_asax を自分で書き換えたりしてませんか?

    Inherits とはオブジェクト指向言語の「継承」のことなのですが、何を継承しなければならないかと言うと、CodeBehind の Global.asax.vb に定義されているクラスです。実際どうなっているのか調べてみてください。

    質問者さんがどうのようにしてプロジェクトを作ったか分かりませんが(書いてないので)、Visual Studio のテンプレートでプロジェクトを自動生成してとすると Global_asax とはならないはずです。

    例えば、VS2015 のテンプレートで作った MVC5 アプリの場合、Global.asax.vb には下の画像のように System.Web.HttpApplication を継承した MvcApplication クラスが定義されます。

    Global.asax は下の画像のように、上の Global.asax.vb に定義されている MvcApplication クラスを継承します。Mvc5AppVB は名前空間名(=プロジェクト名)です。

    質問者さんが作っているかのが Web Forms なのか MVC なのかその他なのか不明ですが(書いてないので)、上に述べた継承関係は同じになるはずです。

    • 回答としてマーク みどり猫 2019年11月4日 1:08
    2019年10月28日 1:12
  • 適切なフォーラムを選んで投稿するようお願いします。今回「Visual Studio 共通 フォーラム」に投稿されていますが、質問内容からは「ASP.NET」のフォーラムの方が適切と思います。

    Microsoft の管理者の方>

    フォーラムの移動をお願いします。
    2019年10月28日 1:26
    1. その Web アプリケーションは、どのテンプレートで作成されたものか覚えておられますか?
    2. ルート名前空間は何に設定されていますか?

     

    上記 2 点を確認してみてください。

    .NET Framework バージョンにもよりますが、たとえば
    [ASP.NET Web アプリケーション] - [Web フォーム]
    を選択した場合に Global_asax が作成されますが、初期状態では
    『Inherits="ルート名前空間.Global_asax"』と記入されます。

    それが 『Inherits="Global_asax"』になっているという事は、
    誰かが意図的にルート名前空間を削除したことで、デザイナが自動的に
    Global.asax の名前空間も連動して削除されてしまっている可能性が伺えます。

    この場合、後からルート名前空間を元の値または別の値に復元したとしても、
    コードが復元されず『Inherits="Global_asax"』のままになりえます。そうすると
    ビルドは成功しても、Web アプリケーションとしての実行には失敗することになるでしょう。

    プロジェクトの「ルート名前空間」を確認したうえで、それが
    "Global.asax" や 各種.aspx を始めとするファイル群が指し示す名前空間と
    違っていないかどうか、あらためて確認してみてください。


    2019年10月28日 2:33
  • SurferOnWwwさん、ご確認ありがとうございます。

    みどり猫さん、こんにちは。フォーラム オペレーターのHarukaです。

    ご質問内容から以下フォーラムのほうが投稿場所として適切かと思いましたので、
    質問の移動をさせていただきました。
    .Net Framework > ASP.NET
    移動後はスレッドの URL が変わりますが以前の URL でもリダイレクトされて、
    以前のページが表示されますのでご安心ください。

    どうぞよろしくお願いします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年10月31日 0:57
    モデレータ
  • みどり猫さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    asp.netアプリケーションに関する詳細情報を教えてください。 現在使用しているバージョンはどれですか。

    通常、asp.net global.asaxファイルにはフロントエンドページはありません。 
    global.asaxという名前のWebフォームページを作成しますか。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年10月31日 7:12
    モデレータ
  • 「フロントエンドページがない」というのはどういう意味ですか? global.asax のことでしたら存在しているはずなのですが。
    2019年10月31日 7:26
  • ご丁寧に回答いただきありがとうございました。

    Global.asax.vbにルート名前空間を追加したところ、再び動くようになりました。

    魔界の仮面弁士様も記載されていますが、色々試しているときにルート名前空間が削除されているのに気づき、再び入力した記憶があります。(削除した記憶はないのですが、、、。一人で開発しているので削除したのは自分だと思うのですが)

    開発は遅れてしまいましたが、これをきっかけに新たな知識を得ることができました。

    本当にありがとうございました。

    2019年11月4日 1:02
  • ご丁寧は回答ありがとうございました。

    まさにその通りでした。

    ルート名前空間がなくなっているのに気づき、再度入力したのですが、それでは元に戻らなかったのですね。

    削除した記憶はないのですが、一人で開発しているのでルート名前空間を削除したのは自分だと思います。

    (ただ、アセンブリ情報のところは広げてみたりしたので、そのときに誤って削除したのだと思います)

    これをきっかけに新たな知識を得ることができました。

    本当にありがとうございました。

    2019年11月4日 1:06
  • 不適切な場所に投稿してしまい申し訳ありません。

    2019年11月4日 1:08