ASP.NET UpdatePanel库参考错误

7
我在使用VS 2010开发过程中遇到了一个问题,它似乎失去了在开发过程中加载UpdatePanel的能力,这让我很疯狂。我正在使用VS2010和构建一个.NET 3.5的用户控件,针对DNN 5.x进行目标设置。
我创建了一个控件,用于在DNN网站上使用,它利用了UpdatePanel。当我通过FTP连接到网站并在其上进行开发时,一切都正常工作。我决定将开发移动到本地副本的DNN,并为控件创建一个Web应用程序项目。起初一切都正常。但是在几次构建后,我开始收到以下错误:
“命名空间'System.Web.UI.WebControls.WebParts'中不存在类型或命名空间名称“UpdateProgress”(您是否缺少程序集引用?)”
“命名空间“System.Web.UI.WebControls.WebParts”中不存在类型或命名空间名称“UpdatePanel”(您是否缺少程序集引用?)”
我想我在途中弄错了什么,搞乱了对库的引用,所以我卸载了所有内容并重新加载了库引用。我继续收到错误消息,无法编译控件。最后,我决定重新做整个项目并导入已经编写的代码。一切都正常工作,直到几次构建后,同样的错误再次出现。
我遵循了所有相同的步骤,卸载引用,重新加载它们,最后删除项目。每次我创建一个新项目,并将完全相同的代码复制到.ascx文件中,它们都可以正常工作...几次构建之后。昨晚,我编译了库并测试了更改。一切都很好,所以我关闭了项目并关闭了计算机。今天早上打开计算机,就收到了构建错误。就像我在电脑里有一个定时炸弹,会关闭这些东西一样。
你有什么想法,可能是我错过了什么导致这个问题?我不知道为什么库会像这样闪烁。我还没有在本地机器上的任何其他项目中遇到过这种问题,我真的不想再通过FTP连接到网站进行开发。

在添加引用后,尝试右键单击引用,选择属性并将“Copy-local”设置为True。 - Tchami
@Tchami,刚试了一下(我之前没想到过的东西),但还是出现了相同的错误。 - Jim D'Angelo
1
也许将 System.Web.Extensions 的控件添加到 Web 配置文件中可能会起作用。请检查一个 asp.net 3.5 项目的 web.config 文件。 - user67754
@reverseblade,我检查了web.config(用于DNN网站),甚至将原始的web.config添加回控件项目,只是为了看看它是否会重新引用库。 - Jim D'Angelo
你是如何添加引用的?你的机器上是否安装了ASP.NET Ajax? - Tchami
@Tchami,我正在创建一个Web应用程序,并自动引用System.Web.Extensions(适用于.NET 3.5)。已安装ASP.NET Ajax(适用于.NET 2.0和3.5)。我尝试手动引用DLL和Add Reference -> .NET -> System.Web.Extentions中的命名空间。我可以很好地构建项目并测试更新面板。但是在几次构建后它就会突然关闭。 - Jim D'Angelo
3个回答

15

我的解决方案也陷入了这种奇怪的状态。这发生在使用AnkhSVN获取最新版本后,在web-config中编辑冲突之后。错误仅出现在我在Visual Studio中打开的页面上。它说无法在System.Web.UI中找到UpdatePanel或UpdateProgress,这没有意义,因为我在其他页面中使用了这些控件。

解决方法:
只需从工具箱中拖放一个UpdatePanel到引发错误的页面上。清理和重新构建即可。您只需要删除刚刚添加的UpdatePanel。
我相信这样做可以重新连接解决方案中我看不到的东西。


7
我做这个的时候,.designer.cs文件中的System.Web.UI.WebControls.UpdatePanel变成了System.Web.UI.UpdatePanel(这修复了它)。我认为这可能与在另一台机器上编辑文件有关。稍后我会进一步查看。谢谢! - xr280xr
1
我不记得为什么我没有将这个标记为答案(自那以后我已经做了很多次)。我将取消我的答案并接受这个答案,因为它在过去确实对我起作用了。(很抱歉让你等那么久!)=) - Jim D'Angelo
1
这只是一个临时解决方案。无论我如何编辑设计文件,Visual Studio都会一遍又一遍地将其改回*WebControls.*。 - lapsus
@lapsus -1,真的吗?从其他点赞的情况来看,这个解决方案显然是有效的。也许你的解决方案文件或从你的存储库获取最新版本的过程中出现了问题或损坏?我的修复方法并不要求你编辑“设计师文件”(例如Somepage.aspx.design)。它要求你将控件从控件工具箱拖放到标记所在的页面本身上(例如Somepage.aspx),然后清理和重新构建整个解决方案。尝试关闭除一个asxp标记文件之外的所有打开的文件,并执行此操作。我希望它能起作用。如果问题仍然存在,那么我建议创建一个新的解决方案。 - MikeTeeVee
就像我所说的那样,它确实解决了问题,但仅仅是暂时性的。这种情况在这里的许多开发人员使用不同的开发机器时都会出现。这些解决方案并没有从2.x迁移到4.x。这些是崭新的SharePoint 2013解决方案。这与清理和重建或存储库无关。如果只有那么简单就好了。 - lapsus
显示剩余2条评论

3
如果您检查新的web.config文件,您会发现添加了以下内容(或类似内容)。我能够在没有其他更改的情况下添加这个编译器指令并成功编译。ScriptManager位于旧版本的扩展.dll中,需要绑定。似乎创建一个新网站将添加编译器指令,但升级则不会。
<!--/system.webServer  positional notes-->;

<runtime>
    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

<!-- /configuration -->

2
谢谢你的回复!实际上,我发现这是因为我直接将DNN控件放在DesktopModules文件夹中(在与其余安装不同的项目中),所以在测试网站时不能使用完整的web.config。测试时我将它重命名为web.config.old。如果在关闭Visual Studio之前不将其改回原名,再次启动项目时就会失去对程序集的所有引用。感谢你的想法! - Jim D'Angelo
你提到 System.Web.Extensions 库,让我将其引用添加到我的项目中,现在它可以识别 System.Web.UI.UpdatePanel 而不需要进入 UI 或更改框架版本。 - T0t3sMcG0t3s

1
在将框架更新到4.0后,我在所有旧项目中都遇到了同样的问题。我尝试了很多次研究为什么会出现这种情况,但没有找到有效的解决方法。我的团队花了一年时间手动更新designer.vb文件,以便在更改ASPX时正确引用UpdatePanel。
问题实际上出现在项目文件对AjaxControlToolkit的引用上。vbproj文件中的引用是特定于3.5版本的。因此,仅更新DLL并不会更新引用。解决方案是删除AjaxControlToolkit引用,保存项目,然后再添加对AjaxControlToolkit.dll的引用。
如果您在文本编辑器中打开项目文件,可能会看到类似于以下内容:
<Reference Include="AjaxControlToolkit, Version=3.5.60623.0, Culture=neutral, 
    PublicKeyToken=28f01b0e84b6d53e, processorArchitecture=MSIL>
    <SpecificVersion>False</SpecificVersion>
    <HintPath>bin\AjaxControlToolkit.dll</HintPath>
</Reference>

如果您做得没问题,它应该是这样的:
<Reference Include="AjaxControlToolkit">
    <HintPath>bin\AjaxControlToolkit.dll</HintPath>
</Reference>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接