ストレンジエラー-CS0012:タイプxは、参照されていないアセンブリで定義されています

StackOverflow https://stackoverflow.com/questions/284433

質問

タイプ '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にそれを行わせます)。

同僚が新しいパッケージと参照を追加したときにプロジェクトを引っ張った後、私に何度か思い付きました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top