如何将ASP.NET网站转换为ASP.NET Web应用程序

时间:2009-04-09 16:54:27

标签: asp.net visual-studio web-applications

我有一个ASP.NET 3.5网站(视觉工作室术语),但该网站继续增长,并且在其他方​​面看起来相当牛仔。我希望看到它转换为Web应用程序(命名空间和所有)。

这是否可以在Visual Studio中轻松完成?如果没有,那么还有其他工具可以自动创建所有命名空间等吗?

7 个答案:

答案 0 :(得分:97)

  

嗯,事实证明“网站”不存在“转换为网络应用程序”选项。 “转换为Web应用程序”选项仅适用于“Web应用程序”!!!!

     

[强调我的]

     

所以,这是交易,做的   转换,你需要:

     
      
  • 在VS 2008解决方案中添加新的“Web应用程序”(文件 - >添加 - >新增   项目 - > C# - > Web-> ASP.NET Web   应用程序)。

  •   
  • 之后,您将旧“网站”中的所有文件复制到新的文件中   创建了“Web应用程序”,以及   覆盖由其创建的任何文件   默认

  •   
  • 下一步是最难看的,你需要“手动”添加引用   在你的“网站”中新的“网络”   申请“。我认为VS 2008   PowerCommands玩具会为我做这件事   因为它复制了其他的引用   项目类型,但它没有。你有   自己动手,手动,和   你必须在这一步中保持谨慎   如果你有多个版本的   同样的程序集(就像我的AJAXToolkit一样)   case)或同时具有GAC的程序集   和本地版本左右。

  •   
  • 继续重复最后一步并尝试构建“Web应用程序”。   你会不断收到像“   '....'是未知的命名空间。你是   缺少装配参考? “。制作   确定你没有那些除了   其中'....'被替换为   您使用的服务器控件的ID。在   换句话说,继续添加引用   并且只建立项目   由于存在的错误   缺少.DESIGNER.CS或.DESIGNER.VB   文件。

  •   
  • 然后,转到VS中的“Web应用程序”根项目节点   2008解决方案资源管理器,对吧   点击它,然后你会发现   选项“转换为Web应用程序”。   这个选项实际上是做什么的   对“@Page”进行小的更改   页面和页面的“@Control”指令   控件,并创建所需的   .DESIGNER.CS或.DESIGNER.VB文件。

  •   
  • 再次尝试构建“Web应用程序”。如果您遇到错误,请查看内容   引用可能会丢失和/或去   单击“转换为Web应用程序”   再次。有时,如果有任何错误   除了因失踪而造成的   DESIGNER文件,不是全部   页面/控件将具有这些   为他们创建的DESIGNER文件。   修复非DESIGNER问题和   单击“转换为Web应用程序”   再次应该为此做好准备。

  •   
  • 一旦你成功完成VS构建,你应该准备好了。   开始测试您的Web应用程序。   或者,您可以右键单击   “web应用程序”中的根项目节点   VS 2008 Solution Explorer并单击   “属性”然后转到“Web”选项卡   将“Web应用程序”设置为a   IIS中的虚拟文件夹(您可以创建   从那里开始的新虚拟目录   VS)。如果要使用IIS   虚拟目录那个老   使用“网站”,你需要删除   来自IIS的那个。

  •   
  • 更新:在测试您的网页时,请注意最重要的课程   “App_Code”文件夹,尤其是那些   没有NAMESPACE。那些可能很大   陷阱。我们有两个问题   扩展方法重载相同   没有命名空间的静态类,一个   延长DateTime? (可空)   并调用另一个重载   扩展DateTime本身。打电话给   其他重载作为扩展方法   通过VS 2008汇编并给了我们   仅在RUNTIME中的编译错误   (使用IIS)。将呼叫改为   调用它的其他重载   调用它的扩展方法   常规静态方法(仅改变   同一个类中的调用,来自的调用   其他课程仍在延期   方法调用)确实解决了这个,但是   显然,它并不像它使用的那样安全   在VS 2005中。尤其是   没有命名空间的类。

  •   
  • Update2:在转换过程中,VS 2008将您的“App_Code”重命名为   “Old_App_Code”。这个新名字听起来   丑陋,但不要重新开始。在   所有代码都是“Web应用程序”模型   将在一个集会。在运行时,   Web服务器不知道什么是Web   您正在使用的项目类型。确实如此   获取“Ap​​p_Code”文件夹中的所有代码   为它创建一个新的程序集。这个   如果您在名为的文件夹中有代码   “App_Code”,你最终会得到RUNTIME   编译错误相同的类型   存在于两个集合中,一个   由VS创建,由创建者创建   IIS / ASP.NET开发服务器。至   避免这样做。离开“Old_App_Code”   具有相同的名称,或重命名为   除了之外:“App_Code”。不要   将任何代码放在这样的“App_Code”中   文件夹,并且优先没有   在“网络”中具有此类名称的文件夹   应用程序“at all。

  •   
     

