提问



有时当我在编辑页面或控制时,.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文件然后重新创建一个具有相同名称的空文件来报告成功。

其它参考1


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


狡猾的!

其它参考2


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



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

  • 剪切。

  • 保存。

  • 粘贴。

  • 保存。



重新编译。

其它参考3


我最近看到我遇到了同样的问题。 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


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


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

其它参考5


如果您运行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。保存并做好构建,你应该好好去。

其它参考6


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

其它参考7


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


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


但是这是有效的:



  1. 全选(Default.aspx)

  2. 剪切

  3. 保存Default.aspx

  4. 粘贴

  5. 保存Default.aspx



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

其它参考8


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


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


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

其它参考9


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


我发现重新启动Visual Studio通常可以解决问题,但有时候它并没有。在这种情况下,如果你关闭Visual Studio然后删除web项目的obj目录中的所有内容再次打开之前,它一直对我有用。


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

其它参考10


(以下来自VS2005的经验。)


如果在调试时编辑ASPX页面,那么代码隐藏不会更新新类。所以,你必须停止调试,轻松编辑ASPX页面(如添加按钮或其他东西),然后单击设计视图,然后删除按钮。然后,您的设计器文件应该更新。


如果你对VS2008有不同的问题,那我就无济于事了。

其它参考11


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


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

其它参考12


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

其它参考13


另一件有用的事情是 -



  1. 手动删除&然后在filesystem中创建一个设计器文件。

  2. 修改项目文件。

  3. 添加代码以包含设计器

    例如:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>

  4. 重新加载项目

  5. 在设计/查看模式下打开(c/p)x文件&保存它。

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


其它参考14


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


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>



  • 创建空的设计器页面(如果它已经存在则清除它yourControl.ascx.designer.cs)

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

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


其它参考15



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

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

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


其它参考16


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


萨米尔

其它参考17


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

其它参考18


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


最后,几个月前,我认为已经足够了,并且在几周之内我构建了一个名为Redesigner的工具,可以生成.designer文件。它是BSD许可下的开源,源代码可在SourceForge上免费使用,可以免费窃取,随意做任何你喜欢的事情。它确实是Visual Studio无法做到的事情,快速可靠地生成.designer文件。


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


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


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


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


https://sourceforge.net/projects/redesigner/ [16]

其它参考19


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


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


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


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

其它参考20


在Visual Studio中:


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


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


如果您收到错误消息:


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


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


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

其它参考21


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


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

其它参考22


这是IDE中的一个错误;自从VS 2003以来我就已经看过了。但解决方案很简单。


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


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

其它参考23


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


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




其它参考24


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


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


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


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


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


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

其它参考25


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


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

其它参考26


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

其它参考27


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

其它参考28



  1. 使用无效的标记名称替换您的自定义标记。保存它

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


其它参考29


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