关于asp.net:HOW如何强制Visual Studio重新生成aspx / ascx文件的.designer文件?

关于asp.net:HOW如何强制Visual Studio重新生成aspx / ascx文件的.designer文件?

How do you force Visual Studio to regenerate the .designer files for aspx/ascx files?

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

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

  • 关闭并重新打开所有文件和Visual Studio
  • 在页面上更改runat ="server"控件
  • 删除并重新添加页面指令

如果打开.aspx文件并在设计视图和html视图之间切换
返回它会提示VS检查控件并添加任何缺少的控件
设计师档案。

在VS2013-15中,"项目"菜单下有"转换为Web应用程序"命令。在VS2013之前,此选项在右侧单击上下文菜单中可用作(c / p)x文件。完成后,您应该会看到现在有一??个* .Designer.cs文件,并且您可以使用Design HTML中的控件进行控制。

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

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


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

狡猾的!


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

  • 在aspx / ascx文件的编辑器中选择所有前面的代码(html标记等)。
  • 切。
  • 保存。
  • 糊。
  • 保存。

重新编译。


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

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

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

这是这部分:

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

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


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

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


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

  • 删除aspx或ascx文件 - 不再检查此情况
  • 剪切所有内容并重新编写到aspx或ascx文件中 - 不再有效,参考文献没有变化
  • 转换为Web应用程序 - 选项不再可用
  • 任意更改aspx / ascx文件中的内容 - 不再有效(参见2)。
  • 解决方案非常简单,但有点麻烦。为了触发代码生成器,请更改需要生成designer.aspx.cs的内容。更改不影响代码的内容(例如CSS样式或添加文本)将不会触发代码生成器。您必须更改引用的控件。这是怎么做的:

    在ascx或aspx中更改控件的ID

    1
     

    1
     

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


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


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

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

    但是这是有效的:

  • 全选(Default.aspx)
  • 保存Default.aspx
  • 保存Default.aspx
  • 完成。生成了新的designer.cs。 :)


    我经常发现复制/粘贴给我带来了这种行为。大多数情况可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后删除它)。

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

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


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

    我发现重新启动Visual Studio通常可以解决问题,但有时却没有。在这些情况下,如果您关闭Visual Studio,然后在再次打开它之前删除Web项目的"obj"目录中的所有内容,它始终对我有用。

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


    我的经验是,如果你想在本文中做,如上所述。

    您的标记文件(aspx / ascx)必须包含CodeBehind ="MyPage.aspx.cs"属性,否则它将无法正常工作。我在这里写博客。


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


    (以下来自VS2005的经验。)

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

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


    另一件有用的事情是 -

  • 手动删除然后在文件系统中创建设计器文件。
  • 编辑项目文件。
  • 添加代码以包含设计器
    例如:
    FileName.ascx
  • 重新加载项目
  • 在设计/查看模式下打开(c / p)x文件并保存。
  • 检查设计器文件。代码将在那里。

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

    1
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
    • 创建空的设计器页面(如果它已经存在则清除它"yourControl.ascx.designer.cs")
    • 在ascx(或aspx)中复制所有代码,删除它,然后保存。再次重新过去,然后保存。
    • 应该现在填充设计器文件。

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

    最后,几个月前,我决定足够了,几个星期后我建立了一个名为"Redesigner"的工具来生成.designer文件。它是BSD许可下的开源软件,SourceForge上提供源代码 - 免费使用,免费窃取,随意做任何事情。而它确实经常出现Visual Studio无法做到的事情,即快速可靠地生成.designer文件。

    它是一个独立的命令行工具,可解析.aspx和.ascx文件,执行所有必要的反射魔法,并吐出正确的.designer文件。它完成了所有的解析和反射,以避免依赖现有的代码,我们都知道这些代码已被破坏。它是用C#编写的,针对.NET 3.5,但是除了类型声明之外,它甚至可以避免使用System.Web,并且根本不使用或依赖Visual Studio。

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

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

    无论如何,现在下载一份Redesigner并停止拔出你的头发。你并不总是需要它,但当你这样做时,你会很高兴你拥有它!

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


    这是我经历过的观察,
    在解决方案资源管理器中右键单击选择网站文件夹,为生成设计器文件的所有aspx文件选择转换为Web应用程序。

    萨米尔


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


    • 在设计器文件中选择全部并删除文件中的所有内容,将其留空然后保存
    • 在ASPX / ASCX文件中选择全部并剪切所有内容,然后重新粘贴它
    • 设计器文件应该重新生成代码

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

    确保Inherits = CodeBehind = .aspx.cs

    我试图在使用VS 2010和TFS的Sharepoint 2010项目上执行此操作,并且上述解决方案都不适用于我。主要是,在VS 2010中使用TFS时,.ASPX文件的右键单击菜单中缺少"转换为Web应用程序"选项。

    这个答案终于有了帮助我的班级看起来像这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    namespace MyProjects.Finance.Pages
    {
        public partial class FinanceSubmission : WebPartPage
        {
            protected void Page_Load(object sender, EventArgs e)
            {
            }

            // more code
        }
    }

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

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

    我首先将Inherits更改为MyProjects.Finance.Pages,点击Save,然后将其更改回MyProjects.Finance.Pages.FinanceSubmission并再次点击Save。和瓦拉!设计师页面重新生成!

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


    在Visual Studio中:

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

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

    如果您收到错误消息:

    "设计器文件的生成失败:未实现方法或操作。"

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

    如何在visual studio中生成aspx.designer.cs?


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

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

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


    对我有用的解决方案是:

    我只是复制了页面并将其粘贴在同一部分中,然后重命名了第一页(任何名称)并将复制的页面重命名为原始页面。现在控件可以访问。


    没有人提到的一件事是访问该页面。我让我的设计器文件停止重新生成,因为我包含了一个不存在的用户控件(由于各种原因),并且这里没有提到任何建议。无论出于何种原因,我没有在Visual Studio中出现任何错误 - 除了抱怨我的客户端控件不存在因为它们没有被重新生成的事实。

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


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

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


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

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

    编译时,修复生成的错误。他们可能会是一样的
    所有文件中的错误。

    接下来,如果您有Designer文件,请删除所有插入的设计器文件。
    接下来,确保编译时没有任何其他错误,除了
    设计师档案。

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

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


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


  • 关闭designer.cs。

  • 将您的aspx文件更改为设计视图。

  • 右键单击 - >刷新。

  • 保存


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

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


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


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

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


    在我的情况下,我只是在顶部错过了一个寄存器TagPrefix。以某种方式,以前的开发工作没有在那里?


    我以前遇到过这个问题。我通常只需按Enter键添加一行,然后等待在html页面上显示加号/减号,设计师应该添加你需要的内容。我还必须关闭项目并重新打开它以使其工作。


    我经常遇到这个问题,而且又做了一次。我尝试使用这些建议修复它,没有任何效果。我终于发现我的页面标题中有'Title'属性两次(我添加到最后,没有意识到VS添加了一个空白的Title ="开头) - 删除额外的属性导致VS2008重新生成设计器文件...我希望VS2010修复这个问题,让我们知道为什么设计器文件生成没有发生...

    -
    德里克


    除了已经给出的所有好答案之外,我想补充一下@ johan-leino的好答案。在我的情况下,由于某些任意原因,@Page指令/ .aspx文件中省略了CodeBehind属性。同样,检查@Control指令/ .ascx文件的CodeFile属性可能是值得的(显然在两种情况下都与Inherits属性结合使用)。

    根据"强制"重新生成.designer.cs所需的确切场景和原因,还可以在(快速)保存之前尝试格式化文档(可能表示解析错误)(无论是否有任何更改)并检查错误列表以获取警告。


    我知道我已经迟到了,但我想如果在尝试了@Glenn Slaven接受的答案和@Espo当前得分最高的答案之后你还是运气不好,以下可能会让一些人在那里省下一些麻烦。

    用户控件(.ascx)是我不断停止自动生成的原因。我发现在我的用户控件中使用其他用户控件的情况下,它会破坏自动生成。

    我提出的解决方案是使用我们都知道的技巧,以便在使用外部源的CSS类时使IntelliSense在用户控件或外观文件中工作。现在我注册我需要的其他用户控件,而不仅仅是引用CSS文件。它看起来像这样:

    1
    2
    3
    4
    <% If False Then %>
    <%@ Register TagPrefix="uc" TagName="Title" Src="~/controls/title.ascx" %>
    <link rel="stylesheet" type="text/css" href="../css/common.css"  />
    <% End If %>

    之后,我保存文件,提示自动生成重新生成,然后我重新启动并运行。


  • 第1步:选择所有的aspx代码,剪切[CTRL + X]代码并保存。

  • 第2步:再次将相同的代码粘贴到同一页面中并再次保存

  • 现在您的.desinger页面将刷新.aspx页面中的所有控件。


    我遇到的问题是,在.ascx文件中声明时,我的新控件不会在设计器文件中生成。问题是我在后面的代码中声明了它们。因此删除后面代码中的声明解决了我的问题。


    我知道这是一个古老的话题,但我只是想添加一个尚未提出的解决方案。

    我对资源文件有同样的问题。我在Visual Studio外部编辑它,设计器文件没有正确更新。

    重命名文件可以重新生成Designer文件。我刚刚将它重命名为初始名称,并且工作得很好!


    我在VS 2003,但这些都不适合我。有效的方法是打开.vb页面顶部的代码,标记为Web Form Designer Generated Code(该部分表示不在那里编辑),并在那里声明,系统声明了所有其他控件。的bizzare。


    对于VS2015 ......这是一个VB示例,用于从WebSite项目切换到适合我的Web应用程序项目。没有其他解决方案对我有用,这就是为什么我要分享这个。它不优雅,但有效。

    步骤0:在项目中将所有"CodeFile ="替换为"CodeBehind ="
    第1步:关闭解决方案。
    第2步:使用以下代码运行自行开发的Windows应用程序(步骤如下)。
    第3步:重新打开解决方案。
    步骤4:在解决方案资源管理器中,确保显示所有文件,并搜索designer.vb(或者C#的designer.cs)
    步骤5:选择所有丢失的文件,并将它们包含在项目中。
    步骤6:对于每个文件,查看主页面/控件并保存。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        private void button1_Click(object sender, EventArgs e)
        {
            ProcessDirectory(new DirectoryInfo(textBox1.Text));
        }

        private void ProcessDirectory(DirectoryInfo directory)
        {
            ProcessMask(directory,".ascx",".vb");
            ProcessMask(directory,".aspx",".vb");

            foreach (DirectoryInfo directoryInfo in directory.GetDirectories())
                ProcessDirectory(directoryInfo);
        }

        private void ProcessMask(DirectoryInfo directory, string maskStart, string maskEnd)
        {
            FileStream fs;
            foreach (FileInfo file in directory.GetFiles(string.Format("*{0}{1}", maskStart, maskEnd)))
            {
                string designerFileName = file.Name.Replace(string.Format("{0}{1}", maskStart, maskEnd), string.Format("{0}.designer{1}", maskStart, maskEnd));
                if (directory.GetFiles(designerFileName).Length == 0)
                {
                    using (fs = File.Create(Path.Combine(directory.FullName, designerFileName)))
                    {
                        fs.Close();
                    }
                }
            }
        }

    我以为我遇到了这个问题并且正在撕掉我的头发,但后来我意识到我试图从静态方法中引用一个控件。

    使该方法非静态解决了我的问题。


    我的解决方案之一,对我有用。

  • 关闭Visual Studio
  • 删除隐藏的.vs目录
  • 删除现有的.sln文件
  • 使用.csproj文件在visual studio中加载项目

  • 在我的情况下,当我向@Page部分添加CodeBehind时,它已得到修复。


    推荐阅读