我有一个ASP.NET 3.5网站(视觉工作室术语),但该网站继续增长,并且看起来相当牛仔等等.我希望看到它转换为Web应用程序(命名空间和所有).
这可以在Visual Studio中轻松完成吗?如果没有,那么还有其他工具可以自动创建所有命名空间等吗?
好吧,事实证明"网站"不存在"转换为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应用程序"中包含具有此类名称的文件夹.
我以前知道这个,但现在忘了它,因为我没有长时间使用"网站"模型:(.
如果您的网站应用程序增长...最好将其拆分为多个项目.从Web站点项目转换为Web应用程序项目无济于事.
如果在构建新的Web应用程序项目时遇到问题,请检查Visual Studio中所有“帮助程序”类的“文件属性”。对于一个项目,我正在将“构建操作”设置为“内容”,而应将其设置为“编译”。