我有一个ASP.NET 3.5网站(Visual Studio术语),但是该网站不断增长,看起来相当混乱。我希望将其转换为Web应用程序(包括命名空间等)。
这在Visual Studio中是否可以轻松完成?如果不能,是否有其他工具可以自动创建所有命名空间等?
我有一个ASP.NET 3.5网站(Visual Studio术语),但是该网站不断增长,看起来相当混乱。我希望将其转换为Web应用程序(包括命名空间等)。
这在Visual Studio中是否可以轻松完成?如果不能,是否有其他工具可以自动创建所有命名空间等?
向你的VS2008解决方案添加一个新的“Web应用程序”(文件->添加->新建项目->C#->Web->ASP.NET Web应用程序)。
之后,将旧“网站”中的所有文件复制到你新创建的“Web应用程序”中,并覆盖其中默认创建的任何文件。
下一步是最困难的,你需要在你的“网站”中“手动”添加到新的“Web应用程序”的引用。我以为VS2008 PowerCommands工具会像它从其他项目类型中复制引用一样帮我完成这个,但它没有。你必须自己手动完成,并且在这一步骤中必须小心,特别是如果你有多个版本的同一程序集(如我的AJAXToolkit)或既有GAC版本又有本地版本的程序集等。
重复上一步并尝试构建“Web应用程序”。你会不断收到像“'....'未知命名空间。是否缺少程序集引用?”这样的错误提示。请确保只有使用服务器控件ID替换'....'时,你没有缺少引用。换句话说,不断添加引用并构建项目,直到只存在由于缺少.DESIGNER.CS或.DESIGNER.VB文件而出现的错误提示。
之后,进入VS2008解决方案资源管理器中的“Web应用程序”根项目节点,并右键单击它,选择“转换为Web应用程序”。在弹出的对话框中,确保选中“当前解决方案中的所有内容”,然后单击“确定”进行转换。这时,你就将“网站”转换成了一个“Web应用程序”!
更新2:在转换过程中,VS 2008会将您的“App_Code”重命名为“Old_App_Code”。这个新名称听起来很丑陋,但请不要将其改回。在“Web应用程序”模型中,所有代码都将位于一个程序集中。在运行时,Web服务器不知道您正在使用哪种Web项目类型。它会获取“App_Code”文件夹中的所有代码并为其创建一个新的程序集。这样,如果您有一个名为“App_Code”的文件夹中的代码,您将遇到运行时编译错误,因为同一类型存在于由VS创建的程序集和由IIS/ASP.NET开发服务器创建的程序集中。为了避免这种情况,请将“Old_App_Code”保留为相同的名称,或将其重命名为除“App_Code”之外的任何名称。不要将任何代码放入此类“App_Code”文件夹中,并且最好根本不要在您的“Web应用程序”中拥有此类名称的文件夹。
我早就知道这一点,但现在已经忘记了,因为我很长时间没有使用“网站”模型了 :(。
如果你的网站应用程序变得越来越庞大,将其拆分为多个项目会更好。将Web Site项目转换为Web Application项目并不能帮助太多。
我已经成功将一个网站项目迁移到了Web应用程序,需要注意一些问题。
使用ReSharper可以帮助您重构aspx文件。
public partial class FolderName_Projectname : Page
如果必要,使用Resharper或手动重命名所有文件。
如果遇到多个类似于 "There is already a member Page_Load() defined"
的错误,则很可能是由于类名不正确或重复造成的。在所有aspx页面中将CodeFile
替换为Codebehind
,特别注意子文件夹中的文件。确保Inhertis = ""
不包含相对路径。您的命名空间会处理所有事情。因此,正确的格式是Inherits="Namespace.classname"
。
如果您的类具有命名空间NaSpa和文件名foo.cs,则为Inherits="NaSpa.foo"
在准备好所有文件之后(不要忘记主页面),运行“转换为Web应用程序”。如果之后遇到错误,请反复执行此操作。
如果遇到类似于“TextBoxName找不到,您是否缺少引用”的错误,请确保没有忘记对aspx页面进行消毒。一个很好的指标是检查自动生成的设计者文件。如果TextBoxName
在其中没有出现,则转换未完全成功。
默认的ASP命名空间似乎不再起作用了。因此,我无法从页面外部调用我的用户控件.ascx页面。给它们一个命名空间并将默认值从ASP更改为我的命名空间似乎可以解决问题。