如何强制Visual Studio重新生成aspx / ascx文件的.designer文件?
有时当我编辑页面或控制.designer文件停止更新与我正在页面上的新控件。 我不知道是什么原因导致这种情况发生,但我想知道是否有任何方法迫使Visual Studio重新生成.designer文件。 我正在使用Visual Studio 2008
编辑:对不起,我应该注意到我已经尝试:
- closures并重新打开所有文件和Visual Studio
- 对页面上的runat =“server”控件进行更改
- 删除并重新添加页面指令
如果打开.aspx文件并在devise视图和html视图之间切换,则会提示VS检查控件并向devise器文件添加缺less的任何内容。
在VS2013-15中,在“ 项目”菜单下有一个转换为Web应用程序的命令。 在VS2013之前,这个选项可以在右键菜单中作为(c / p)x文件使用。 完成此操作后,您应该会看到现在有一个* .Designer.cs文件可用,并且Design HTML中的控件将可用于您的控制。
PS:这不应该在debugging模式下完成,因为在debugging时并不是所有的东西都被“重新编译”了。
有些人也通过删除.designer.cs文件报告成功,然后重新创build一个同名的空文件。
那么我find了一个可行的解决scheme,虽然我不太喜欢它。 我不得不删除.designer.cs文件,然后重新创build一个同名的空文件。 当我再次回到并保存aspx文件时,devise器文件被重新生成。
狡猾的!
我用下面的方法每次都有效:
- 在aspx / ascx文件的编辑器中select所有代码 (html标记等)。
- 切。
- 保存。
- 糊。
- 保存。
重新编译。
我最近看到我有同样的问题。 Visual Studio 2010拒绝更新devise器文件。
事实certificate,VS不会修改使用CodeFile(页面运行)而不是CodeBehind(DLL)的页面的devise器文件。 无论您closuresVS多less次,重新加载项目,重新创build控件或修改文件都是如此。 什么都不会提示VS重新生成devise者。 就好像它不会为CodeFile页面创builddevise器文件,但确实需要它在那里。
我将其更改为CodeBehind并保存该页面。 devise师文件立即更新。 然后我把它改回来,一切都还是金黄的。 这种行为似乎是VS 2010 / .NET 4.0的新增function,因为默认情况下,VS 2008不会受此影响。
这是这个部分:
<%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>
将CodeFile更改为CodeBehind,保存,然后还原。
还有另一种可能性:您的.aspx文件中可能有错误,不允许Visual Studio重新生成devise器。
如果您切换到devise视图,它将显示该控件无法呈现。 修复控制(在我的情况下,这是一个额外的报价属性)和重新编译应该重新生成devise器。
如果您运行的是Visual Studio 2013和可能的2012,那么大多数解决scheme都不起作用.Microsoft可能会引入一些优化来使IDE更加灵活,从而减less了触发代码生成器的情况。 以下用于工作的scheme不再执行:
- 删除aspx或ascx文件 – 不再检查这种情况
- 剪切所有的内容并重新joinaspx或ascx文件 – 不再有效,不会改变引用
- 转换为Web应用程序 – 选项不再可用
- 随意更改aspx / ascx文件中的内容 – 不再有效(请参阅2)。
解决scheme出奇的简单,但它有点麻烦。 为了触发代码生成器,改变一些需要生成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”。 保存和build立,你应该很好去。
我知道的唯一方法是删除devise器文件,并做一个转换为Web应用程序。 但是,当你这样做的时候,通常会popup错误信息,至于为什么没有自动重新生成,通常是一个没有在页面头部声明的控件引用。
转换到Web应用程序没有为我工作。
删除designer.cs并粘贴空白designer.cs也没有工作。
但是,这工作:
- 全选(Default.aspx)
- 切
- 保存Default.aspx
- 糊
- 保存Default.aspx
完成。 生成新的designer.cs。 🙂
我经常发现复制/粘贴导致了这种行为 。 大多数情况下可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后删除它)。
另外请记住,像中继器这样的控件在devise器文件中是不可见的。
是的,在某些情况下,您需要执行上面列出的删除文件魔法 – 但名称更改解决scheme大部分时间都可以使用。
我find了解决这个问题的方法,而不需要改变任何代码或运行诸如“转换到Web应用程序”之类的命令 – 这也很简单!
我发现,重新启动Visual Studio经常解决这个问题,但有时却不行。 在这种情况下,如果closuresVisual Studio,然后再次打开Web项目的“obj”目录中的所有内容 ,它一直为我工作。
(当再次启动时,您只需添加一个空格并再次将其删除,然后点击保存以正确地重新生成devise器文件)
(以下来自VS2005的经验。)
如果在debugging时编辑ASPX页面,则代码隐藏不会使用新类更新。 所以,你必须停止debugging,轻松编辑ASPX页面(比如添加一个button或其他东西),然后点击devise视图,然后删除button。 然后,你的devise器文件应该更新。
如果你对VS2008有一个不同的问题,那我就忍不住了。
我的经验是,如果你想在这篇文章中像上面所说的那样做。
你的标记文件(aspx / ascx)必须包含CodeBehind =“MyPage.aspx.cs”属性,否则就不能工作。 我在这里博客了。
在devise视图中,右键单击屏幕并点击刷新。
- 在devise器文件中select全部,并删除文件中的所有内容,保留为空,然后保存
- 全选在ASPX / ASCX文件中,剪切所有内容,然后重新粘贴
- devise器文件应该重新生成了代码
这里是我遇到的笏,select网站文件夹右键单击解决scheme资源pipe理器,select转换为Web应用程序的所有aspx文件将生成一个devise器文件。
萨米尔
只是添加到这里的长答案列表 – 我刚刚遇到了VS2010(SP1)与.aspx文件中的这个问题。 我尝试添加和删除标准的ASP控件(过去曾经工作过),但最后,我不得不从现有的控件(保存)中删除一个runat = server行来强制devise器文件重新生成。
多年来,我一直在使用Visual Studio 2008,遇到了同样的问题。我已经尝试了StackOverflow上的每个“解决scheme”和几十个博客,就像我相信你们都有。 有时他们会工作,有时他们不会,就像我相信你们所遇到的一样。 显然这在VS2010和VS2012中仍然是个问题。
所以最后,几个月前,我决定足够了,过了几个星期, 我build立了一个名为“Redesigner”的工具来生成.designer文件。 它是BSD许可证下的开源代码,可以在SourceForge上使用源代码 – 免费使用,免费盗取,随意做任何事情。 而且,Visual Studio无法经常这样做,这就是快速而可靠地生成.designer文件。
这是一个独立的命令行工具,用于parsing.aspx和.ascx文件,执行所有必要的reflection魔法,并且吐出正确的.designer文件。 它自己完成所有的parsing和反思,以避免依赖现有的代码,我们都知道这些代码已经被破坏了。 它是用C#编写的,但是它为了避免在System.Web中使用除了types声明之外的任何东西而苦恼,而且它根本不使用或者依赖于Visual Studio 。
重新devise者可以生成新的.designer文件; 它提供了一个–verbose选项,这样当出现错误的时候,你会得到比“exceptiontypesSystem.Exception被抛出”更好的错误信息。 还有一个–verify选项可以用来告诉你什么时候你现有的.designer文件被破坏了 – 缺less控件,不良的属性声明,Visual Studio无法读取,或者只是简单的borked。
我们一直在我的工作场所使用它,以使我们在上个月的较好的一段时间里摆脱困境,而Redesigner仍然是一个testing版,它已经足够远了,值得与公众分享它的存在。 我很快就打算为它创build一个Visual Studio插件,以便您可以按照您一直希望的方式右键单击来validation或重新生成devise器文件。 但是在此期间,命令行的使用非常简单,将为您节省很多麻烦。
无论如何, 现在下载一个Redesigner的副本,并停止拉出你的头发 。 你不会总是需要它,但是当你这样做,你会很高兴你有它!
TL; DR;
编辑ASPX页面@Page
指令的Inherits
属性并点击Save。 您的devise器文件应该重新生成。
确保Inherits
= <namespace>。<class_name>和CodeBehind
= <class_name> .aspx.cs
我试图在SharePoint 2010项目上使用VS 2010和TFS ,而上面的解决scheme都不适合我。 首先,在VS 2010中使用TFS时,.ASPX文件的右键菜单中缺less“转换为Web应用程序”选项。
这个答案终于帮助了 。 我的class级看起来像这样:
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并再次点击保存。 和wallah! devise师页面重新生成!
希望这可以帮助使用TFS的人!
如果您使用VS2013或更高版本,请确保引用属性“CodeBehind”而不是“CodeFile”的代码,然后执行下面的步骤
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
- 创build空的devise器页面(或清除,如果它已经存在“yourControl.ascx.designer.cs”)
- 在ascx(或aspx)中复制所有的代码,删除它,然后保存。 再次重新过去,然后保存。
- devise器文件现在应该填充。
在Visual Studio中:
1)删除你的aspx.designer.cs文件
2)右键单击您的aspx文件,然后select“转换为Web应用程序”这应该添加aspx.designer.cs回来和最新。
如果你得到一个错误说:
“devise器文件的生成失败:方法或操作未执行”。
尝试closuresVisual Studio,然后重新打开您的项目,再次执行第二步
如何在Visual Studio中生成aspx.designer.cs?
删除designer.cs文件,然后右键单击.aspx文件并select“转换为Web应用程序”。 如果您的控件声明出现问题(如标签格式不正确),则会收到错误消息,您需要在Visual Studio成功重新生成devise器文件之前更正格式错误的标签。
在我的情况下,在这一点上,我发现问题是我已经声明了一个button控件,这不是一个具有runat =“server”属性的表单标签。
这是IDE中的一个错误; 我已经看到了自2003年以来。解决scheme很简单,虽然。
保存你的文件。 完全退出IDE(确保过程停止,任务pipe理)。
重新打开解决scheme,弄脏标记,保存。 固定。
我有两个问题…过时AJAXControlkit – 删除旧的DLL,从工具箱中删除旧的控制,下载新版本,加载工具箱,并拖放到页面上的新控件(见http://www.experts-exchange.com /程序devise/语言/networking/视觉_教育_.NET_2005 / Q_24591597.html )
在我的标签控件中也有拼写错误(使用'class'而不是'cssclass')。
钽
如果您像我一样,并且将旧的.ASPX文件添加到更新的项目中。 您可能会忘记页面上使用的一些控件。
如果是这样,第一件事,如果有多个文件,你正在安装; 首先修复一个。
在编译时,修复生成的错误。 他们可能会在所有的文件相同的错误。
接下来,如果你有Designer文件,删除所有插入的devise器文件。 接下来,确保编译时没有任何其他错误,而不是devise器文件。
最后右键单击您的Web项目,然后单击转换为Web应用程序。 这将插入您需要的devise器文件。
这是解决问题的绝对最佳步骤。
没有人提到的一件事是访问该页面 。 我有我的devise器文件停止重新生成,因为我包括一个用户控件不存在(由于各种原因),没有任何build议在这里工作。 不pipe出于什么原因,我没有在Visual Studio中发现任何错误 – 除了那个抱怨我的客户端控件不存在,因为它们没有被重新生成的事实,当然。
实际上访问页面让ASP.Net告诉我这个错误。
如果更新命名空间并且不更新devise器文件中的命名空间,也会发生这种情况。 修复:也更新devise器文件中的命名空间。
另一件工作是 –
- 手动删除,然后在文件系统中创build一个devise器文件。
- 编辑项目文件。
- 添加代码以包含devise器
例如:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
- 重新加载项目
- 在devise/视图模式下打开(c / p)x文件并保存。
- 检查devise器文件。 代码将在那里。
在解决scheme资源pipe理器中右键单击并select转换为Web应用程序 它会再次生成所有的devise器文件。
- 用无效的标签名称replace您的自定义标签。 保存
- 将无效标签名称恢复为自定义标签名称。 保存。 然后,系统会提示您检出* .designer.cs文件(或者静默修改designer.cs),并生成自定义标签控件的正确variables。
我有这个问题,对于我来说,我的一个控件的ID值有一个空格。 我把空间拿出来,devise器文件重新生成。