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

时间:2008-09-05 06:21:07

标签: asp.net visual-studio visual-studio-2008

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

编辑:抱歉,我应该注意到我已经尝试过了:

  • 关闭&重新打开所有文件& Visual Studio
  • 对页面上的runat =“server”控件进行更改
  • 删除&重新添加页面指令

48 个答案:

答案 0 :(得分:360)

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

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

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

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

答案 1 :(得分:88)

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

狡猾!

答案 2 :(得分:77)

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

  • 在aspx / ascx文件的编辑器中选择所有 code-in-front (html标记等)。
  • 剪切。
  • 保存。
  • 粘贴。
  • 保存。

重新编译。

答案 3 :(得分:59)

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

答案 4 :(得分:37)

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

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

答案 5 :(得分:21)

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

  1. 删除aspx或ascx文件 - 不再检查此案例
  2. 剪切所有内容并重新加载到aspx或ascx文件中 - 不再有效,参考文献没有变化
  3. 转换为Web应用程序 - 选项不再可用
  4. 随意更改aspx / ascx文件中的内容 - 不再有效(参见2)。
  5. 解决方案非常简单,但有点麻烦。为了触发代码生成器,请更改需要生成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”。保存并做好构建,你应该好好去。

答案 6 :(得分:14)

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

答案 7 :(得分:9)

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

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

但是,这是有效的:

  1. 全选(Default.aspx)
  2. 剪切
  3. 保存Default.aspx
  4. 粘贴
  5. 保存Default.aspx
  6. 完成。生成了新的designer.cs。 :)

答案 8 :(得分:6)

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

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

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

答案 9 :(得分:5)

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

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

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

答案 10 :(得分:4)

(以下来自VS2005的经验。)

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

如果您对VS2008有不同的问题,那么我无法帮助。

答案 11 :(得分:4)

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

答案 12 :(得分:4)

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

您的标记文件(aspx / ascx)必须包含CodeBehind =“MyPage.aspx.cs”属性,否则它将无效。我在博客上发表了here

答案 13 :(得分:3)

另一件有用的事是 -

  1. 手动删除&amp;然后在filesystem中创建一个设计器文件。
  2. 修改项目文件。
  3. 添加代码以包含设计师
    例如:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
  4. 重新加载项目
  5. 在设计/查看模式下以(c / p)x文件打开&amp;保存它。
  6. 检查设计器文件。代码将在那里。

答案 14 :(得分:3)

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

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

答案 15 :(得分:2)

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

确保Inherits =&lt; namespace&gt;。&lt; class_name&gt;和CodeBehind =&lt; class_name&gt; .aspx.cs


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

This answer helped finally。我的班级看起来像这样:

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的人!

答案 16 :(得分:2)

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

答案 17 :(得分:2)

在Visual Studio中:

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

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

如果您收到错误消息:

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

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

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

答案 18 :(得分:2)

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

萨米尔

答案 19 :(得分:2)

我在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/

答案 20 :(得分:2)

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

答案 21 :(得分:1)

解决方案资源管理器中的

只需右键单击并选择转换为Web应用程序即可。它将再次生成所有设计器文件。

答案 22 :(得分:1)

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

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

答案 23 :(得分:1)

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

答案 24 :(得分:1)

为我工作的解决方案是:

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

答案 25 :(得分:1)

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

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

答案 26 :(得分:1)

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

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

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

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

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

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

答案 27 :(得分:1)

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

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

TA

答案 28 :(得分:1)

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

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

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

答案 29 :(得分:0)

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

答案 30 :(得分:0)

对于VS2015 ...这是一个VB示例,用于从WebSite项目切换到适合我的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();
                }
            }
        }
    }

答案 31 :(得分:0)

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

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

答案 32 :(得分:0)

  1. 关闭designer.cs。

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

  3. 右键单击 - &gt;刷新。

  4. 保存

答案 33 :(得分:0)

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

  1. 关闭Visual Studio
  2. 删除隐藏的.vs目录
  3. 删除现有的.sln文件
  4. 使用.csproj文件在Visual Studio中加载项目

答案 34 :(得分:0)

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

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

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

答案 35 :(得分:0)

在Visual Studio 2019中,以下是步骤:

  1. 创建webform1.aspx
  2. 复制您的aspx代码并粘贴到webform1.aspx
  3. 编译项​​目时,您应该在webform1.aspx.designer.cs中包含设计器代码
  4. 现在您可以复制设计师代码并在原始Web表单中使用。

答案 36 :(得分:0)

我的解决方案是从None改为Compile.csproj 文件

<Compile Include="Logout.aspx.designer.cs">
      <DependentUpon>Logout.aspx</DependentUpon>
</Compile>

答案 37 :(得分:0)

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

答案 38 :(得分:0)

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

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

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

答案 39 :(得分:0)

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

答案 40 :(得分:0)

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

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

我提出的解决方案是使用我们都知道的技巧,以便在使用外部源的CSS类时使IntelliSense在用户控件或外观文件中工作。现在我注册我需要的其他用户控件,而不仅仅是引用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 %>

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

答案 41 :(得分:0)

就我而言,当我在@Page部分添加Code Behind时,它已得到修复。

答案 42 :(得分:0)

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

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

答案 43 :(得分:0)

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

- 德里克

答案 44 :(得分:0)

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

答案 45 :(得分:0)

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

答案 46 :(得分:0)

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

答案 47 :(得分:0)

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