私が取り組んでいる古い ASP.NET プロジェクトでは、ボタン付きのユーザー コントロールがあります...
<%@ Control language="C#" AutoEventWireup="True" Codebehind="MyControl.ascx.cs" Inherits="MyNamespace.MyControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<!-- SNIP: Unrelated HTML tags... -->
<asp:button id="btSubmit" OnClick="btSubmit_Click" runat="server" style="FONT-WEIGHT: bold; COLOR: black" tabIndex="32" Text="View"></asp:button>
.NET 4.0 にアップグレードしてから、どのプラットフォームでこれを実行しようとしても、次のエラーが発生します。
コンパイラ エラー メッセージ: CS1061: 'ASP.MyControl_ascx' には 'btSubmit_Click' の定義が含まれておらず、タイプ 'ASP.MyControl_ascx' の最初の引数を受け入れる拡張メソッド 'btSubmit_Click' が見つかりませんでした (using ディレクティブまたはアセンブリ参照?)
...まだコードビハインドで:
// Class is defined as a partial, between MyControl.ascx.cs and MyControl.designer.ascx.cs
public class MyControl : UserControl
{
// This is defined in the designer code...
protected Button btSubmit;
// This is defined in the main code behind...but it IS defined.
protected void btSubmit_Click(object sender, EventArgs e)
{
// SNIP: Functionality that works.
}
}
この問題を解決するために、次のことを試しました。
- マークアップが有効であることの確認
- C# コードにコンパイル エラーがないことを確認します。
- コントロールの Razor タグを再確認して、それ
autoeventwireup
が true でありCodebehind
、Inherits
適切に設定されていることを確認します。 - ボタン コントロールがボタン クリック イベントと衝突していないことを確認しました。
- 提案に従って、デザイン モードでボタンをクリック イベントに再度関連付けました。
また、この Web プロジェクトは、TeamCity を介して Web サーバーにデプロイされています。これは、Visual Studio を使用してローカルで実行すると正しく機能しますが、サーバーでは失敗します。
質問:このコンパイラ エラーの原因は何ですか? このコードは正しく見えます。私はそれに欠陥を検出できません。