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

Posted

技术标签:

【中文标题】你如何强制 Visual Studio 为 aspx/ascx 文件重新生成 .designer 文件?【英文标题】:How do you force Visual Studio to regenerate the .designer files for aspx/ascx files? 【发布时间】:2010-09-07 21:39:25 【问题描述】:

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

编辑:对不起,我应该指出我已经尝试过:

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

【问题讨论】:

2012 年的 Visual Studio 仍然没有上下文菜单项来从源文件重新生成设计器文件,这很荒谬吗?这类似于无法重建损坏的 DLL。我不明白。尤其是使用外部源代码控制和外部编辑器时,您会使 Visual Studio 瘫痪。浪费钱,如果你问我。我实际上是在尝试重新生成资源文件设计器。我设法让 edit 它重新生成,但它是通过默默无闻... 啊!!!1 @bamccaig,如果我对每一个像这样奇怪的“功能”都有一分钱,我会比比尔·盖茨更富有。如果您认为这很糟糕,请查看 Outlook Express 存储其邮件数据的位置。它深埋在用户文件夹中,默认隐藏在一个神秘的文件夹名称下。 VS 2015有解决方案吗? 其他尝试请参见相关***.com/questions/6508252/…。 不是永久性修复,但这会恢复 .cs 文件中的控件引用: 1. 打开相关的 .aspx 文件; 2、删除<%@ Page指令行末尾的单个“>”; 3. 等待一两秒; 4. 把“>”放回去。 5. 切换到 .cs 文件,您会看到它现在没有控制引用错误。我已经这样做了很长时间了,每次都在每个 VS 版本中都有效。 【参考方案1】:

对我有用的解决方案是:

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

【讨论】:

【参考方案2】:
    用无效的标签名称替换您的自定义标签。保存它 将无效的标签名称恢复为自定义标签名称。保存。然后会提示您检查 *.designer.cs 文件(或静默修改 Designer.cs)并生成自定义标签控件的正确变量。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

就我而言,我只是在顶部缺少一个寄存器 TagPrefix。以前的开发人员不知何故在没有这个的情况下工作?

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

我经常遇到这个问题,现在又遇到了。我尝试使用这些建议修复它,但没有任何效果。我终于发现我在页眉中有两次'Title'属性(我添加到最后,没有意识到VS在开头添加了一个空白Title =“”) - 删除额外的属性导致VS2008重新生成设计器文件...我希望 VS2010 能解决这个问题,让我们知道为什么没有发生设计器文件生成...

-- 德里克

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

就我而言,当我将 CodeBehind 添加到 @Page 部分时,它已修复。

【讨论】:

【参考方案9】:

我知道我迟到了,但我想如果在尝试了@Glenn Slaven 接受的答案和@Espo 当前评分最高的答案之后,你仍然不走运,以下可能会拯救一些人有点麻烦。

用户控件 (.ascx) 是我不断停止自动生成的东西。我发现在我在用户控件中使用其他用户控件的情况下,它会破坏自动生成。

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

之后,我保存文件,这会提示自动生成重新生成,并且我已备份并运行。

【讨论】:

【参考方案10】:

我知道这是一个老话题,但我只是想添加一个尚未建议的解决方案。

我在资源文件中遇到了同样的问题。我在 Visual Studio 之外对其进行了编辑,并且设计器文件没有正确更新。

重命名文件可以重新生成 Designer 文件。我只是再次将其重命名为初始名称,并且效果很好!

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

对于 VS2015...这是一个 VB 示例,用于从网站项目切换到对我有用的 Web 应用程序项目。其他解决方案都不适合我,这就是我分享这个的原因。它并不优雅,但很有效。

步骤 0:将项目中的所有“CodeFile=”替换为“CodeBehind=” 步骤 1:关闭解决方案。 第 2 步:使用以下代码(以下步骤)运行本地开发的 Windows 应用程序。 第 3 步:重新打开解决方案。 第 4 步:在解决方案资源管理器中,确保您正在显示所有文件,然后搜索 Designer.vb(或 C# 的 Designer.cs) 第 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("*01", maskStart, maskEnd)))
        
            string designerFileName = file.Name.Replace(string.Format("01", maskStart, maskEnd), string.Format("0.designer1", maskStart, maskEnd));
            if (directory.GetFiles(designerFileName).Length == 0)
            
                using (fs = File.Create(Path.Combine(directory.FullName, designerFileName)))
                
                    fs.Close();
                
            
        
    

【讨论】:

【参考方案13】:

我以为我遇到了这个问题并且正在扯掉我的头发,但后来我意识到我试图从静态方法中引用一个控件。

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

【讨论】:

【参考方案14】:

    关闭designer.cs。

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

    右键单击 -> 刷新。

    保存

【讨论】:

根本不工作【参考方案15】:

我的一个解决方案,对我有用。

    关闭 Visual Studio 移除隐藏的 .vs 目录 删除现有的 .sln 文件 使用 .csproj 文件在 Visual Studio 中加载项目

【讨论】:

【参考方案16】:

在 Visual Studio 2019 中,步骤如下:

    创建webform1.aspx 复制你的aspx代码并粘贴到webform1.aspx 编译你的项目你应该在webform1.aspx.designer.cs里面有设计器代码 现在您可以复制设计器代码并在原始网络表单中使用。

【讨论】:

【参考方案17】:

如果您在使用 Visual Basic 2019 时看到此问题并单击“永久删除此文件”确认,则可以从回收站中恢复 Designer.cs 文件...它将在 Visual Basic 中自动重新生成。我只是这样做并找到了我的文件。

【讨论】:

【参考方案18】:

解决方案是我将.csproj中的None更改为Compile文件

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

【讨论】:

以上是关于你如何强制 Visual Studio 为 aspx/ascx 文件重新生成 .designer 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Docker Tools如何从头开始强制容器重建

如何强制 Visual Studio 为运行 Kestrel 的 .NET Core Web 应用程序重新创建 SSL 证书?

强制 Visual Studio 2010 将 CSS 放置在非内联文件中?

使用Visual Studio Code创建第一个ASP.NET Core应用程序

我可以强制 Visual Studio 使用 mingw 编译器吗

Visual Studio 2017 强制站点通过 https 加载,即使禁用了 ssl (Dotnet core 2.2)