如何在不删除目标文件夹内容的情况下使用 Visual Studio 2008 中的“发布”功能?
Posted
技术标签:
【中文标题】如何在不删除目标文件夹内容的情况下使用 Visual Studio 2008 中的“发布”功能?【英文标题】:How can I use the "Publish" function in Visual Studio 2008 without erasing the contents of the target folder? 【发布时间】:2008-12-10 22:02:31 【问题描述】:当我在 Visual Studio 2008 中使用 Build->Publish Web Site 时,大多数时候它会编译站点,然后简单地问我“目标文件夹中的所有文件都将被删除。继续吗?” (或类似的东西)。但是,有时,在 Visual Studio 中发布项目时,我会看到一个对话框,让我可以选择完全替换文件夹的内容,或者只是用较新的版本替换更改的文件。
我更喜欢在不完全删除文件夹的情况下发布,因为部署的应用程序会在使用时创建用户文件和缓存文件,我不想采取额外的步骤来保存。但是,我不确定为什么 Visual Studio 并不总是给我这个选项。这是我可以更改的设置吗?它是否与我正在使用的 .NET 版本相关联?
感谢任何见解!
编辑 - 2009-01-20 的后续行动
我还没有弄清楚,但这里有更多信息。
这是我的 Win XP 桌面上一个 ASP.NET 项目的发布功能的样子:
这是我的 Vista 笔记本电脑上不同项目的外观:
请注意第二个屏幕截图中的单选按钮,允许我选择在发布之前删除文件夹的内容,或仅覆盖匹配的文件。我希望每个项目都有这些选项。
两台计算机都运行 Visual Studio 2008 Professional(版本 9.0.30729.1 SP,根据 Help->About)。完全相同的版本。而且我怀疑操作系统差异导致了此功能更改。这一定是某个地方的设置,对吧?有人知道吗?
【问题讨论】:
【参考方案1】:John 是对的,唯一的区别是您的一个项目是 Web Site Project,另一个是 Web Application project。除非您在 Web 应用程序项目中,否则您不会看到“转换为 Web 应用程序”选项。我知道……这是非常具有误导性的。这背后的原因源于你convert to a web application project的方式。如果您打算转换它(这可能是一个真正的痛苦,取决于它的设置方式),那么您需要注意一些差异:
在 Web 应用程序项目 中,所有内容都已预编译,所有代码隐藏页面都将被编译为 .dll ---- 在 Web 站点项目 中没有任何内容项目是预编译的,编译器将编译所有内容以确保其有效,但不会上传任何已编译的页面。当用户第一次尝试访问该站点时,每个页面都会被编译成自己的 dll。这意味着在网站项目中,您可以上传单个代码隐藏文件。
命名空间 - 在 Web 应用程序项目 中,默认情况下会在 Web 站点项目 中创建命名空间,但它们不是。因此,如果您打算转换它们,您可能需要花一些时间来添加它们。
项目文件 - 您会注意到 网站项目 没有 Web 应用程序项目 所具有的“cproj”文件。
我已经转换了其中一些项目,只要“app_code”文件夹中的代码不多,我发现它们运行得相当顺利。你可以试一试,看看它是多么容易,如果它看起来会很痛苦,我建议FileZilla 只是 FTP 它并省去一些头痛。
祝你好运
【讨论】:
【参考方案2】:该对话框对于网站项目和 Web 应用程序项目是不同的。在我的 MVC 项目(Web 应用程序项目)中,我看到了其他选项。在我的常规网站项目中,我看到发布的第一个对话框。
【讨论】:
嗯...这是一个有用的观察。但你确定这是唯一的区别吗?我很确定我上面提到的两个项目都是常规的网站项目。当我右键单击解决方案时,具有非覆盖选项的选项将“转换为 Web 应用程序”作为选项。 在我的机器上,这就是区别。您是在使用 Web 部署项目还是已安装?【参考方案3】:不确定此选项是否适合您,但您可以使用解决方案资源管理器中的复制网站功能。点击解决方案资源管理器顶部的“复制网站”图标。
【讨论】:
【参考方案4】:我认为你的问题的真正答案是你应该把你的用户文件和缓存文件放在其他地方。
在发布网站时,Visual Studio 旨在确保目标文件夹包含您的网站文件,绝对没有其他内容。
【讨论】:
理想情况下,是的。但我不是我组织中唯一的开发人员,有些事情是我无法控制的。【参考方案5】:显然,此功能将在 VS2010 中推出 - 这就是 Vishal Joshi 在 TechEd EMEA 会议“PDC307:Microsoft Visual Studio 10:Web 开发未来”中宣布的内容
【讨论】:
但是我在VS2008中已经有了!我只是不明白为什么它似乎适用于某些项目而不适用于其他项目。 看起来它们是不同的项目类型——一种是网站或应用程序项目,一种是 Web 部署项目。问题是,使用任一部署站点仍将删除不属于项目的所有文件 - Vista 将不会上传未更改的文件。【参考方案6】:网站已从更新层中的网站更新。
【讨论】:
呃……什么?我不明白。以上是关于如何在不删除目标文件夹内容的情况下使用 Visual Studio 2008 中的“发布”功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不实际提取文件的情况下使用 VBScript 读取 .zip 文件的内容?
ccache 在不删除 CMake 文件的情况下不会命中缓存