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



Answers

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

狡猾的!

Question

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

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

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



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




另一件工作是 -

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



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




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

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




转换为Web应用程序不适合我。

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

但是,这是有效的:

  1. 全选(Default.aspx)
  2. 保存Default.aspx
  3. 保存Default.aspx

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




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

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

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




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




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



如果您运行的是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”。 保存并建立,你应该很好去。




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

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




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




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

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






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

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




Related