ストレンジエラー-CS0012:タイプxは、参照されていないアセンブリで定義されています
-
08-07-2019 - |
質問
タイプ '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です。
十分に説明したと思います。ご意見をお寄せいただきありがとうございます。
解決
私はマイクの同僚で、解決策を考え出しました。
タイプXは彼のアセンブリで定義され、GACでのみ定義されます。彼のASP.NET Webアプリケーションには参照がありましたが、このUserControlの場合のみGACからロードできませんでした。残りのアプリケーションは期待どおりに機能しました。 binディレクトリにアセンブリのコピーを配置することにより、ロードの失敗を確認し、すべてが機能しました。アセンブリを削除すると、問題が再発しました。
ソリューションは、アセンブリセクションのweb.configにエントリを手動で追加して、ASP.NETがGACを指すようにすることでした。
ページ(コードビハインドではなく)で型を参照するときは、web.configファイルまたはページディレクティブで定義されたアセンブリ情報が必要なようです。
<assemblies>
<add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>
</assemblies>
他のヒント
こちら。
回避策は、C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ディレクトリ内のすべてを削除することであり、デバッグモードでのみ現れるようです。
これらのタイプの問題のトラブルシューティングを行う場合、 Fusion Logビューアは常に大きな助けとなっています。
type x
が実際に App_Code
のクラスである場合、それをダーティにして再保存すると、多くの場合、Webアプリが強制的に再コンパイルして問題を解決します。
多くの場合、キャッシュされたアセンブリが原因です。この問題を解決する1つの方法は、「強い参照」を作成することです。 projまたはconfigファイル内。このブログを参照投稿
まったく同じエラーが発生しましたが、クラス、つまり別のプロジェクトのオブジェクトとして使用する public コンストラクターがクラスにありました。
このコンストラクターを内部にすることで問題を解決しました。
私にとっては、バージョン管理のプルの問題でした。
Visual Studioで、「参照」を開きます。ソリューションエクスプローラーで、スクロールします。
黄色の警告三角形が付いているものがある場合は、名前を覚えて、削除してから、再度追加します(または、ReSharperにそれを行わせます)。
同僚が新しいパッケージと参照を追加したときにプロジェクトを引っ張った後、私に何度か思い付きました。