常见的 Web 项目转换问题及解决方3
点击次数:20 次 发布日期:2008-11-26 12:02:54 作者:源代码网
|
源代码网推荐 通知类型 源代码网推荐 报告中的每一项都属于以下三个类别之一: 源代码网推荐 源代码网推荐 • 注释 — 通知您向导采取的操作。您将看到许多关于已删除或移动的文件以及已删除或注释掉的代码的注释。注释只在转换报告的文本版本中列出,在 XML 版本中省略。 源代码网推荐 源代码网推荐 • 警告 — 每当向导不得不采取可能会在应用程序中导致行为更改或可能的编译错误的行动时,就会产生警告。警告是想要查看的项,但是可能不需要对其采取行动。 源代码网推荐 源代码网推荐 • 错误 — 如果向导遇到无法自动转换的内容,就会产生错误项。这些项需要进行特别处理才能完成转换。通常,错误是您尝试运行应用程序时会产生编译错误的东西。 源代码网推荐 源代码网推荐 源代码网推荐 返回页首 源代码网推荐 第 2 部分:常见的转换问题 源代码网推荐 虽然 Visual Studio 2005 旨在与使用 Visual Studio®.NET 2003 开发的代码一起工作,但是您可能会遇到一个或多个常见的转换问题。本节,我们将了解一些最常见的问题。 源代码网推荐 源代码网推荐 注 转换向导在 Visual Studio 2005 的最新版本中已经升级,并且可以自动检测和修复以下一些问题。然而,如果该向导遗漏了特定的问题,您可以手动应用下面描述的解决方案来完成 Web 项目的转换。 源代码网推荐 源代码网推荐 问题 1:代码隐藏类文件 (CB-CB) 引用 源代码网推荐 源代码网推荐 注CB 是 Web 窗体 (*.aspx) 或用户控件 (*.ascx) 的代码隐藏文件的缩写。 源代码网推荐 源代码网推荐 新的编译模型使用多个通常在服务器上动态编译的程序集。该模型改善了 Web 站点的性能和可更新性。 源代码网推荐 源代码网推荐 然而,如果您的代码隐藏文件引用其他的代码隐藏文件,那么您将有一个中断的引用,这是因为引用的代码隐藏文件将不再位于同一个程序集中。 源代码网推荐 源代码网推荐 以下是一些可能引发此问题的常见方式: 源代码网推荐 源代码网推荐 • 使用 Web 窗体或用户控件作为另一个 Web 窗体或用户控件的基类。 源代码网推荐 源代码网推荐 • 使用 LoadControl() 并将结果转换为另一个用户控件,例如 源代码网推荐 UserControl1 c1 = (UserControl1)LoadControl("~/UserControl1.ascx"); 源代码网推荐 源代码网推荐 • 创建一个 Web 窗体类实例,例如 源代码网推荐 WebForm1 w1 = new WebForm1(); 源代码网推荐 ,其中 WebForm1 是在 Web 窗体的代码隐藏文件中定义的一个类。 源代码网推荐 源代码网推荐 源代码网推荐 如何修复 源代码网推荐 源代码网推荐 要解决此问题,需要更改应用程序以便找到该引用。因为这是一个 CB-CB 引用,所以解决问题的最简单方法是添加对进行该引用的 Web 窗体或用户控件的引用指令。这将通知编译器要链接到哪个程序集。 源代码网推荐 源代码网推荐 我们假设出现以下情况: 源代码网推荐 源代码网推荐 文件 ASP.NET 1.x 代码 源代码网推荐 Page1.ascx 源代码网推荐 - 源代码网推荐 源代码网推荐 Page1.ascx.cs 源代码网推荐 Control1 c = (Control1)LoadControl("~/Control1.ascx"); 源代码网推荐 源代码网推荐 源代码网推荐 将代码更改为使用引用指令: 源代码网推荐 源代码网推荐 文件 ASP.NET 2.0 代码 源代码网推荐 Page1.ascx 源代码网推荐 <%@ Reference Control="~/Control1.ascx" %> 源代码网推荐 Page1.ascx.cs 源代码网推荐 Control1 c = (Control1)LoadControl("~/Control1.ascx"); 源代码网推荐 源代码网推荐 源代码网推荐 通过使用引用指令,明确地通知编译器在哪里寻找您要使用的 Web 窗体或控件。请注意,在 Visual Studio 2005 的最新版本中,转换向导将自动执行此操作。 源代码网推荐 源代码网推荐 问题 2:独立类文件 (SA - CB) 引用 源代码网推荐 源代码网推荐 注SA 是独立类文件的缩写。 源代码网推荐 源代码网推荐 如果您有一个引用代码隐藏类文件中代码的独立类文件,则可能会遇到另一种中断的引用。这与中断的 CB-CB 引用类似,除了在 App_Code 文件夹中有一个独立类文件,该文件试图引用一个单独的页程序集。引发此问题的一个常见方式是访问 CB 类中的一个类变量。 源代码网推荐 源代码网推荐 如何修复 源代码网推荐 源代码网推荐 修复一个中断的 SA-CB 引用涉及的更多。由于该问题出现在 SA 文件中,因此不能使用引用指令来找到该引用。而且在转换后,SA 文件移动到 App_Code 文件夹,因此该类文件将无权在编译时访问 App_Code 程序集。 源代码网推荐 源代码网推荐 解决方案是在编译时引用的 App_Code 文件夹中创建一个抽象的基类,该基类将在运行时从页程序集中加载实际的类。 源代码网推荐 源代码网推荐 我们假设出现以下情况: 源代码网推荐 源代码网推荐 文件 ASP.NET 1.x 代码 源代码网推荐 Control1.ascx 源代码网推荐 inherits="Control1" 源代码网推荐 源代码网推荐 Control1.ascx.cs 源代码网推荐 class Control1 : System.Web.UI.UserControl { public static string myName = "Control1"; public void foo() { some code } } 源代码网推荐 源代码网推荐 Code1.cs 源代码网推荐 String myName = "Class1 + " + Control1.myName; 源代码网推荐 源代码网推荐 源代码网推荐 更改代码以使用抽象基类: 源代码网推荐 源代码网推荐 文件 ASP.NET 2.0 代码 源代码网推荐 Control1.ascx 源代码网推荐 inherits="migrated_Control1" 源代码网推荐 源代码网推荐 Control1.ascx.cs 源代码网推荐 class migrated_Control1 : Control1 { override public void foo() { some code } } 源代码网推荐 源代码网推荐 App_CodeCode1.cs 源代码网推荐 String myName = "Class1 + " + Control1.myName; 源代码网推荐 源代码网推荐 App_CodeStub_Control1.cs 源代码网推荐 abstract class Control1 : System.Web.UI.UserControl { public static string myName = "Control1"; abstract public void foo(); } 源代码网推荐 源代码网推荐 源代码网推荐 由于抽象基类现在位于 App_Code 文件夹中,因此允许独立类文件和 CB 文件在编译期间找到一个类(本例中名为 Control1)。然而,独立类文件将在运行时使用后绑定加载原始类(在本例中,重命名为 migrated_control)。注意:在 Visual Studio 2005 的最新版本中,转换向导将自动创建此代码。 源代码网推荐 源代码网推荐 问题 3:循环引用 源代码网推荐 源代码网推荐 如果代码隐藏文件引用其他代码隐藏 源代码网推荐 源代码网推荐 文件,这个被引用的代码隐藏文件又引用原始文件,就会发生循环应用。这种情况可能发生在两个或更多代码隐藏文件中,例如: 源代码网推荐 源代码网推荐
源代码网推荐 还会发生在程序集之间,其中一个程序集引用另一个 源代码网推荐 源代码网推荐 程序集,引用的程序集又引用原始程序集,例如: 源代码网推荐
源代码网推荐 如何修复 源代码网推荐 源代码网推荐 第一种循环引用的解决方案是:用其中一个引用在 App_Code 文件夹中创建一个抽象基类,然后从相关联的 Web 窗体或用户控件文件中删除引用指令。这将破坏循环引用。 源代码网推荐 源代码网推荐 第二种循环引用是 ASP.NET 编译器由于性能原因而“批处理”程序集的副产品。默认情况下,它将 Web 窗体和用户控件放在一个文件夹中,然后将它们编译成一个程序集。 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
