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

RSo*_*erg 84 asp.net web-applications visual-studio

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

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

And*_*are 102

好吧,事实证明"网站"不存在"转换为Web应用程序"选项."转换为Web应用程序"选项仅适用于"Web应用程序"!!!!

[强调我的]

所以,这是交易,要进行转换,您需要:

  • 在VS 2008解决方案中添加一个新的"Web应用程序"(文件 - >添加 - >新建项目 - > C# - > Web-> ASP.NET Web应用程序).

  • 然后,将旧"网站"中的所有文件复制到新创建的"Web应用程序"中,并默认覆盖在其中创建的所有文件

  • 下一步是最难看的,您需要"手动"将"网站"中的引用添加到新的"Web应用程序"中.我认为VS 2008 PowerCommands玩具会为我做这个,因为它会复制其他项目类型的引用,但事实并非如此.您必须自己手动执行此操作,如果您有相同程序集的多个版本(例如我的AJAXToolkit)或同时具有GAC和本地版本的程序集,则必须在此步骤中保持谨慎.

  • 继续重复最后一步并尝试构建"Web应用程序".你会不断收到错误,比如"'....'是未知的命名空间.你错过了一个程序集引用吗?".确保除了"...."替换为您使用的服务器控件的ID之外,没有其他内容.换句话说,继续添加引用并构建项目,直到只有因缺少.DESIGNER.CS或.DESIGNER.VB文件而存在的错误.

  • 然后,转到VS 2008解决方案资源管理器中的"Web应用程序"根项目节点,右键单击它,然后您将找到"转换为Web应用程序"选项.此选项的作用实际上是对页面和控件的"@Page"和"@Control"指令进行小的更改,并创建所需的.DESIGNER.CS或.DESIGNER.VB文件.

  • 尝试再次构建"Web应用程序".如果您收到错误,请查看可能缺少的参考文件和/或再次单击"转换为Web应用程序".有时,如果除了因缺少DESIGNER文件而导致的任何错误之外,并非所有页面/控件都会为它们创建那些DESIGNER文件.修复非DESIGNER问题并再次单击"转换为Web应用程序"应该为此完成工作.

  • 一旦你成功完成VS构建,你应该准备好了.开始测试您的Web应用程序.(可选)您可以右键单击VS 2008解决方案资源管理器中的"Web应用程序"根项目节点,然后单击"属性",然后转到"Web"选项卡,将"Web应用程序"设置为IIS中的虚拟文件夹(您可以创建新的VS中的虚拟目录.如果要使用旧"网站"使用的IIS虚拟目录,则需要先从IIS中删除该目录.

  • 更新:测试页面时,请对"App_Code"文件夹中的类付出最多注意,特别是那些没有NAMESPACE的文件.那些可能是一个很大的陷阱.我们遇到了在没有命名空间的同一个静态类中有两个扩展方法重载的问题,一个扩展了DateTime?(Nullable)并调用另一个扩展DateTime本身的重载.调用另一个重载作为扩展方法传递VS 2008编译并仅在RUNTIME(使用IIS)中给出了编译错误.将调用更改为从另一个重载调用它作为扩展方法调用它作为普通的静态方法(只更改同一个类中的调用,来自其他类的调用仍然是扩展方法调用)确实解决了这个问题,但很明显,它不是以前在VS 2005中是安全的.特别是对于没有命名空间的类.

  • Update2:在转换期间,VS 2008将"App_Code"重命名为"Old_App_Code".这个新名字听起来很丑陋,但请不要重新开始.在"Web应用程序"模型中,所有代码都将在一个程序集中.在运行时,Web服务器不知道您正在使用的Web项目类型.它确实占用"App_Code"文件夹中的所有代码并为其创建新的程序集.这样,如果您在名为"App_Code"的文件夹中有代码,则最终会出现RUNTIME编译错误,这两个程序集中存在相同类型的错误,一个由VS创建,另一个由IIS/ASP.NET Development Server创建. .为了避免这种情况 保留具有相同名称的"Old_App_Code",或将其重命名为ANYTHING EXCEPT:"App_Code".不要在这样的"App_Code"文件夹中放置任何代码,并且根本不要在"Web应用程序"中包含具有此类名称的文件夹.

我以前知道这个,但现在忘了它,因为我没有长时间使用"网站"模型:(.

  • 步骤太多了.VS应该为我们做到这一点. (29认同)
  • 对于那些在VS2013上执行此操作的人,"隐藏到Web应用程序"已移至底部的"项目"菜单. (13认同)
  • 另外,查找要作为"内容"而不是"编译"复制的代码文件 (6认同)
  • @EricSassaman但对我来说,网站项目根本不存在. (3认同)
  • 您的链接在顶部被破坏,错误500 (2认同)

Kon*_*kus 12

演练:在MSDN的Visual Studio中将网站项目转换为Web应用程序项目

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


小智 5

如果在构建新的Web应用程序项目时遇到问题,请检查Visual Studio中所有“帮助程序”类的“文件属性”。对于一个项目,我正在将“构建操作”设置为“内容”,而应将其设置为“编译”。


Mar*_*rco 5

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

使用 ReSharper 对重构 aspx 文件有很大帮助。

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

  7. 准备好所有文件(不要忘记母版页)后,运行“转换为 Web 应用程序”。如果之后遇到错误,请冲洗并重复。如果您遇到“如果缺少引用,则无法找到 TextBoxName”之类的错误,请确保您没有忘记清理您的 aspx 页面。一个好的指标是检查自动生成的设计器文件。如果TextBoxName那里没有出现,则转换没有完全成功。

  8. 解决任何缺失的依赖关系。
  9. 建造