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

有时,当我编辑页面或控件时,.designer文件随着我在页面上添加的新控件而停止更新。我不确定是什么原因导致这种情况发生,但我想知道是否有任何方法强制Visual Studio重新生成.designer文件。我使用Visual Studio 2008

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

  • 关闭,重新打开所有文件&Visual Studio
  • 更改页面上的runat="server"控件
  • 删除,重新添加page指令
336669 次浏览

如果你打开。aspx文件,在设计视图和html视图之间切换 返回后会提示VS检查控件并添加任何缺失的控件

在VS2013-15中,项目菜单下有一个转换为Web应用程序命令。在VS2013之前,这个选项在as(c/p)x文件的右键上下文菜单中可用。完成此操作后,您应该看到您现在有一个*. designer .cs文件可用,并且Design HTML中的控件将可用于控件。

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

有些人还报告了删除。designer.cs文件的成功(先备份。designer.cs文件,然后删除。designer.cs文件)。重新创建同名的空文件。

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

(以下是使用VS2005的经验。)

如果在调试时编辑ASPX页面,则后台代码不会随新类一起更新。因此,您必须停止调试,简单地编辑ASPX页面(如添加按钮或其他内容),然后单击Design View,然后删除按钮。然后,应该更新设计器文件。

如果你在VS2008中有不同的问题,那么我帮不了你。

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

狡猾的!

我知道的唯一方法是删除设计器文件,并将其转换为web应用程序。然而,当你这样做时,它通常会弹出错误,至于为什么它没有自动再生在第一个地方,它通常是一个控制引用,没有在页面头部声明。

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

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

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

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

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

编译。

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

在我的例子中,在这一点上,我发现问题是我声明了一个按钮控件,它不在一个带有runat="server"属性的表单标记中。

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

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

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

还要记住,在设计器文件中,像重复器这样的控件是不可见的。

是的,在某些情况下,您需要执行上面列出的删除文件的魔法—但是更改名称解决方案在大多数情况下都是有效的。

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

Sameer

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

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

这是IDE中的一个bug;我从2003年就开始看了。解决方法很简单。

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

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

在我的例子中,我只是在顶部缺少了一个寄存器TagPrefix。不知何故,之前的开发工作没有这个在那里?

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

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

也有拼写错误在我的标签控制(已使用'类'而不是'cssclass')。

助教

这个问题我已经遇到过很多次了,这次又犯了一次。我试着用这些建议来解决问题,但都没用。我终于发现我有'Title'属性在页头两次(我添加到结尾,没有意识到VS添加了一个空白Title=""到开头)——删除额外的属性导致VS2008重新生成设计器文件…我希望VS2010能修复这个问题,让我们知道为什么设计器文件不能生成…

< p >—— 德里克。< / p >

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

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

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

最近我发现我也有同样的问题。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,保存,然后恢复。

在我的案例中,当我向@Page部分添加CodeBehind时,问题得到了解决。

我知道我来晚了,但我想,如果在尝试了@Glenn Slaven的公认答案和@Espo目前评分最高的答案后,你仍然不走运,下面的答案可能会为一些人省去一些麻烦。

用户控件(.ascx)总是停止自动生成。我发现在我的用户控件中使用其他用户控件的实例中,它破坏了自动生成。

我提出的解决方案是使用我们都知道的技巧,当使用来自外部源的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 %>

之后,保存文件,这将提示自动生成程序重新生成,然后我就重新启动并运行了。

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

如果有,第一件事,如果有多个文件,你正在安装;

当你编译时,修复生成的错误。它们可能是一样的

.

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

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

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

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

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

需要实际访问页面才能获得ASP。请您告诉我错误。

对我来说有效的解决方案是:

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

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

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

多年来,我在Visual Studio 2008中工作时遇到了同样的问题。我在StackOverflow和许多博客上尝试了所有的“解决方案”,我相信你们也都尝试过。有时有效,有时无效,就像我相信你们都遇到过的那样。显然,这在VS2010和VS2012中仍然是一个问题。

所以最后,几个月前,我决定受够了,并在几周内我创建了一个名为“Redesigner”的工具,它可以生成.designer文件。它在BSD许可下是开源的,源代码可在SourceForge -免费使用,免费窃取,免费做任何你喜欢的事情。而且它做了Visual Studio经常做不到的事情,即快速可靠地生成.designer文件。

