Visual Studio に aspx/ascx ファイルの .designer ファイルを強制的に再生成するにはどうすればよいですか?
-
09-06-2019 - |
質問
ページまたはコントロールを編集しているときに、ページに配置している新しいコントロールで .designer ファイルが更新されなくなることがあります。何が原因でこれが起こるのかはわかりませんが、Visual Studio に .designer ファイルを強制的に再生成する方法があるかどうか疑問に思っています。Visual Studio 2008 を使用しています
編集: 申し訳ありませんが、すでに試したことに注意する必要がありました:
- すべてのファイルと Visual Studio を閉じて再度開く
- ページ上の runat="server" コントロールに変更を加える
- ページディレクティブの削除と再追加
解決
.aspxファイルを開き、デザインビューとHTMLビューを切り替えてバックを変更すると、コントロールをチェックし、デザイナーファイルに欠落しているものを追加するように促します。
VS2013-15には、 Web アプリケーションへの変換 コマンドの下にある プロジェクト メニュー。VS2013 より前は、このオプションは as(c/p)x ファイルの右クリック コンテキスト メニューで使用できました。これが完了すると、*.Designer.cs ファイルが利用可能になり、デザイン HTML 内のコントロールがコントロールで利用できるようになります。
追伸:デバッグ時にすべてが「再コンパイル」されるわけではないため、これはデバッグ モードでは実行しないでください。
また、.designer.cs ファイルを削除し、同じ名前で空のファイルを再作成することで成功したと報告している人もいます。
他のヒント
まあ、私はそれがあまり好きではありませんが、うまくいく解決策を見つけました。.designer.cs ファイルを削除して、同じ名前の空のファイルを再作成する必要がありました。戻って aspx ファイルを再度保存すると、デザイナー ファイルが再生成されました。
危険な!
私は毎回機能する次の方法を使用します。
- すべてを選択してください コードインフロント (HTML マークアップなど) aspx/ascx ファイルのエディターで。
- カット。
- 保存。
- ペースト。
- 保存。
再コンパイルします。
最近、私も同じ問題を抱えていることに気づきました。Visual Studio 2010 はデザイナー ファイルの更新を拒否していました。
結局のところ、VS は、CodeBehind (DLL) の代わりに CodeFile (ページの実行) を使用するページのデザイナー ファイルを変更しません。これは、VS を何度閉じたり、プロジェクトをリロードしたり、コントロールを再作成したり、ファイルを変更したりしても同様です。VS にデザイナーの再生成を促すものは何もありません。CodeFile ページのデザイナー ファイルは作成されませんが、それが存在する必要があるかのようです。
コードビハインドに変更してページを保存しました。デザイナー ファイルはすぐに更新されました。その後、元に戻しましたが、すべてがまだ金色のままでした。VS 2008 ではデフォルトでこの問題が発生しなかったため、この動作は VS 2010 / .NET 4.0 では新しいようです。
この部分です:
<%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>
CodeFile を CodeBehind に変更し、保存して元に戻します。
別の可能性もあります:.aspx ファイルにエラーがあり、Visual Studio でデザイナーを再生成できない可能性があります。
デザイン ビューに切り替えると、コントロールをレンダリングできないと表示されます。コントロールを修正し (私の場合はプロパティ内の余分な引用符でした)、再コンパイルするとデザイナーが再生成されるはずです。
ここで紹介する解決策のほとんどは、Visual Studio 2013 および場合によっては 2012 を実行している場合には機能しません。おそらく Microsoft は、IDE をより高速にするためにいくつかの最適化を導入し、その結果、コード ジェネレーターがトリガーされるケースの数を減らしたと考えられます。以前は機能していた次のシナリオは機能しなくなりました。
- aspx または ascx ファイルを削除します -- このケースについてはチェックしなくなりました
- すべてのコンテンツを切り取って、aspx または ascx ファイルに再貼り付けします -- 機能しなくなり、参照は変更されません
- Web アプリケーションに変換 -- オプションは使用できなくなりました
- aspx/ascx ファイルの内容を任意に変更する -- 機能しなくなりました (2 を参照)。
解決策は驚くほど簡単ですが、少し面倒です。コード ジェネレーターをトリガーするには、designer.aspx.cs の生成を必要とする何かを変更します。CSS スタイルやテキストの追加など、コードに影響を与えないコンテンツを変更しても、コード ジェネレーターはトリガーされません。参照されているコントロールを変更する必要があります。その方法は次のとおりです。
ascx または aspx でコントロールの ID を変更します
<asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />
に
<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />
ascx.cs または aspx.cs に移動し、「MyLink」へのすべての参照の名前も「theLINK」に変更してください。保存してビルドを実行すれば準備完了です。
私が知っている唯一の方法は、デザイナー ファイルを削除し、Web アプリに変換することです。ただし、これを行うと、通常、そもそもなぜ自動再生成しなかったのかというエラーがポップアップ表示されます。通常は、ページの先頭で宣言されていないコントロール参照です。
「Web アプリケーションへの変換」は機能しませんでした。
design.cs を削除して空の design.cs を貼り付けても機能しませんでした。
しかし、はい、これはうまくいきました:
- すべて選択(Default.aspx)
- カット
- Default.aspx を保存
- ペースト
- Default.aspx を保存
終わり。新しいdesigner.csが生成されました。:)
ということがよくありました コピー/貼り付けによりこの動作が発生しました 私にとって。ほとんどの場合は、サーバー コントロールの ID を編集することで解決できます (文字を追加して削除するだけです)。
また、リピーターなどの内部のコントロールはデザイナー ファイルには表示されないことに注意してください。
もちろん、上記のファイル削除という魔法を実行する必要がある場合もありますが、名前を変更するソリューションはほとんどの場合機能します。
コードを変更したり、「Web アプリケーションに変換」などのコマンドを実行したりせずに、この問題を解決する方法を見つけました。それも簡単です。
私が発見したのは、Visual Studio を再起動すると問題が解決する場合が多いですが、解決しない場合もあることです。このような場合、Visual Studio を閉じてから、 Web プロジェクトの「obj」ディレクトリ内のすべてのコンテンツを削除します。 再び開く前に、それは常にうまくいきました。
(再度開始する場合は、スペースを追加して再度削除し、保存をクリックするとデザイナー ファイルが適切に再生成されます)
(以下は VS2005 での経験に基づくものです。)
デバッグ中に ASPX ページを編集すると、分離コードは新しいクラスで更新されません。したがって、デバッグを停止し、ASPX ページを簡単に編集し (ボタンなどを追加するなど)、[デザイン ビュー] をクリックして、ボタンを削除する必要があります。その後、デザイナー ファイルを更新する必要があります。
VS2008 で別の問題が発生している場合は、私はお手伝いできません。
デザイン ビューで画面を右クリックし、[更新] をクリックします。
もう一つうまくいったのは -
- 手動で削除してから、ファイルシステムにデザイナー ファイルを作成します。
- プロジェクトの編集 ファイル。
- コードを追加してデザイナーを含める
例えば:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
- プロジェクトをリロードする
- デザイン/ビュー モードで (c/p)x ファイルとして開き、保存します。
- デザイナーファイルを確認してください。コードはそこにあります。
VS2013 以降を使用している場合は、コードが "CodeFile" ではなく "CodeBehind" 属性で参照されていることを確認してから、以下の手順を実行してください。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
- 空のデザイナー ページを作成します (または、既に「yourControl.ascx.designer.cs」が存在する場合はクリアします)。
- ascx (または aspx) ですべてのコードをコピーし、削除して保存します。もう一度貼り付けて保存します。
- これでデザイナー ファイルが設定されるはずです。
- デザイナー ファイル内のすべてを選択し、ファイル内のすべてを削除し、空白のままにして保存します。
- ASPX/ASCX ファイル内のすべてを選択し、すべてを切り取り、再度貼り付けます。
- デザイナー ファイルはコードを再生成する必要があります。
私が経験したWATは、ソリューションエクスプローラーでWebサイトフォルダーの右クリックを選択します。
サミール
ここでの長い回答リストに追加するために、VS2010 (SP1) の .aspx ファイルでこの問題に遭遇しました。標準の ASP コントロール (これまでは機能していた) を追加および削除しようとしましたが、最終的にはいずれかのコントロールを削除する必要がありました。 runat=サーバー行 既存のコントロールから削除 (および保存) して、デザイナー ファイルを強制的に再生成します。
私は Visual Studio 2008 で作業していて、何年も同じ問題に遭遇しています。そして、皆さんもそうしていると思うのですが、私も StackOverflow や数十のブログであらゆる「解決策」を試してきました。そして、皆さんも経験したことがあるように、うまくいくこともあれば、うまくいかないこともあります。そしてどうやら、VS2010とVS2012でもまだ問題があるようです。
それでついに、数か月前、もう十分だと判断し、数週間かけて .designer ファイルを生成する「Redesigner」というツールを構築しました。BSD ライセンスの下でオープンソースです, 、ソース コードは SourceForge で入手できます。自由に使用でき、自由に盗むことができ、自由に何でもできます。また、Visual Studio では頻繁に実行できないこと、つまり .designer ファイルを迅速かつ確実に生成します。
これは、.aspx および .ascx ファイルを解析し、必要な反射マジックをすべて実行し、正しい .designer ファイルを出力するスタンドアロンのコマンド ライン ツールです。既存のコードに依存することを避けるために、すべての解析とリフレクションがそれ自体で行われますが、このコードが壊れていることは誰もがよく知っています。これは .NET 3.5 に対して C# で書かれていますが、型宣言以外には System.Web さえも使用しないようにするのが面倒です。 Visual Studio をまったく使用していないか、依存していません.
Redesigner は新しい .designer ファイルを生成できます。そして、それは-verboseオプションを提供するので、物事がうまくいかない場合、「タイプSystem.Exceptionがスローされた」よりもはるかに優れたエラーメッセージが得られるようになります。また、既存の.Designerファイルが壊れたときに通知するために使用できる-verifyオプションがあります。コントロールの欠落、悪いプロパティ宣言、Visual Studioによる読み取り不可、または単にボルキングされています。
私たちは、先月の大部分を渋滞から抜け出すために職場でこれを使用してきました。Redesigner はまだベータ版ですが、その存在を一般の人々と共有する価値があるほど十分に進歩しています。近々、これ用の Visual Studio プラグインを作成する予定です。これにより、右クリックするだけで、以前から望んでいた方法でデザイナー ファイルを検証または再生成できるようになります。ただし、それまでの間は、コマンドラインの使用法は非常に簡単で、多くの悩みを軽減することができます。
ともかく、 今すぐ Redesigner のコピーをダウンロードして、髪の毛を抜くのはやめましょう. 。必ず必要になるわけではありませんが、いざというときにあると嬉しいですよね!
TL;DR;
を編集します Inherits
ASPX ページの属性 @Page
ディレクティブを入力して「保存」をクリックします。デザイナー ファイルを再生成する必要があります。
確認しておいて Inherits
= <名前空間>.<クラス名> および CodeBehind
= <クラス名>.aspx.cs
私はこれをやろうとしていました Sharepoint 2010 プロジェクト (VS 2010 および TFS を使用), 、上記の解決策はどれも私には役に立ちませんでした。 そもそもオプションとしては、 「Webアプリケーションに変換」 VS 2010 で TFS を使用する場合、.ASPX ファイルの右クリック メニューに が表示されません。
この回答は最終的に役に立ちました. 。私のクラスは次のようになりました。
namespace MyProjects.Finance.Pages
{
public partial class FinanceSubmission : WebPartPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
// more code
}
}
と私 @Page
ディレクティブは次のとおりです (わかりやすくするためにここで改行):
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="FinanceSubmission.aspx.cs"
Inherits="MyProjects.Finance.Pages.FinanceSubmission"
MasterPageFile="~masterurl/default.master" %>
最初に変更したのは、 Inherits
に MyProjects.Finance.Pages, 、「保存」をクリックしてから、元に戻します。 MyProjects.Finance.Pages.FinanceSubmission そしてもう一度「保存」をクリックします。そしてワラ!デザイナーページが再生成されました!
これが TFS を使用している誰かに役立つことを願っています。
Visual Studio 内で次の操作を行います。
1) aspx.designer.cs ファイルを削除します。
2)ASPXファイルを右クリックして、[Webアプリケーションに変換]を選択します。
次のようなエラーが表示された場合:
「デザイナー ファイルの生成に失敗しました:メソッドまたはオペレーションは実装されていません。」
Visual Studio を閉じてプロジェクトを再度開き、手順 2 をもう一度実行してください。
design.cs ファイルを削除し、.aspx ファイルを右クリックして [Web アプリケーションに変換] を選択します。タグの形式が正しくないなど、コントロールの宣言に問題がある場合は、エラー メッセージが表示され、Visual Studio がデザイナー ファイルを正常に再生成するには、形式が間違っているタグを修正する必要があります。
私の場合、この時点で、 runat="server" 属性を持つ form タグ内にないボタン コントロールを宣言したことが問題であることがわかりました。
これは IDE のバグです。VS 2003以来見てきました。ただし、解決策は簡単です。
ファイルを保存します。IDE を完全に終了します (プロセスが停止していることを確認してください、タスク マネージャー)。
ソリューションを再度開き、マークアップを変更し、保存します。修理済み。
2つの問題がありました...古い AJAXControlkit - 古い DLL を削除し、ツールボックスから古いコントロールを削除し、新しいバージョンをダウンロードし、ツールボックスをロードし、ページ上に新しいコントロールをドラッグ アンド ドロップしました (「 http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Studio_.NET_2005/Q_24591597.html)
また、ラベル コントロールにもスペルミスがありました (「cssclass」の代わりに「class」を使用していました)。
タ
あなたも私と同じで、古い .ASPX ファイルを新しいプロジェクトに追加するとします。おそらく、ページで使用されているコントロールの一部を忘れることになるでしょう。
その場合は、まず、インストールするファイルが複数ある場合に考えてください。最初に 1 つずつ修正します。
コンパイル時に生成されたエラーを修正します。それらはおそらくすべてのファイルで同じエラーになるでしょう。
次に、デザイナー ファイルがある場合は、挿入されたデザイナー ファイルをすべて削除します。次に、デザイナーファイル以外のコンパイル時に他のエラーがないことを確認します。
最後に、Web プロジェクトを右クリックし、「Web アプリケーションに変換」をクリックします。これにより、必要なデザイナー ファイルが挿入されます。
これらは問題を解決するための絶対的な最善の手順です。
誰も言及していないことの 1 つは、 ページにアクセスしてください. 。存在しないユーザー コントロールを (さまざまな理由で) 含めていたため、デザイナー ファイルの再生成が停止しましたが、ここで提案したことはどれも機能しませんでした。理由は何であれ、Visual Studio ではエラーは発生しませんでした。もちろん、クライアント側のコントロールが再生成されていないために存在しないというエラー以外にはエラーは発生しませんでした。
ASP.Net にエラーを知らせてもらうには、実際にページにアクセスする必要がありました。
これは、ネームスペースを更新し、デザイナー ファイル内のネームスペースを更新しなかった場合にも発生する可能性があります。修理:デザイナー ファイル内の名前空間も更新します。
私にとってうまくいった解決策は次のとおりです。
ページをコピーして同じ部分に貼り付け、最初のページの名前を変更し(任意の名前)、コピーしたページの名前を元のページに変更しました。これでコントロールにアクセスできるようになりました。
ソリューション エクスプローラーで右クリックし、[Web アプリケーションに変換] を選択します。すべてのデザイナー ファイルが再度生成されます。
- カスタム タグを無効なタグ名に置き換えます。それを保存
- 無効なタグ名をカスタム タグ名に戻します。それを保存。次に、*.designer.cs ファイルをチェックアウトして (または、designer.cs をサイレントに変更して)、カスタム タグ コントロールの正しい変数を生成するように求められます。