我有一个ASP.NET 3.5网站(视觉工作室术语),但该网站继续增长,并且在其他方面看起来相当牛仔。我希望看到它转换为Web应用程序(命名空间和所有)。
这是否可以在Visual Studio中轻松完成?如果没有,那么还有其他工具可以自动创建所有命名空间等吗?
答案 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 您正在使用的项目类型。确实如此 获取“App_Code”文件夹中的所有代码 为它创建一个新的程序集。这个 如果您在名为的文件夹中有代码 “App_Code”,你最终会得到RUNTIME 编译错误相同的类型 存在于两个集合中,一个 由VS创建,由创建者创建 IIS / ASP.NET开发服务器。至 避免这样做。离开“Old_App_Code” 具有相同的名称,或重命名为 除了之外:“App_Code”。不要 将任何代码放在这样的“App_Code”中 文件夹,并且优先没有 在“网络”中具有此类名称的文件夹 应用程序“at all。
我以前就知道这件事,但忘记了 现在我没有使用“网站”模型 长期:(。
答案 1 :(得分:11)
如果您的网站应用程序增长...最好将其拆分为多个项目。从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文件。
public partial class FolderName_Projectname : Page
如果需要,请使用Resharper或手动重命名所有文件。
如果您遇到多个错误,例如"There is already a member Page_Load() defined"
,则很可能是由于错误的类名和重复使用CodeFile
替换所有aspx页面中的Codebehind
,尤其要注意子文件夹中的文件。确保Inhertis=""
不包含相对路径。您的命名空间可以处理所有事情。所以正确的格式是Inherits="Namespace.classname"
。
如果您的类具有名称空间NaSpa和文件名foo.cs,那么它将是Inherits="NaSpa.foo"
准备好所有文件后(不要忘记母版页),运行&#34;转换为Web应用程序&#34;。如果您之后遇到错误,请冲洗并重复。
如果您遇到排序错误&#34;找不到TextBoxName,您错过了引用&#34;,请确保您没有忘记清理您的aspx页面。一个好的指标是检查自动生成的设计器文件。如果TextBoxName
没有显示在那里,则转换未完全成功。
答案 6 :(得分:0)
默认的ASP名称空间似乎不再起作用。所以我似乎无法从页面外调用我的User Controls.ascx页面。给它们一个命名空间并将默认值从ASP更改为我的命名空间似乎有效。