5

そのため、CodeFile参照をCodeBehindにするのにいくつかの問題があるようです。質問する前に、私はVisual Studioを持っておらず、Windowsを使用していません。コードは、アクセスできるIISサーバーでホストされています。

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeFile="anon.cs" %>

このコードは完全に機能しますが、次のように変更すると次のようになります。

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeBehind="anon.cs" %>

ページはエラーを返します:

Parser Error Message: Could not load type 'corn.cheese.pies.CasLogin'.
4

1 に答える 1

14

CodeFile と CodeBehind の違いを理解していますか? たとえば、 CodeFile vs CodeBehind (受け入れられた回答は無視しますが、両方のリンクは無効です) または違いについてのこの記事を参照してください。

手短に:

ファイルは、Web サイトのフォルダーに展開CodeBehindされるアセンブリにコンパイルされると見なされます。binASP.NET エンジンは、aspxファイルをロードするときに、Inheritsディレクティブを使用してそのクラスを見つけようとします。このCodeBehindファイルは主にコンパイル (および「ソースの表示」などのツール) を支援するために使用されますが、作業はコンパイル時に行われます。

ファイルは、CodeFile実行時に必要に応じて ASP.NET によって検索およびコンパイルされます。Web サイトを「プリコンパイル」して古いモデルに戻すことができます。これは、ソース コードをすべての Web サイトに展開したくない場合に便利です。ただし、既定でCodeFileは、ファイルは.csサイトに展開されるファイルであり、クラスは ASP.NET 一時ストレージ フォルダーに生成されます。(技術的な観点から:CodeFileページはpartial class定義であり、クラスのカスタム コード ビハインド部分のみが実際に C# ファイルにデプロイされます。これがCodeFile、C# コンパイラが最初に部分クラスを実行できなかったため、最初は存在しなかった理由です。)

CodeFileからに変更するCodeBehindことで、ASP.NET に C# ファイルの存在を無視し、コンパイル済みアセンブリでのみ検索するように指示します。次に、ASP.NET は、コンパイルされたアセンブリに、検索するように指示したクラスが実際には含まれていないことを伝えています。

于 2012-05-02T16:08:58.190 に答える