如何删除ASP.NET Designer.cs文件?

3

我之前曾经处理过在VS项目中不存在.designer.cs文件的情况。

现在我在另一台电脑上开始了一个新项目,但却无法摆脱designer.cs文件的困扰。这真的很恼人。我是否真的需要它?如何移除它?一定有某个设置可以解决。


3
你正在处理的是一个网络应用程序,而不是一个网站。https://dev59.com/kHRC5IYBdhLWcg3wJNgN#398049 - canon
2
请保留设计师文件,它们是必不可少的。 - Daniel A. White
你的项目是否在源代码控制下? - Yusubov
不,我的项目没有进行源代码控制,这会有什么影响吗? - Adam Nathan
我同意,你应该能够隐藏它们。因为它们是自动生成的,所以你不需要编辑它们,也不能更改它们,因为任何更改都不会持久保存。那么为什么我还需要看到它们? - user3308043
3个回答

3

是的!你可以删除它们......以下是方法......

如何从Web应用程序中删除Designer.cs页面

经过长时间的努力和测试,我终于找到了一种避免在Visual Studio(版本2015及更早版本)中出现designer.cs页面的方法。如果任何人在Visual Studio中的Web应用程序项目中陷入了designer.cs页面的困境,此解决方案将使您能够快速消除所有应用程序编译错误,然后完全从项目中删除designer.cs页面。

首先要理解以下内容:

Web应用程序项目使用由Visual Studio自动生成的designer.cs页面(部分类),这些页面与Web应用程序内置的设计工具相关联,该Web应用程序模型维护此类工具。我称其为“傻瓜网站”。我找不到任何设置或关闭生成部分类和designer.cs页面的方法,因为它们通常是与IDE相关而不是与应用程序的功能相关的不必要代码。所有部分类最终都编译为一个类。Web应用程序也一般是预编译或提前构建的,并且这些dll被推送到bin文件夹中。

Web站点项目不使用designer.cs文件,与IDE关系较少。它们允许更干净的类结构编码。它们也使用部分类。但Web站点项目通常在运行时编译。

解决方案-如何从Visual Studio Web应用程序项目中删除“...designer.cs”错误和文件。

除非您想将Web项目从应用程序模型转换为Web站点模型,否则以下解决方案允许您按原样运行项目,但是像Web站点一样,在其中可以将大多数或所有designer.cs部分类控件引用从该文件移动到主网页部分类文件中。它还消除了所有错误,并且不会干扰Visual Studio在其他开发人员共享它们并添加控件到页面并忘记在特定页面上使用此解决方案的情况下重新创建那些设计师文件。

  1. 在前端.aspx页面中,在@PAGE指令顶部,将“CodeBehind”更改为“CodeFile”。确保它仍然引用相同的.cs代码或类文件。

  2. 在您的网页中,向相同的@Page指令添加“CodeFileBaseClass”属性,并使其访问相同的.cs完全限定路径以及路径中的任何命名空间。

  3. 确保使用与“CodeFileBaseClass”相同的路径使用“Inherit”属性。

每个Web应用程序中的每个网页都应具有以下格式化的属性:

<%@ Page Language="c#" CodeFile="index.aspx.cs" CodeFileBaseClass="YourNameSpace.index" 
 Inherits="YourNameSpace.index" %>

现在,请进入您页面的 designer.cs 文件,并将任何控件引用从 designer 文件的局部类中复制到主 .cs 文件的局部类中。如果您已经失去了 designer.cs 文件,只需将任何 Web 控件作为字段引用添加为编译器说丢失的字段。在这样做之后删除 designer.cs 文件。您不需要它们,并且可以使用主 .cs 文件及其局部类完全控制您的 Web 页面控件。
以下是我在删除之前在 designer.cs 文件中拥有的内容。下面是我的项目的主索引 index.aspx.cs 文件,在其中将设计者.cs 控件引用作为其局部类中的字段添加。然后,我从项目中完全删除了 designer.cs 文件及其代码:
namespace YourNameSpace
{
public partial class WebForm1
{

    /// <summary>
    /// form1 control.
    /// </summary>
    /// <remarks>
    /// Auto-generated field.
    /// To modify move field declaration from designer file to code-behind file.
    /// </remarks>
    protected global::System.Web.UI.HtmlControls.Literal Message1;
}
}

在我的index.aspx.cs文件中,您可以看到我将设计师最后一个"Message1"引用行从顶部复制到其局部类中。然后,在我的Page_Load事件中,您可以看到我如何访问网页文字控件Message1并修改其文本。这表明现在已正确引用并编译,而以前如果缺少designer.cs文件或其局部类失败,则此类引用将失败:
namespace YourNameSpace
{
public partial class index : System.Web.UI.Page
{
    protected global::System.Web.UI.WebControls.Literal Message1;

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Message1.Text = "hello world";
    }
}
}

关键在于主网页中@Page指令中的CodeFileBaseClass和CodeFile属性。这可以防止Visual Studio IE自动生成新成员引用和控件,并将其作为存根固定在设计师页面的部分类中(对于想要在单个便捷区域完全控制这些字段的人来说,这不是有帮助的)。
注意:如果您稍后通过在VS中选择项目,然后在顶部菜单中选择“转换为Web应用程序”来重新生成项目的designer.cs文件,则这些designer.cs文件将被重新创建,但是Visual Studio仅会在其中放置缺少的Web控件引用,这些控件现在未添加到您的主要.cs部分类页面中。换句话说,我在index.aspx.cs部分类文件中复制并添加的任何引用都不会在新的designer.cs文件中重新创建。因此,您使用的Web应用程序模型没有冲突。当您看到那些设计师文件时,现在开发人员可以安全地将它们复制到您的主代码后面的.cs文件中,并且如果您愿意,可以安全地删除设计师文件。

2

你正在处理一个Web应用程序而不是一个网站(澄清)

是的,在Web应用程序的上下文中,你确实需要它们。


0

真正的“答案”是让微软允许你不使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接