9

.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の問題があり、これは私が本当に修正したいものです:)

質問に関連する可能性のあるファイルを特定したら、さらに投稿します...

4

6 に答える 6

5

プロジェクトファイルのビルドアクションを確認しましたか?ArticleView.ascx.designer.csのビルドアクションを[なし]に設定して、問題を再現しました。CodeFileなどを使用してコンパイルすることもできます...99%それがあなたの問題だと確信しています。

于 2009-10-15T02:01:41.523 に答える
4

コントロールをコードビハインドにリンクする[your-file].ascx.designer.csファイルがありません。

CitizenBaneの提案と同様に、ファイル(またはフォルダー、またはWebプロジェクト全体)を右クリックして、[アプリケーションに変換]を選択する必要があります。Visual Studioは、サーバーコントロールのascx / aspxファイルを調べて、そのデザイナーファイルを生成します。

私は実際に、はるかに大規模にこれに遭遇しました... C#:WebサイトプロジェクトをWebプロジェクトに変換する方法

答えを確認してください。

于 2009-10-14T14:42:30.323 に答える
4

これは以前私に起こりました。ascx / aspxを右クリックして、[Webアプリケーションに変換]をクリックしてみてください。生成されたコントロールが欠落している可能性があります。コンテキストメニューに表示されない場合は、最初にデザイナーが生成したファイルを削除してください。

于 2009-10-13T18:04:38.493 に答える
3

CodeBehindは.NET2.0で非推奨になりました。<=1.1だけが「CodeBehind」を使用していると思います。あなたが言うように今それは「CodeFile」です。

なぜあなたはあなたのコードをコンパイルしたくないのですか?コンパイルする場合、.csファイルをデプロイする必要はありません...

于 2009-10-02T02:35:33.020 に答える
2

ascx コントロールのコード ビハインドを aspx という名前のページ コード ビハインドとして持っているのはなぜですか? UserControl (ascx) には通常、分離コードがあります。

CodeBehind="ArticleView.ascx.cs" 

あなたがリストしたものの代わりに

CodeBehind="ArticleView.aspx.cs"

ユーザー コントロールの ascx ではなく aspx に注意してください。

それはあなたの問題かもしれません...単純なタイプミスまたはコピーと貼り付けのエラー。いくつかの可能性が思い浮かびます:

  1. System.Web.UI.UserControl の代わりに System.Web.UI.Page から継承するコード ビハインド ファイルを使用して、上記で指定した ascx コントロール (ユーザー コントロール) を使用している可能性があります (これにより、Visual Studio エラーが発生する可能性があります)。
  2. 同じ名前の aspx ページのコード ビハインドを指す UserControl があります。#1 と同様の問題で、Visual Studio が混乱する原因となります。
  3. ファイルの名前は ArticleView.ascx および ArticleView.aspx.cs です。VS は特定の命名規則を想定している可能性があるため、これは Visual Studio を混乱させる可能性があります。

ユーザー コントロール (ascx) の場合、ファイルには次の名前を付ける必要があります。

  • ArticleView.ascx (CodeBehind="ArticleView.ascx.cs" Inherits="[NAMESPACE].ArticleView")
  • ArticleView.ascx.cs (System.Web.UI.UserControl から継承)
  • ArticleView.ascx.designer.cs

Web From (aspx) の場合、ファイルには次の名前を付ける必要があります。

  • ArticlePage.aspx (CodeBehind="ArticlePage.aspx.cs" Inherits="[NAMESPACE].ArticlePage")
  • ArticlePage.aspx.cs (System.Web.UI.Page から継承)
  • ArticlePage.aspx.designer.cs
于 2009-10-15T00:57:50.753 に答える
1

これは、Web アプリケーション プロジェクトを .net 4.0 にアップグレードした後、VS2010 で発生しました。

答えは、web.config の system.web/compilation セクションに targetFramework="4.0" が設定されていることを確認することでした。

すなわち

<system.web>
    <compilation debug="true" targetFramework="4.0">
</system.web>
于 2012-01-12T08:59:52.297 に答える