有时,当我编辑页面或控件时,.designer文件随着我在页面上添加的新控件而停止更新。我不确定是什么原因导致这种情况发生,但我想知道是否有任何方法强制Visual Studio重新生成.designer文件。我使用Visual Studio 2008
编辑:对不起,我应该注意到我已经试过了:
关闭和重新打开所有文件和Visual Studio 更改页面上的runat="server"控件 删除并重新添加页面指令
有时,当我编辑页面或控件时,.designer文件随着我在页面上添加的新控件而停止更新。我不确定是什么原因导致这种情况发生,但我想知道是否有任何方法强制Visual Studio重新生成.designer文件。我使用Visual Studio 2008
编辑:对不起,我应该注意到我已经试过了:
关闭和重新打开所有文件和Visual Studio 更改页面上的runat="server"控件 删除并重新添加页面指令
当前回答
我使用以下方法,每次都有效:
在aspx/ascx文件的编辑器中选择所有前面的代码(html标记等)。 削减。 保存。 粘贴。 保存。
编译。
其他回答
如果更新名称空间而不更新设计器文件中的名称空间,也会发生这种情况。修复:更新设计器文件中的命名空间。
删除designer.cs文件,然后右键单击。aspx文件,选择“转换为Web应用程序”。如果控件声明有问题,比如标签格式不正确,您将得到一条错误消息,在visual studio成功地重新生成设计器文件之前,您将需要纠正格式错误的标签。
在我的例子中,在这一点上,我发现问题是我声明了一个按钮控件,它不在一个带有runat="server"属性的表单标记中。
步骤1:选择所有的aspx代码,剪切[CTRL+X]该代码并保存。 步骤2:再次粘贴相同的代码在同一页,并再次保存
现在你的.desinger页面将会刷新。aspx页面中的所有控件。
我经常发现复制/粘贴会导致这种行为。大多数情况下可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后删除它)。
还要记住,在设计器文件中,像重复器这样的控件是不可见的。
是的,在某些情况下,您需要执行上面列出的删除文件的魔法—但是更改名称解决方案在大多数情况下都是有效的。
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();
}
}
}
}