414

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

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

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

48 回答 48

380

如果您打开 .aspx 文件并在设计视图和 html 视图之间切换并返回,它将提示 VS 检查控件并将任何缺少的控件添加到设计器文件中。

在 VS2013-15的Project菜单下有一个Convert to Web Application命令。在 VS2013 之前,此选项在 as(c/p)x 文件的右键单击上下文菜单中可用。完成此操作后,您应该看到您现在有一个可用的 *.Designer.cs 文件,并且您的设计 HTML 中的控件将可用于您的控件。

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

有些人还通过(制作 .designer.cs 文件的备份副本,然后)删除 .designer.cs 文件来报告成功。重新创建一个同名的空文件。

这个答案有很多评论,添加了关于如何最好地重新创建 Designer.cs 文件的提示。

于 2008-09-05T06:25:29.457 回答
98

好吧,我找到了一个可行的解决方案,尽管我不太喜欢它。我不得不删除 .designer.cs 文件,然后重新创建一个同名的空文件。当我返回并再次保存 aspx 文件时,重新生成了设计器文件。

狡猾!

于 2008-09-05T06:32:13.403 回答
81

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

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

重新编译。

于 2009-01-29T16:19:44.007 回答
65

我最近看到我遇到了同样的问题。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,保存,然后还原。

于 2011-01-22T20:18:08.470 回答
38

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

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

于 2008-10-06T22:05:54.437 回答
22

如果您运行的是 Visual Studio 2013 和可能的 2012,这里的大多数解决方案都不起作用。Microsoft 可能引入了一些优化以使 IDE 更快速,因此它们减少了触发代码生成器的案例数量。以下曾经有效的场景不再适用:

  1. 删除 aspx 或 ascx 文件 -- 不再检查这种情况
  2. 剪切所有内容并重新粘贴到 aspx 或 ascx 文件中 -- 不再有效,参考中没有变化
  3. 转换为 Web 应用程序 - 选项不再可用
  4. 任意更改 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”。保存并进行构建,您应该一切顺利。

于 2014-01-29T23:36:02.213 回答
15

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

于 2008-09-09T14:28:10.697 回答
9

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

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

但是是的,这有效:

  1. 全选(默认.aspx)
  2. 保存默认.aspx
  3. 粘贴
  4. 保存默认.aspx

完毕。新的 Designer.cs 生成。:)

于 2014-02-14T09:23:04.557 回答
6

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

还要记住,在设计器文件中看不到中继器等内部控件。

是的,在某些情况下,您需要执行上面列出的删除文件魔术 - 但名称更改解决方案在大多数情况下都会起作用。

于 2009-05-11T02:57:54.107 回答
5

我的经验是,如果你想在这篇文章中那样做,就像上面所说的那样。

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

于 2009-03-26T20:08:42.160 回答
5

我找到了一种无需更改任何代码或运行诸如“转换为 Web 应用程序”之类的命令即可解决此问题的方法——而且它也很简单!

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

(再次开始时,您只需添加一个空格并再次删除它,然后点击保存以正确重新生成设计器文件)

于 2013-02-01T09:21:42.757 回答
4

(以下来自VS2005的经验。)

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

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

于 2008-09-05T06:26:24.790 回答
4

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

于 2010-09-14T06:08:43.740 回答
4

另一件有效的事情是 -

  1. 手动删除然后在文件系统中创建一个设计器文件。
  2. 编辑项目文件。
  3. 添加代码以包含设计器
    例如:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
  4. 重新加载项目
  5. 在设计/查看模式下打开 as(c/p)x 文件并保存。
  6. 检查设计器文件。代码将在那里。
于 2013-11-12T05:17:36.770 回答
3

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

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
  • 创建空的设计器页面(如果它已经存在“yourControl.ascx.designer.cs”,则将其清除)
  • 在 ascx(或 aspx)中复制所有代码,将其删除,然后保存。重新过去一次,然后保存。
  • 现在应该填充设计器文件。
于 2015-02-11T18:56:30.587 回答
2
  • 在设计器文件中全选并删除文件中的所有内容,将其留空然后保存
  • 在 ASPX/ASCX 文件中全选并剪切所有内容,然后重新粘贴回去
  • 设计器文件应该已经重新生成了代码
于 2008-10-06T22:09:16.130 回答
2

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

萨米尔

于 2010-01-15T19:30:20.943 回答
2

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

于 2012-06-28T13:44:13.757 回答
2

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

所以最后,几个月前,我觉得够了,几周后我构建了一个名为“Redesigner”的工具,它可以生成 .designer 文件。它是在 BSD 许可下开源的,源代码可在 SourceForge 上获得——免费使用、免费窃取、免费做任何你想做的事情。它完成了 Visual Studio 经常无法做到的事情,即快速可靠地生成 .designer 文件。

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

Redesigner 可以生成新的 .designer 文件;它提供了一个 --verbose 选项,因此当出现问题时,您会收到比“抛出 System.Exception 类型的异常”更好的错误消息。还有一个 --verify 选项可以用来告诉你现有的 .designer 文件何时损坏——缺少控件、错误的属性声明、Visual Studio 无法读取,或者只是简单的无聊。

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

不管怎样,现在就去下载 Redesigner 的副本,别再扯头发了。您并不总是需要它,但是当您这样做时,您会很高兴拥有它!

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

于 2013-01-21T06:23:37.473 回答
2

