有没有办法让 App_Data 中的文件在发布时不会覆盖较新的文件?
Posted
技术标签:
【中文标题】有没有办法让 App_Data 中的文件在发布时不会覆盖较新的文件?【英文标题】:Is there a way to keep files in App_Data from overwriting newer files when publishing? 【发布时间】:2008-10-17 14:53:12 【问题描述】:我将 App_Data 中的 XML 文件与 Intranet 应用程序主页上的 Repeater 结合使用,允许我在用户登录时向用户显示有关应用程序状态、维护等的消息。为了测试功能,它会很好将文件放在正在开发的 App_Data 文件夹中,但是如果我这样做,它会在我发布应用程序时将其复制到生产服务器上的文件中。无论如何我可以防止这种情况发生,而不是去一个 Web 部署项目(这会解决我的问题)吗?
【问题讨论】:
【参考方案1】:在 Visual Studio 2005 中,我看到一个标记为“包括 App_Data 文件夹中的文件”的复选框,默认为选中状态。您是否尝试过在未选中该复选框的情况下发布?
编辑: 鉴于您的项目无法使用该复选框,我会考虑将 VS2005 Web Deployment add-on 用于 Visual Studio。我自己没有使用过它,但在调试和发布模式之间自定义发布的功能看起来很有希望。
【讨论】:
网站上似乎没有该复选框,也许它仅适用于 Web 应用程序。无论如何对我都不起作用,因为我还有其他需要发布的 XML 文件。【参考方案2】:为避免该问题,我还将部署到本地“暂存”位置,本质上是我桌面上的一个文件夹。一旦文件由 Visual Studio 编译并部署到那里,我将删除我不感兴趣的文件(在您的情况下为 App_Data),然后使用 XCopy 或使用 Windows 资源管理器将文件复制到 Web 服务器。
除了类似的东西,我知道没有办法让 Visual Studio 本身在部署时省略那些文件/文件夹。
【讨论】:
我现在测试开发中的功能的解决方法是不将文件包含在项目中,在打开文件的代码中设置断点,然后手动更改路径以使其看起来在我在 C:\Temp 中创建的文件中。我希望有办法排除某些文件。【参考方案3】:另一种方法是拥有一个“调试”文件和一个“生产”文件..
Stream xml;
#if DEBUG
xml = File.Open("debug.xml");
#else
xml = File.Open("release.xml");
#endif
在DEBUG模式下编译会使用debug文件,在release模式下编译会使用release文件。
【讨论】:
以上是关于有没有办法让 App_Data 中的文件在发布时不会覆盖较新的文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 App_Data 中的 MDF 文件上运行 SQL 脚本
如何为我的 ASP.NET Web 应用程序引用 App_Data 文件夹中的 Sqlite db 文件?