当.resx文件更改时,应用程序域将重新启动。任何方式来避免这种情况?

问题描述:

我有一个ASP.NET应用程序,其中包含许多用于本地化用户控件和页面的.resx(资源)文件。当.resx文件更改时,应用程序域将重新启动。任何方式来避免这种情况?

我们希望这些文件可以即时编辑。

但是,我们已经注意到,在Web服务器上编辑这些文件会导致应用程序域重新加载,导致服务器在应用程序域重新启动时放慢大约一分钟。

有没有办法允许在不导致应用程序域重新启动的情况下编辑这些文件?

在*上有这个问题的几种风味;重复答案,是的,这绝对有可能。

与.NET相似,资源提供者是可扩展的。

我认为内置的资源提供程序(即.resx编译为.resources)对于以Web为中心的部署来说是一个不幸的错配。

如果您的设置主要是字符串,你可以在一个简单的UpdatableResXResourceProvider使用外挂内置ResXResourceReader从现有的* .resx文件阅读。

结果缓存在应用程序缓存中。

无组件生成 - 更新会立即阅读,就像他们将与其他任何基于文件的的CacheDependency - 多项更新,可以在运行时被应用。

唯一需要注意的是,如果你不想禁用内置FCNs,你必须在* .resx文件移动到屏蔽的App_Data文件夹(与生成后步骤平凡完成)。

您可以在这里下载UpdatableResXResourceProviderhttp://www.onpreinit.com/2009/06/updatable-aspnet-resx-resource-provider.html

blog post应该帮助你。我怀疑其这样:

重新汇编(ASPX, ASCX或ASAX)的数量超过由machine.config中或 web.config中 设置中指定限制 (默认设置为 15)

+0

我关注正在增加对numRecompilesBeforeAppRestart值。如此处所述http://blogs.msdn.com/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx#9896689 ...它会消耗更多的内存。我们需要RAM来缓存我们的应用程序,所以我认为它不会很好地扩展。 – frankadelic 2009-12-04 21:23:09

+0

我同意,我不认为这是最佳做法。您可能可以通过应用程序来执行一些程序集加载,以使它们变为可用而不是重新编译。 – 2009-12-05 21:00:46