【发布时间】:2011-07-28 17:36:12
【问题描述】:
我在 Windows 世界中并不是一个特别熟练的开发人员,我遇到了一个需要解释的问题。我希望在我的无知中,我遗漏了一些明显的东西。
我发现自己不得不反向编译预编译的 .NET 网站/应用程序。 Reflection 设法为我提供了我需要的 c# CodeFile,我花了很多时间来更改所有 .aspx 引用,如下所示:
<%@ page language="C#" autoeventwireup="true" inherits="someclassname, App_Web_Z8sdf" %>
对于这样的事情:
<%@ page language="C#" autoeventwireup="true" CodeFile="somefilename.aspx.cs" inherits="someclassname" %>
并将 aspx.cs 文件移动到与 .aspx 文件相同的目录中。
这让我可以在 Visual Studio 中以某种可编辑的形式实际加载项目。我在 2010 年和 2008 年都试过这个。
但是,现在我正在尝试构建这个项目。我得到的错误是:
"Missing partial modifier on declaration of type 'someclassname'; another partial declaration of this type exists"
很公平。我知道可以在多个地方声明类,并且每个都必须具有“部分”关键字才能使其正常工作。因此,我将 partial 关键字添加到发生错误的 aspx.cs 文件中的类定义中。这设法摆脱了该错误消息,并将其替换为
"The type 'someclassname' already contains a definition for 'some variable name".
它显然表现得好像在某个地方有另一个类定义。作为一名 unix 管理员,我开始在项目中的所有文件中搜索与相关类的名称匹配的字符串,并且我恰好在两个文件和两个文件中找到它。包含我引用的第一行的 aspx 文件,以及与之对应的包含类定义的 aspx.cs 文件。现在,我越来越糊涂了。
我阅读了一些论坛帖子,这些帖子表明 Visual Studio 将在其中创建带有部分类的“设计器”文件,这似乎很有希望,但我看不到这些设计器文件,即使我在 VS 中查看所有文件,当我查看磁盘上的目录,或者其他任何地方。显然,我错过了一些东西。也许我没有正确地从预编译的站点进行重构?也许 web.config 或其他文件中有一些设置需要更改?
任何帮助将不胜感激。
根据请求,某个类定义的通用版本
using System;
using System.Web;
using System.Web.Profile;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public class Some_Class_Name : Page, IRequiresSessionState
{
/// a bunch of variables defined like this
protected HtmlForm form1;
///a bunch of protected methods defined similarly to this
protected void LinkButtonReturn_Click(object sender, EventArgs e)
{
this.Session.Clear();
base.Response.Redirect("Default.aspx");
}
}
更新 这似乎是从预编译网站转换回源代码的结果。 .aspx.cs 文件包含它们不应该包含的控制字段定义(如果这是我天真地称之为“变量定义”的正确术语),并且缺少它们应该具有的部分声明。胡乱猜测,似乎这些定义实际上是由 aspx 文件隐含的,因此 aspx.cs 文件不需要它们。非常感谢 Dan Abramov 和其他所有发表评论的人。
【问题讨论】:
-
你能发布“someclass”的定义吗?
-
我可以发布一个通用版本。
-
我不是 WebForms 人,但您可以在删除所有控制字段(例如
form1)后尝试编译吗?不过我可能大错特错了。 -
如果您使用的是 Web 应用程序项目(而不是网站项目),那么会生成一个 Foo.aspx.designer.cs 文件,其中定义了每个控件。如果该文件不存在,您应该可以通过右键单击项目并使用“转换为 Web 应用程序”选项来创建它。
标签: .net visual-studio-2010 visual-studio-2008