首页 文章

如何强制Visual Studio重新生成aspx / ascx文件的.designer文件?

提问于
浏览
377

有时当我正在编辑页面或控制时,.designer文件停止使用我正在页面上放置的新控件进行更新 . 我不确定是什么导致这种情况发生,但我想知道是否有任何方法迫使Visual Studio重新生成.designer文件 . 我正在使用Visual Studio 2008

EDIT: 对不起,我应该注意到我已经尝试过了:

  • 关闭并重新打开所有文件和Visual Studio

  • 对页面上的runat = "server"控件进行更改

  • 删除并重新添加页面指令

30 回答

  • 1

    我使用以下每次都有效的方法:

    • 在aspx / ascx文件的编辑器中选择所有代码(html标记等) .

    • 切 .

    • 保存 .

    • 粘贴 .

    • 保存 .

    重新编译 .

  • 2

    我遇到了这个问题,对于我来说,我的一个控件中的ID值中有一个空格 . 我把空间拿出来,设计师文件重新生成 .

  • 5

    我知道的唯一方法是删除设计器文件,然后转换为Web应用程序 . 但是当你这样做时,它通常会弹出错误,为什么它首先不会自动重新生成,它通常是一个未在页面头部声明的控件引用 .

  • 6

    这是IDE中的一个错误;我从VS 2003开始就看过了 . 虽然这个解决方案很简单 .

    保存文件 . 完全退出IDE(确保进程停止,任务mgr . )

    重新打开解决方案,弄脏标记,保存 . 固定 .

  • 1

    我遇到了两个问题......过时的AJAXControlkit - 删除旧的dll,从工具箱中删除旧控件,下载新版本,加载工具箱,以及在页面上拖放新控件(请参阅http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Studio_.NET_2005/Q_24591597.html

    我的标签控件中也有拼写错误(使用'class'而不是'cssclass') .

  • 2

    好吧,我发现了一个有效的解决方案,尽管我并不喜欢它 . 我不得不删除.designer.cs文件,然后重新创建一个具有相同名称的空文件 . 当我重新进入并再次保存aspx文件时,重新生成了设计器文件 .

    狡猾的!

  • 36

    转换为Web应用程序对我不起作用 .

    删除designer.cs并粘贴一个空白的designer.cs也不起作用 .

    但是这是有效的:

    • 全选(Default.aspx)

    • 保存Default.aspx

    • 粘贴

    • 保存Default.aspx

    完成 . 生成了新的designer.cs . :)

  • 2

    我找到了一种解决这个问题的方法,无需更改任何代码或运行“转换为Web应用程序”等命令 - 而且它也很简单!

    我发现重新启动Visual Studio通常可以解决问题,但有时却没有 . 在这些情况下,如果在再次打开它之前关闭Visual Studio然后 delete all content in the "obj" directory for the web project ,它总是对我有效 .

    (再次启动时,您只需添加一个空格并再次将其删除,然后单击“保存”以正确重新生成设计器文件)

  • 3

    我的经验是,如果你想在this文章中做,如上所述 .

    您的标记文件(aspx / ascx)必须包含CodeBehind = "MyPage.aspx.cs"属性,否则它将无法工作 . 我在博客上写了一篇文章here .

  • 2

    这是我经验丰富的,请在解决方案资源管理器中右键单击选择网站文件夹,为所有aspx文件选择转换为Web应用程序,将生成设计器文件 .

    萨米尔

  • 21

    我最近看到我遇到了同样的问题 . Visual Studio 2010拒绝更新设计器文件 .

    事实证明,VS不会修改使用CodeFile(运行页面)而不是CodeBehind(DLL)的页面的设计器文件 . 无论您关闭VS多少次,重新加载项目,重新创建控件或修改文件,都是如此 . 什么都不会促使VS重新设计设计师 . 就好像它没有为CodeFile页面创建设计器文件,但确实需要它在那里 .

    我将其更改为CodeBehind并保存页面 . 设计器文件立即更新 . 然后我就把它改回来了,一切都还是金色的 . 这种行为似乎是VS 2010 / .NET 4.0的新特性,因为VS 2008默认情况下不会受此影响 .

    这是这部分:

    <%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>
    

    将CodeFile更改为CodeBehind,保存,然后还原 .

  • 0

    删除designer.cs文件,然后右键单击.aspx文件并选择“转换为Web应用程序” . 如果您的控件声明存在问题,例如标签格式不正确,您将收到错误消息,并且您需要在Visual Studio成功重新生成设计器文件之前纠正格式错误的标记 .

    就我而言,在这一点上,我发现问题是我已经声明了一个按钮控件,它不在带有runat =“server”属性的表单标签内 .

  • 8
    • 在设计器文件中选择全部并删除文件中的所有内容,将其留空然后保存

    • 在ASPX / ASCX文件中选择全部并剪切所有内容然后重新粘贴

    • 设计器文件应该重新生成代码

  • 0

    如果打开.aspx文件并在设计视图和html视图之间切换,则会提示VS检查控件并添加设计器文件中缺少的任何内容 .

    在VS2013-15中, Project 菜单下有一个 Convert to Web Application 命令 . 在VS2013之前,右键单击上下文菜单中的(c / p)x文件可以使用此选项 . 完成后,您应该会看到现在有一个* .Designer.cs文件,并且您可以使用Design HTML中的控件进行控制 .

    PS:这不应该在调试模式下完成,因为在调试时不会“重新编译”所有内容 .

    有些人还通过删除.designer.cs文件然后重新创建一个具有相同名称的空文件来报告成功 .

  • 1

    没有人提到的一件事是 visit the page . 我让我的设计器文件停止重新生成,因为我在Visual Studio中包含了一个没有任何错误的用户控件 - 除了那个抱怨我的客户端控件没有被重新生成的事实 .

    实际上访问该页面让ASP.Net告诉我错误 .

  • 2

    在Visual Studio中:

    1)删除您的aspx.designer.cs文件

    2)右键单击您的aspx文件并选择“转换为Web应用程序”这应该添加aspx.designer.cs并更新 .

    如果您收到错误消息:

    “设计器文件的生成失败:未实现方法或操作 . ”

    尝试关闭Visual Studio,然后重新打开项目并再次执行第二步

    How to generate aspx.designer.cs in visual studio?

  • 3

    只是在这里添加一长串答案 - 我在VS2010(SP1)中遇到了一个带有.aspx文件的问题 . 我尝试添加和删除标准ASP控件(过去一直有效),但最后,我不得不从现有控件(并保存)中删除其中一个 runat=server lines 来强制重新设计设计器文件 .

  • 2
    • 使用无效的标记名称替换您的自定义标记 . 保存

    • 将无效标记名称恢复为自定义标记名称 . 保存 . 然后,系统将提示您签出* .designer.cs文件(或者静默修改designer.cs)并生成自定义标记控件的正确变量 .

  • 1

    如果您运行的是Visual Studio 2013,可能还有2012年,那么大多数解决方案都不起作用.Microsoft可能会引入一些优化来使IDE变得更加快速,因此它们减少了触发代码生成器的案例数量 . 过去工作的以下方案不再适用:

    • 删除aspx或ascx文件 - 不再检查此情况

    • 剪切所有内容并重新加载到aspx或ascx文件中 - 不再有效,参考文献没有变化

    • 转换为Web应用程序 - 选项不再可用

    • 在aspx / ascx文件上随意更改内容 - 不再有效(参见2) .

    解决方案非常简单,但有点麻烦 . 为了触发代码生成器,请更改需要生成designer.aspx.cs的内容 . 更改不影响代码的内容(例如CSS样式或添加文本)将不会触发代码生成器 . 您必须更改引用的控件 . 这是怎么做的:

    在ascx或aspx中更改控件的ID

    <asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />
    

    <asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />
    

    转到ascx.cs或aspx.cs并确保将所有对“MyLink”的引用重命名为“theLINK” . 保存并做好构建,你应该好好去 .

  • 1

    还有另一种可能性:.aspx文件中可能存在错误,该错误不允许Visual Studio重新生成设计器 .

    如果切换到“设计视图”,则会将控件显示为无法呈现 . 修复控件(在我的情况下,它是属性中的额外引用)并重新编译应该重新生成设计器 .

  • 4

    在设计视图中,右键单击屏幕并点击刷新 .

  • 358

    在解决方案资源管理器中右键单击并选择转换为Web应用程序 . 它将再次生成所有设计器文件 .

  • 4

    如果您使用的是VS2013或更高版本,请确保使用属性“CodeBehind”引用的代码而不是“CodeFile”,然后执行以下步骤

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
    
    • 创建空的设计器页面(如果它已经存在,则清除它"yourControl.ascx.designer.cs")

    • 在ascx(或aspx)中复制所有代码,删除它,然后保存 . 重新过去,然后保存 .

    • 现在应该填充设计器文件 .

  • 84

    另一件有用的事情是 -

    • 手动删除然后在文件系统中创建设计器文件 .

    • Edit Project 文件 .

    • 添加代码以包含设计器
      例如: <Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>

    • 重新加载项目

    • 在设计/查看模式下打开(c / p)x文件并保存 .

    • 检查设计器文件 . 代码将在那里 .

  • 59

    我经常为我找到 copy/pasting caused this behaviour . 大多数情况可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后删除它) .

    还要记住,在设计器文件中看不到像Repeater这样的内容 .

    是的,有些情况下您需要执行上面列出的删除文件魔法 - 但名称更改解决方案大部分时间都可以使用 .

  • 76

    如果您像我一样,并将旧的.ASPX文件添加到更新的项目中 . 您可能会忘记页面上使用的一些控件 .

    如果是这样,首先,如果您正在安装多个文件;首先修复一个 .

    编译时,修复生成的错误 . 它们可能在所有文件中都是相同的错误 .

    接下来,如果您有Designer文件,请删除所有插入的设计器文件 . 接下来,确保编译时没有任何其他错误,而不是设计器文件 .

    最后右键单击您的Web项目,然后单击“转换为Web应用程序” . 这将插入您需要的设计器文件 .

    这些是解决问题的绝对最佳步骤 .

  • 14

    我在Visual Studio 2008中工作多年来遇到了同样的问题 . 我在StackOverflow和几十个博客上尝试过每一个“解决方案”,就像我相信你们所有人一样 . 有时他们会工作,有时候他们不工作,就像我相信你们所有人都遇到过的那样 . 显然它仍然是VS2010和VS2012中的一个问题 .

    所以最后,几个月前,我已经足够了,并且在几个星期 I built a tool called "Redesigner" that generates .designer files. It's open-source under the BSD license ,源代码可以在SourceForge上免费使用,免费窃取,随意做任何你喜欢的事情 . 它确实是Visual Studio经常无法做到的,它可以快速可靠地生成.designer文件 .

    它是用C#编写的针对.NET 3.5的,但是除了类型声明和 it doesn't use or rely on Visual Studio at all 之外,它甚至可以避免使用System.Web .

    Redesigner可以生成新的.designer文件;并且它提供了一个--verbose选项,这样当出现问题时,你会获得比“抛出类型System.Exception异常”更好的错误消息 . 并且有一个--verify选项可用于告诉您何时现有的.designer文件被破坏 - 缺少控件,错误的属性声明,Visual Studio无法读取,或者只是简单的borked .

    我们一直在我的工作场所使用它,让我们在上个月的大部分时间里都没有堵塞,虽然Redesigner仍然是测试版,但它已经足够远,因此值得与公众分享它的存在 . 我很快打算为它创建一个Visual Studio插件,这样您只需右键单击即可按照您希望的方式验证或重新生成设计器文件 . 但在此期间,命令行使用非常简单,可以为您节省很多麻烦 .

    无论如何, go download a copy of Redesigner now and stop pulling out your hair . 你赢了't always need it, but when you do, you'很高兴你拥有它!

    https://sourceforge.net/projects/redesigner/

  • 1

    TL;DR;
    编辑ASPX页面的 @Page 指令的 Inherits 属性,然后单击“保存” . 您的设计器文件应该重新生成 .

    确保 Inherits = <namespace> . <class_name>和 CodeBehind = <class_name> .aspx.cs


    我试图在 Sharepoint 2010 project, using VS 2010 and TFS 上做这个,上面没有一个解决方案适合我 . 主要是,在VS 2010中使用TFS时,.ASPX文件的右键单击菜单中缺少选项 "Convert to Web Application" .

    This answer helped finally . 我的 class 看起来像这样:

    namespace MyProjects.Finance.Pages
    {
        public partial class FinanceSubmission : WebPartPage
        {
            protected void Page_Load(object sender, EventArgs e)
            {
            }
    
            // more code
        }
    }
    

    我的 @Page 指令是(为清晰起见,这里是换行符):

    <%@ Page Language="C#" AutoEventWireup="true" 
        CodeBehind="FinanceSubmission.aspx.cs"
        Inherits="MyProjects.Finance.Pages.FinanceSubmission"
        MasterPageFile="~masterurl/default.master" %>
    

    我首先将 Inherits 更改为 MyProjects.Finance.Pages ,点击保存,然后将其更改回 MyProjects.Finance.Pages.FinanceSubmission 并再次点击保存 . 还有哈拉!设计师页面重新生成了!

    希望这有助于使用TFS的人!

  • 1

    (以下来自VS2005的经验 . )

    如果在调试时编辑ASPX页面,则不会使用新类更新代码隐藏 . 因此,您必须停止调试,轻松编辑ASPX页面(如添加按钮或其他内容),然后单击“设计视图”,然后删除按钮 . 然后,您的设计器文件应该更新 .

    如果你对VS2008有不同的问题,那么我无能为力 .

  • 4

    如果更新命名空间并且不更新设计器文件中的命名空间,也会发生这种情况 . 修复:也更新设计器文件中的命名空间 .

相关问题