.ASCX ファイルの先頭に次の定義があります。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
そのコントロールでは、分離コード ファイルで宣言したメンバーを参照するために <%= %> ブロックを使用します。コントロールをコンパイルして展開すると、正常に動作します。しかし、Visual Studio では、「{some variable} は現在のコンテキストに存在しません」という多くの設計時エラーが発生します。また、Intellisense も機能しません。UserControl のメンバーに対しては機能しますが、独自に宣言されたメンバーを見つけることができません。他にも問題があります。一般に、生成される ASP.articleview_ascx クラスが何らかの形で MyNameSpace.ArticleView クラスから継承されていないという事実をすべて示しています。
CodeBehind 属性を「CodeFile」に切り替えると、次のことがわかりました。
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
突然 Intellisense が機能し、すべての設計時のエラーが消えます。しかし、ランタイム コンパイルを実行したり、.ASCX.CS ファイルをデプロイしたりしたくないので、CodeFile を使用できません。
CodeBehind ファイル名が正しいこと、および Inherits クラスに適切な名前空間があることなどを確認するなど、簡単なことを確認しました (そして、属性を CodeFile に変更した後に適切に機能するため、それらは正しい場所を指している必要があります。 ...) しかし、何が欠けていますか? CodeBehind 属性を処理できないのはなぜですか?
ありがとう、
スティーブ
更新: 以下のスレッドから - 基本的な質問は、なぜ CodeFile を使用しないのかということでした。回答: ファイルで CodeFile= を使用してデプロイしようとすると、デプロイ後に次のスタック トレースが表示されます (全体が表示されます)。
/_layouts/Pages/ViewPage.aspx.cs' は存在しません。System.Web.UI.Util.CheckVirtualFileExists (VirtualPath virtualPath) で System.Web.UI.TemplateParser.ProcessCodeFile (VirtualPath codeFileVirtualPath) で System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute (文字列 deviceName、文字列名、文字列値、IDictionary parseData )
(これは、/_layouts/Pages/ViewPage.aspx への要求からのものです。ViewPage は、元の例で説明した ArticleView を含む他のいくつかのコントロールを持つページです。たまたま最初に失敗したファイルです。 ViewPage で CodeBehind= を使用すると、CodeFile= で ASCX をインクルードすると、同じように失敗します。) これは、読み込まれた DLL に継承された分離コード クラスが見つからないため、ページ コンパイラが不平を言っているようです。オンデマンド コンパイルを実行するためのファイル。
ここでの問題は、CS ファイルではなく、ASPX/ASCX だけを展開したいということです。この素晴らしい記事のような多くの記事を読んだことで、さまざまな新しい展開モデルを認識していますが、Web アプリケーション プロジェクト (VS2003 から変換されたもので、2005 年の後期採用者であり、WAP モデルは2003 年から切り替えた時点で既に追加されています。) 多くの VS2005/8 プロジェクトで、この Intellisense の問題が現れるまで、CodeBehind= で問題が発生したことはありません... ただし、この場合は役に立ちませんSharePoint に展開していますが、まったく新しいレベルの複雑さが生じています。
以前に CodeFile を使用して展開したことがないため、プリコンパイルを強制するために、ビルド時に VS で設定するはずのオプションが欠落している可能性が非常に高いです。今日と同じように、1 つの分離コード DLL を使用して ASPX/ASCX のセットとしてデプロイできる必要があります。そして、それは今日CodeBehind =で機能しています...最初に言及されたIntellisenseの問題があり、これは私が本当に修正したいものです:)
質問に関連する可能性のあるファイルを特定したら、さらに投稿します...