我以前就知道这件事,但忘记了   现在我没有使用“网站”模型   长期:(。

答案 1 :(得分:11)

MSDN

Walkthrough: Converting a Web Site Project to a Web Application Project in Visual Studio

如果您的网站应用程序增长...最好将其拆分为多个项目。从Web站点项目转换到Web应用程序项目无济于事。

答案 2 :(得分:4)

如果您在构建新的Web应用程序项目时遇到问题,请检查所有“帮助程序”类的Visual Studio中的文件属性。对于一个项目,我正在将Build Action设置为Content,而它应该是Compile。

答案 3 :(得分:3)

在VS 2010中创建新的Web应用程序 1.使用Windows资源管理器将所有文件复制到项目文件夹中 2.在VS 2010解决方案资源管理器中显示所有文件 3.选择文件和文件夹 - 右键单击​​项目中的包含。
4.右键单击项目解决方案资源管理器,然后选择“转换为Web应用程序”。

存在相当多的小差异,例如App_Code文件夹将被重命名为old_app_code - 这令人惊讶地不会导致任何错误。对象数据源上的TypeName和@Page标记上的继承可能需要[ProjectName]。全局附加前缀。例如,如果您的类型名称是“BusinessLogic.OrderManager”,并且您的项目名称是InventorySystem,则需要将其更改为InventorySystem.BusinessLogic.OrderManager。此外,一些显示更改,例如必需的字段验证器不再默认为红色字体,它们默认为黑色。

答案 4 :(得分:3)

我最初面临同样的问题。在阅读了Wrox Professional ASP.NET 4.0之后,我找到了以下解决方案。

我首先创建了一个新的Web应用程序。将所有网站文件复制到Web应用程序文件夹中。右键单击该应用程序,然后单击“转换为Web应用程序”。

您可能会问为什么需要将网络应用转换为网络应用。答案是,当您创建网站时,您只需编码.cs文件,无论何时需要。 然而,Web应用程序会自动为代码和设计部分声明.design.cs(或.vb)和.cs文件。

NEXT:删除所有手动引用,例如PAGE指令中的“Inherits”属性,以及网站中的其他文件,因为名称空间将集中引用这些类。

我也遇到了问题,因为我的项目中没有包含OBJ和BIN文件夹。 如果您认为自己缺少BIN和OBJ文件夹,只需单击解决方案资源管理器中的“显示所有文件”图标,然后右键单击缺少的文件夹并添加到项目中。 (以确保他们与项目一起编译。)

<强>更新 正如@deadlychambers在评论中指出的那样:您可以通过执行“Ctrl + Shift + F”搜索到处,然后搜索Inherits="(.*?)"。这将找到所有事件,并可能为您节省一些时间!

答案 5 :(得分:2)

我现在已经成功地将一个网站项目迁移到了一个Web应用程序,并且有一些问题需要注意。

让ReSharper可以帮助您重构aspx文件。

  1. 设置解决方案并创建一个空的WebApplication
  2. 复制所有文件
  3. 网站项目中的aspx文件没有namspace。将您的类包装在适当的命名空间中
  4. 在复制过程中,子文件夹中的所有页面都重命名为我的项目名称和foldername,因此我得到了40 public partial class FolderName_Projectname : Page如果需要,请使用Resharper或手动重命名所有文件。 如果您遇到多个错误,例如"There is already a member Page_Load() defined",则很可能是由于错误的类名和重复
  5. 造成的
  6. 添加名称空间后
  7. 使用CodeFile替换所有aspx页面中的Codebehind,尤其要注意子文件夹中的文件。确保Inhertis=""不包含相对路径。您的命名空间可以处理所有事情。所以正确的格式是Inherits="Namespace.classname"。 如果您的类具有名称空间NaSpa和文件名foo.cs,那么它将是Inherits="NaSpa.foo"

  8. 准备好所有文件后(不要忘记母版页),运行&#34;转换为Web应用程序&#34;。如果您之后遇到错误,请冲洗并重复。 如果您遇到排序错误&#34;找不到TextBoxName,您错过了引用&#34;,请确保您没有忘记清理您的aspx页面。一个好的指标是检查自动生成的设计器文件。如果TextBoxName没有显示在那里,则转换未完全成功。

  9. 解决所有遗漏的依赖项。
  10. 构建

答案 6 :(得分:0)

默认的ASP名称空间似乎不再起作用。所以我似乎无法从页面外调用我的User Controls.ascx页面。给它们一个命名空间并将默认值从ASP更改为我的命名空间似乎有效。