web-dev-qa-db-ja.com

奇妙なエラー-CS0012:タイプxが参照されていないアセンブリで定義されています

タイプ 'x'は、参照されていないアセンブリで定義されています。アセンブリ 'abc123'への参照を追加する必要があります。

アセンブリ 'abc123'を参照する.NET 2.0 Webアプリケーションがあります。アセンブリはGACに存在し、それが正しい(同じ)バージョンであることを確認しました。アプリケーションの残りの部分には、1つの.aspxページ以外の問題はありません。問題のページには、ユーザーコントロールを「フィールド」の1つとして表示するリピーターがあります。タイプyのリストをリピーターにバインドすると、次に示すように、ユーザーコントロールにタイプx(yのプロパティ)のリストを渡します。

<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>

ユーザーコントロールのプロパティセットで、タイプxのリストをユーザーコントロールのグリッドビューにバインドします。

奇妙なことに、このレポートは開発用PCでは正常に機能しますが、展開したサーバーでは機能しません。私のPCはWindows XP、IIS6、VS2005です。サーバーは、Windows Server 2003、IIS6です。

私はそれを十分に説明したことを望みます。あなたが提供できる洞察を事前に感謝します。

29
Mike T

私はマイクの同僚で、解決策を考え出しました。

タイプXは彼のアセンブリで定義されています。これはGACでのみです。彼のASP.NET Webアプリケーションには参照がありましたが、このUserControlに対してのみGACからのロードに失敗していました。アプリケーションの残りの部分は期待どおりに機能しました。アセンブリのコピーをbinディレクトリに配置することにより、ロードの失敗を確認し、すべてが機能しました。アセンブリを削除したところ、問題が再発しました。

私たちの解決策は、ASP.NETがGACを指すように、アセンブリセクションのweb.configに手動でエントリを追加することでした。

(コードビハインドではなく)ページで型を参照するときは常に、web.configファイルまたはページディレクティブで定義されたアセンブリ情報が必要です。

<assemblies>
        <add Assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>   
</assemblies>
28
Aaron Daniels

こちら で説明されているように、同様の症状で現れる可能性のあるバグもあります。

回避策は、C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files \ディレクトリ内のすべてを削除することで、デバッグモードでのみ表示されるようです。

4
Tom Lianza

これらのタイプの問題のトラブルシューティングを行う場合、 Fusion Log Viewer は常に非常に役立ちます。

3
Maxam

type xが実際にApp_Codeのクラスである場合、それをダーティ化して再保存すると、Webアプリが再コンパイルして問題を解決することがよくあることがわかりました。

1
Charbarred

まったく同じエラーが発生しましたが、パラメーターとして別のプロジェクトのオブジェクトとして使用されるpublicコンストラクターがクラスにありました。

そのコンストラクターを内部にすることで問題を解決しました。

0
Dan

多くの場合、これはキャッシュされたアセンブリが原因です。この問題を解決する1つの方法は、projまたはconfigファイルで「強い参照」を作成することです。このブログを参照 post

0
Lav G

私にとっては、バージョン管理のプル問題でした。

Visual Studioで、ソリューションエクスプローラーの[参照]を開き、スクロールします。

黄色の警告三角形が付いているものがある場合は、名前を覚えて、削除して、もう一度追加します(または、ReSharperに実行させます)。

同僚が新しいパッケージと参照を追加したときに、プロジェクトをプルした後、何度か私に起こりました。

0
Max Izrin