它是一个独立的命令行工具,可以解析.aspx和.ascx文件,执行所有必要的反射魔法,并输出正确的.designer文件。它自己完成所有解析和反射,以避免依赖现有代码,我们都知道现有代码是坏的。它是在。net 3.5下用c#编写的,但是它甚至要避免使用System。用于类型声明以外的任何东西,以及它根本不使用或依赖于Visual Studio

Redesigner可以生成新的.designer文件;并且它提供了一个——verbose选项,这样当事情出错时,你会得到比“Exception of type System”更好的错误消息。抛出了异常。”还有一个——verify选项,可以用来告诉你什么时候你现有的.designer文件被破坏了——缺少控件,错误的属性声明,Visual Studio无法读取,或者只是简单的borked。

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

不管怎样,现在就去下载一份Redesigner,别再拔头发了。你不会总是需要它,但当你需要它时,你会为拥有它而感到高兴!

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

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

我发现重新启动Visual Studio通常可以解决问题,但有时不能。在这些情况下,如果你关闭Visual Studio,然后在再次打开它之前删除web项目“obj”目录中的所有内容,它总是为我工作。

(当再次启动时,你只需要添加一个空格,然后再次删除它,然后点击保存,让设计器文件正确地重新生成)

我知道这是一个老话题,但我只是想补充一个还没有被建议的解决方案。

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

重命名文件可以重新生成Designer文件。我只是重新命名为最初的名称,这工作得很好!

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

另一件有用的事情是——

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

如果你运行的是Visual Studio 2013或2012,这里的大多数解决方案都不起作用。微软可能引入了一些优化,使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”。保存并建立,你应该很好。

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

删除designer.cs并粘贴空白的designer.cs也不能工作。

但这确实奏效了:

  1. 选择所有(default . aspx)
  2. 减少
  3. 保存即
  4. 粘贴
  5. 保存即

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

< p > TL,博士; < br > 编辑ASPX页面的@Page指令的Inherits属性并点击保存。你的设计器文件将被重新生成

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


我试图在Sharepoint 2010项目,使用VS 2010和TFS上做到这一点,上面的解决方案都不适合我。首先,在VS 2010中使用TFS时,. aspx文件的右键菜单中缺少"Convert to Web Application"选项。

这个回答终于帮了大忙。我的班级是这样的:

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的人有帮助!

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

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

在Visual Studio中:

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

2)右键单击aspx文件,选择“转换为Web应用程序” 这应该会将aspx.designer.cs添加到最新的版本

如果你得到一个错误:

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

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

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

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

VS2015…这里有一个VB的例子,从一个网站项目切换到一个Web应用程序项目,为我工作。其他的方法对我都没用,所以我才要分享这个。这并不优雅,但很有效。

步骤0:将项目中的所有“CodeFile=”替换为“CodeBehind=” 步骤1:关闭解决方案。 步骤2:使用以下代码运行一个自制的Windows应用程序(以下步骤)。 第三步:重新打开溶液。 第四步:在解决方案资源管理器中,确保你正在显示所有文件,并搜索designer.vb(或designer.cs为c#) 步骤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();
}
}
}
}

我以为我有这个问题,是撕裂我的头发,但后来我意识到,我试图引用一个控件从一个静态方法。

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

  1. designer.cs关闭。

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

  3. 右键单击- >刷新。

  4. 保存

我的解决方法之一,对我很管用。

  1. 关闭Visual Studio
  2. 删除隐藏的.vs目录
  3. 删除现有的.sln文件
  4. 在visual studio中使用.csproj文件加载项目
  1. 步骤1:选择你所有的aspx代码,剪切[CTRL+X]该代码并保存。

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

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

在Visual Studio 2019中,步骤如下:

  1. 创建webform1.aspx
  2. 复制你的aspx代码并粘贴webform1.aspx
  3. 编译你的项目,你应该在webform1.aspx.designer.cs中有设计器代码
  4. 现在你可以复制设计器代码并在你的原始web表单中使用。

如果您在使用Visual Basic 2019时看到此情况,并且单击“永久删除此文件”;确认,您可以从回收站恢复designer.cs文件…它会自动在Visual Basic中重新生成。我就这么做了,找到了我的文件。

解决方案是我从< >强None < / >强更改为.csproj文件中的< >强Compile < / >强

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