奇怪错误 - CS0012:类型x在未引用的程序集中定义

问题描述 投票:29回答:7

类型“x”在未引用的程序集中定义。您必须添加对程序集“abc123”的引用。

我有一个.NET 2.0 Web应用程序,引用我的程序集'abc123'。该程序集存在于GAC中,我已经验证它是正确的(相同)版本。除了一个.aspx页面之外,其余的应用程序都没有问题。有问题的页面有一个转发器,它将用户控件显示为其“字段”之一。在将类型y的列表绑定到转发器时,我向用户控件传递类型x的列表(y的属性),如下所示:

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

在用户控件的属性集上,我将类型x的列表绑定到用户控件中的gridview。

需要注意的一件奇怪的事情是,这个报告在我的开发PC上工作正常,但在我部署之后在任何服务器上都没有。我的电脑是Windows XP,IIS6,VS2005。服务器是Windows Server 2003,IIS6。

我希望我解释得那么好。提前感谢您提供的任何见解。

wpf user-controls .net-2.0 assemblies repeater
7个回答
28
投票

我是Mike的同事,我们制定了一个解决方案。

类型X在其程序集中定义,仅在GAC中定义。尽管他的ASP.NET Web应用程序确实有一个引用,但它无法仅为此UserControl从GAC加载。应用程序的其余部分按预期工作。我们通过将程序集的副本放在bin目录中来确认加载失败,一切正常。我们删除了组件,问题又回来了。

我们的解决方案是手动将条目添加到程序集部分的web.config中,以将ASP.NET指向GAC。

看起来只要您在页面中引用类型(而不是代码隐藏),就需要在web.config文件或page指令中定义的程序集信息。

<assemblies>
        <add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>   
</assemblies>

4
投票

还有一个可以表现出类似症状的错误,描述了here

解决方法是删除C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \目录中的所有内容,它似乎只在调试模式下显示。


3
投票

在解决这些类型的问题时,Fusion Log Viewer一直都是一个很好的帮助。


1
投票

我发现如果type x实际上是你的App_Code中的一个类,弄脏它并重新保存通常会迫使web应用程序重新编译并解决问题。


0
投票

通常,这是因为缓存的程序集。解决此问题的一种方法是在proj或配置文件中创建“强引用”。请参阅此博客post


0
投票

我有完全相同的错误,但我在我的类中有一个公共构造函数,用作参数,来自另一个项目的对象。

我通过使构造函数内部解决了这个问题。


0
投票

对我来说这是一个版本控制拉问题。

在Visual Studio中,在解决方案资源管理器中打开“引用”,然后滚动它。

如果任何东西上有黄色警告三角形,请记住名称,将其删除,然后重新添加(或让ReSharper为您执行此操作)。

当一个同事添加了一个新的包和引用时,拉了一个项目后发生了好几次。

© www.soinside.com 2019 - 2024. All rights reserved.