none
モジュール間で関数参照を行うには? RRS feed

  • 質問

  • VisualStudio2010
    .NetFramework4.0


    aspシステムからのバージョンアップを行うため、ASP.Netの機能調査などを行っています。


    サーバへの資産配布時に、従来の手法を予定していて、ASP.Net Webアプリケーションで開発した
    プロジェクトをコンパイルなしで、原文のまま配布する方法を考えています。


    ASPタグなどの画面作成は良かったのですが、データベース操作などの共通処理をまとめるため、
    Class定義を利用しようとしましたが、原文のままサーバ配置しているためか、インスタンス生成(new)
    の部分が動作しません。

    そこで、モジュール(Module)での共通関数定義を使用する事を考え、コードビハインドファイルからは
    Assemblyディレクティブを指定する事で、関数参照を行うことができましたが、そのModuleから更に
    別のModuleを呼び出す方法が分かりません。

    例えば、[Module-A]をコントローラとして、[Module-B]にDB接続・値チェックなどの関数を作成している
    場合、[Module-A]内のFunctionから[Module-B]内のFunctionを呼び出すようなかんじです。


    パスが通っていないためというのは認識できていますが、どのような記述をすれば実現できるのでしょうか?
    (ModuleおよびFunctionなどは全てPublic指定としています。)

    2011年8月10日 7:07

回答

  • モジュール?クラスですよね?

    仮に VB.NET のモジュールの場合、ASP.NET での使用はお勧めできません。

    App_Code ディレクトリ配下にクラスのソースコードを配置すればいいと思います。

     


    Kazuhiko Kikuchi
    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月10日 10:05
  • 用語の使い方が違うような気がしますが・・・

    「原文」と言うのはソースファイルのこと、「モジュール」と言うのは
    アプリケーションで共通に使うクラスを定義したクラスファイル(C# ま
    たは VB.NET でクラスを定義したソースを格納した .cs または .vb フ
    ァイル)のことで、Web サイトプロジェクトで ASP.NET の(MVC ではな
    い)アプリを作っているのですよね?

    であれば、kazuk さんが言われるように、クラスファイルはすべて App_Code
    フォルダに配置する必要があります。

    > 原文のままサーバ配置しているためか、インスタンス生成(new) の部
    > 分が動作しません。

    とのことですが、そんなことはなくて、サーバー上で App_Code フォルダ
    に配置したソースその他すべてのファイルは、最初にクライアントから要
    求があった時点で自動的にコンパイルされます。

    > そこで、モジュール(Module)での共通関数定義を使用する事を考え、コ
    > ードビハインドファイルからは Assemblyディレクティブを指定する事で、
    > 関数参照を行うことができましたが

    意味が分かりませんが、App_Code フォルダに配置したクラスは、なにも特別
    なことをしなくても、ページから参照できるはずです。

    ただし、App_Code のクラスからページまたはユーザーコントロールクラスを
    参照することはできませんので注意してください。

     

     

    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月11日 13:37
  • 参考になりそうなページを見つけたのでリンクを張っておきます。

    ASP.NET Web プロジェクト内の共有コード フォルダー
    http://msdn.microsoft.com/ja-jp/library/t990ks23%28v=VS.100%29.aspx

    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月12日 14:00
  • kazukさん、SurferOnWwwさん、返信ありがとうございました。

    教えて頂きました情報を元に、いろいろ試してみた結果、やりたかった事が実現できました。

    VB.NETでの経験はありますが、ASP.NETでの開発は初めてで、
    意味不明な質問をしてしまった部分もあり、申し訳ありませんでした。

    今回やりたかった事としては、事前ビルドを行わないまま、配布処理を行いたかったので、
    原文のままサーバ配置といった記述をしていました。

    結果的には、App_Codeフォルダに配置したクラスを参照する事ができました。
    教えて頂く前は、App_Codeと異なるフォルダに配置していたため、Class参照ができず、
    Moduleで作成する方法などを試していました。

    また、IISの設定変更なども行っていなかったため、ASP.NETモジュールのインストール、
    Webアプリケーションの登録などを行う事で、実現できました。

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

    • 回答としてマーク IT246 2011年8月17日 8:36
    2011年8月17日 8:36

すべての返信

  • モジュール?クラスですよね?

    仮に VB.NET のモジュールの場合、ASP.NET での使用はお勧めできません。

    App_Code ディレクトリ配下にクラスのソースコードを配置すればいいと思います。

     


    Kazuhiko Kikuchi
    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月10日 10:05
  • 用語の使い方が違うような気がしますが・・・

    「原文」と言うのはソースファイルのこと、「モジュール」と言うのは
    アプリケーションで共通に使うクラスを定義したクラスファイル(C# ま
    たは VB.NET でクラスを定義したソースを格納した .cs または .vb フ
    ァイル)のことで、Web サイトプロジェクトで ASP.NET の(MVC ではな
    い)アプリを作っているのですよね?

    であれば、kazuk さんが言われるように、クラスファイルはすべて App_Code
    フォルダに配置する必要があります。

    > 原文のままサーバ配置しているためか、インスタンス生成(new) の部
    > 分が動作しません。

    とのことですが、そんなことはなくて、サーバー上で App_Code フォルダ
    に配置したソースその他すべてのファイルは、最初にクライアントから要
    求があった時点で自動的にコンパイルされます。

    > そこで、モジュール(Module)での共通関数定義を使用する事を考え、コ
    > ードビハインドファイルからは Assemblyディレクティブを指定する事で、
    > 関数参照を行うことができましたが

    意味が分かりませんが、App_Code フォルダに配置したクラスは、なにも特別
    なことをしなくても、ページから参照できるはずです。

    ただし、App_Code のクラスからページまたはユーザーコントロールクラスを
    参照することはできませんので注意してください。

     

     

    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月11日 13:37
  • 参考になりそうなページを見つけたのでリンクを張っておきます。

    ASP.NET Web プロジェクト内の共有コード フォルダー
    http://msdn.microsoft.com/ja-jp/library/t990ks23%28v=VS.100%29.aspx

    • 回答としてマーク 山本春海 2011年8月18日 1:04
    2011年8月12日 14:00
  • kazukさん、SurferOnWwwさん、返信ありがとうございました。

    教えて頂きました情報を元に、いろいろ試してみた結果、やりたかった事が実現できました。

    VB.NETでの経験はありますが、ASP.NETでの開発は初めてで、
    意味不明な質問をしてしまった部分もあり、申し訳ありませんでした。

    今回やりたかった事としては、事前ビルドを行わないまま、配布処理を行いたかったので、
    原文のままサーバ配置といった記述をしていました。

    結果的には、App_Codeフォルダに配置したクラスを参照する事ができました。
    教えて頂く前は、App_Codeと異なるフォルダに配置していたため、Class参照ができず、
    Moduleで作成する方法などを試していました。

    また、IISの設定変更なども行っていなかったため、ASP.NETモジュールのインストール、
    Webアプリケーションの登録などを行う事で、実現できました。

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

    • 回答としてマーク IT246 2011年8月17日 8:36
    2011年8月17日 8:36