3

在没有 .designer.cs 文件之前,我从事过 VS 项目。

现在我在另一台计算机上开始了一个新项目,我无法摆脱 Designer.cs 文件。这真的让我很烦。我真的需要它,我该如何删除它?一定有某个地方的设置。

4

3 回答 3

2

您正在处理 Web 应用程序而不是网站(澄清

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

于 2012-12-13T20:21:43.517 回答
2

是的!你可以删除它们......这是如何......

如何从您的 WEB 应用程序中删除 DESIGNER.CS 页面

在经历了巨大的折磨和大量的测试之后,在 Visual Studio(v. 2015 及更早版本)中寻找避免 Designer.cs 页面的方法后,我终于找到了解决此问题的方法。如果有人在 Visual Studio 的Web 应用程序项目中遇到 Designer.cs 页面,此解决方案将允许您快速清除所有应用程序编译错误,然后从项目中完全删除 Designer.cs 页面。

首先了解以下内容:

Web 应用程序项目使用由 Visual Studio 自动生成的 Designer.cs 页面(部分类),这些页面与 Web 应用程序模型所支持的 Web 应用程序中内置的设计工具相关联。我称之为傻瓜网站。我找不到任何设置或方法来关闭部分类和 Designer.cs 页面的创建,因为它们通常是不必要的代码,更多地与 IDE 相关联,而不是应用程序的功能。无论如何,所有部分类都会编译成一个类。通常,Web 应用程序也可以通过设计提前预编译或构建,并且这些 dll 会被推送到 bin 文件夹中。

网站项目不使用 Designer.cs 文件,并且与 IDE 的联系较少。它们允许对类结构进行更清晰的编码。他们还使用部分类。但网站项目通常在运行时编译。

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

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

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

  2. 将“CodeFileBaseClass”属性添加到网页中的同一 @Page 指令中,并让它访问上述相同 .cs 的完全限定路径,路径中包含任何命名空间。

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

您的 Web 应用程序中的每个网页都应该具有以下属性,这些属性的格式如下:

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

现在进入页面的designer.cs 文件,并将设计器文件中部分类中的任何控件引用复制到网页的主.cs 文件的部分类中。如果您丢失了您的 Designer.cs 文件,只需将任何 Web 控件作为字段引用添加为编译器说缺少的字段。完成后删除 Designer.cs 文件。您不需要它们,并且可以使用主 .cs 文件及其部分类来完全控制您的网页控件。

以下是我在删除之前在 Designer.cs 文件中的内容。下面是我的项目的主要 index.aspx.cs 文件,我在其部分类中添加了 Designers.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 中选择您的项目再次为您的项目重新生成 Designer.cs 文件,然后在顶部菜单中选择“项目”>“转换为 Web 应用程序”这些 Designer.cs 文件将被重新创建,但 Visual Studio 只会在其中放置对缺少的 Web 控件的引用,这些控件现在未添加到您的主 .cs 部分类页面中。换句话说,我在上面复制并添加到我的 index.aspx.cs 部分类文件的任何引用都不会在新的 Designer.cs 文件中重新创建。因此与您使用的 Web 应用程序模型没有冲突。当您看到这些设计器文件时,您现在可以让开发人员将它们安全地复制到 .cs 文件后面的主代码中,并根据需要安全地删除设计器。

于 2017-02-21T17:42:22.107 回答
0

真正的“答案”是让 MS 简单地允许您不使用它们。

于 2022-01-27T01:38:13.263 回答