TL;博士;
编辑InheritsASPX 页面@Page指令的属性并点击保存。您的设计器文件应该重新生成。

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


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

这个答案终于有所帮助。我的课看起来像这样:

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" %>

我首先将其更改InheritsMyProjects.Finance.Pages,点击保存,然后将其更改回MyProjects.Finance.Pages.FinanceSubmission并再次点击保存。还有哇!设计器页面已重新生成!

希望这对使用 TFS 的人有所帮助!

于 2014-12-19T14:58:47.043 回答
2

在 Visual Studio 中:

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

2) 右键单击​​您的 aspx 文件并选择“转换为 Web 应用程序”这应该将 aspx.designer.cs 添加回来并保持最新。

如果您收到错误消息:

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

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

如何在 Visual Studio 中生成 aspx.designer.cs?

于 2015-04-17T06:43:55.110 回答
2

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

于 2016-03-17T20:48:28.453 回答
2
  1. 第 1 步:选择所有 aspx 代码,剪切 [ CTRL+X ] 该代码并保存。

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

现在,您的 .desinger 页面将使用 .aspx 页面中的所有控件进行刷新。

于 2019-07-16T09:24:40.043 回答
1

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

就我而言,此时,我发现问题在于我声明了一个按钮控件,该控件不在具有 runat="server" 属性的表单标记内。

于 2009-02-10T19:37:53.860 回答
1

这是 IDE 中的一个错误;我从 VS 2003 开始​​就看到了。不过,解决方案很简单。

保存您的文件。完全退出 IDE(确保进程停止,任务管理器。)

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

于 2010-04-30T06:25:09.047 回答
1

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

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

于 2010-07-08T04:55:37.040 回答
1

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

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

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

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

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

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

于 2011-06-02T02:46:25.170 回答
1

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

于 2011-07-19T10:51:21.780 回答
1

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

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

于 2012-05-17T23:11:29.787 回答
1

为我工作的解决方案是:

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

于 2012-05-21T10:18:02.513 回答
1

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

于 2012-07-13T08:51:40.960 回答
0
  1. 用无效的标签名称替换您的自定义标签。保存
  2. 将无效的标签名称恢复为自定义标签名称。保存。然后将提示您检查 *.designer.cs 文件(或静默修改 Designer.cs)并生成自定义标签控件的正确变量。
于 2010-01-29T07:13:41.940 回答
0

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

于 2010-02-21T22:58:57.007 回答
0

就我而言,我只是在顶部缺少一个寄存器 TagPrefix。不知何故,以前的开发人员在没有这个的情况下工作?

于 2010-06-17T17:42:10.623 回答
0

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

于 2010-07-06T15:08:15.387 回答
0

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

——德里克

于 2010-09-09T16:36:56.550 回答
0

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

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

于 2010-11-24T06:38:01.923 回答
0

就我而言,当我将 CodeBehind 添加到 @Page 部分时,它已修复。

于 2011-04-29T16:13:19.173 回答
0

我知道我参加聚会迟到了,但我想如果在尝试了@Glenn Slaven 接受的答案和@Espo 当前评分最高的答案之后,你仍然不走运,以下可能会为一些人省去一些麻烦。

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

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

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

之后,我保存文件,这会提示自动生成重新生成,我已备份并运行。

于 2011-06-01T18:09:04.597 回答
0

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

我对资源文件有同样的问题。我在 Visual Studio 之外对其进行了编辑,并且设计器文件没有正确更新。

重命名文件可以重新生成 Designer 文件。我只是再次将其重命名为初始名称,并且效果很好!

于 2013-06-24T08:06:48.510 回答
0

我在 VS 2003 中,这些都不适合我。有效的方法是在 .vb 页面顶部标记为 Web 表单设计器生成代码的部分(表示不要在那里编辑的部分)中打开代码并在那里声明它,系统声明了所有其他控件。离奇。

于 2013-08-14T15:13:24.880 回答
0

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

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

    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();
                }
            }
        }
    }
于 2017-01-17T15:17:09.233 回答
0

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

使方法非静态为我解决了这个问题。

于 2017-04-12T15:21:13.500 回答
0
  1. 关闭 Designer.cs。

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

  3. 右键单击-> 刷新。

  4. 节省

于 2017-10-19T12:52:54.407 回答
0

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

  1. 关闭 Visual Studio
  2. 删除隐藏的 .vs 目录
  3. 删除现有的 .sln 文件
  4. 使用 .csproj 文件在 Visual Studio 中加载项目
于 2018-07-11T06:30:28.283 回答
0

在 Visual Studio 2019 中,步骤如下:

  1. 创造webform1.aspx
  2. 复制你的aspx代码并粘贴进去webform1.aspx
  3. 编译你的项目,你应该在里面有设计器代码webform1.aspx.designer.cs
  4. 现在您可以复制设计器代码并在原始网络表单中使用。
于 2020-08-01T14:45:56.393 回答
0

如果您在使用 Visual Basic 2019 时看到此问题并单击“永久删除此文件”确认,则可以从回收站中恢复 Designer.cs 文件...它将在 Visual Basic 中自动重新生成。我只是这样做了,并按原样找到了我的文件。

于 2021-03-01T12:18:43.437 回答
0

解决方案是让我从文件更改NoneCompile.csproj

<Compile Include="Logout.aspx.designer.cs">
      <DependentUpon>Logout.aspx</DependentUpon>
</Compile>
于 2021-04-04T13:21:58.343 回答