移到 App_Code 目录下的代码分离文件
运行转换向导之后,您可能会发现某些代码分离文件(例如,*.aspx.cs 或 *.ascx.vb)被移到 App_Code 目录下。这表明代码分离文件的内容页面含有格式不正确的 Codebehind 指令,并且没有进行正确设置。也就是说,转换向导不能确定该代码分离文件是否实际绑定到某个特定的 .aspx 页面。
转换向导会自动将所有独立类文件(例如,*.cs 或 *.vb)移到 App_Code 目录下。如果有格式不正确的 Codebehind 指令,那么代码分离文件将被视为独立类文件,并且被移到 App_Code 目录下。
请注意,Web 服务文件(例如,*.asmx 和 *.asmx.cs)与普通的内容页面及其代码分离页面不同。Web 服务文件的代码分离页面预计位于 App_Code 目录下,因此如果在此发现一个代码分离页面,它并不是错误。
如何修复
在转换之前,确保在所有内容页面中正确设置了 Codebehind 指令,即可避免此问题。
转换之后,将代码分离文件与相关联的内容页面移到同一目录下,并更正内容页面的 Codefile 指令(在 ASP.NET 2.0 中已重命名),以便指向该代码分离文件。
不再排除以前排除的文件
在 Visual Studio .NET 2003 中,您必须明确决定是否在 Web 项目中包含各个文件。如果未明确将某个文件列为包含文件,就会从项目中排除该文件。您还可以将代码文件的生成操作设置为“无”,从而停止生成该代码文件。此信息将存储在项目文件中。
在 Visual Studio 2005 中,在 Web 应用程序目录下找到的所有文件都被作为 Web 项目的一部分而隐式包含。由于没有项目文件,因此无法明确列出要排除的文件,也无法阻止将它们内置到项目中。这样一来,Web 项目中现在就可能包含额外的文件。编译器可能会根据文件的扩展名尝试编译文件,这将导致应用程序中产生冲突。
如果将文件的生成操作设置为“无”,则转换向导将不转换这些文件。由于这些文件被视为排除文件,因此转换向导无法确定这些文件是否必要。由于这个原因,向导将在转换报告中记录一条警告,指出没有转换项目结构中的某些文件。
如何修复
如果要转换排除文件,应在转换之前将该排除文件明确包含在 Web 项目中,并确保其生成操作没有被设置为“无”。
转换之后,您可以从项目中删除任何不想要的、以前排除的文件。还可以用安全的扩展名(例如“.exclude”)对它们进行重命名,以便有效地从 Web 应用程序中删除它们。重命名这些文件后,它们仍然是 Web 项目的一部分,但不能进行编译。
Visual Studio 2005 的最终版本将包含一个使您可以使用重命名机制排除和包含文件的上下文菜单项。最终版本还将做出一些更改,这些更改将阻止发布站点和命令行生成引擎 (MSBuild) 发布已排除的文件。ASP.NET 还将被配置为不使用 .exclude 扩展名提供文件。
部分转换的解决方案
在 ASP.NET 1.x 和 2.0 中,都有可能具有包含 Web 项目和客户端项目(例如 C# 类库或 Visual Basic 类库,或 Windows 应用程序)的解决方案。
如果您正在使用某个 Express 产品,例如 Visual Web Developer (VWD) 或 Visual Basic Express Edition,则只能在与该 Express 产品相关的解决方案中转换项目。例如,如果您正在使用 VWD 并打开一个含有 Web 项目和 Visual Basic 类库项目的解决方案,则只有 Web 项目会被转换,从而给您留下了一个部分转换的解决方案。
如何修复
您应使用 Visual Studio 2005 的 Standard、Professional 或 Team System 版本来转换包含多种混合项目类型的解决方案。
如果做不到这一点(您只有 Express Edition),则应创建一个仅包含该项目类型的新解决方案。
