当.resx文件更改时,应用程序域会重新启动。有什么方法可以避免这种情况发生吗?

3
我有一个使用许多.resx(资源)文件的ASP.NET应用程序,用于本地化用户控件和页面。
我们希望这些文件可以实时编辑。
然而,我们注意到在Web服务器上编辑这些文件会导致应用程序域重新加载,这会导致服务器在应用程序域重新启动期间变慢约一分钟。
有没有办法允许编辑这些文件而不会导致应用程序域重新启动?
2个回答

7
有几个关于这个问题的不同版本在Stackoverflow上,重申一下答案:是的,它绝对是可行的。
就像.NET的许多部分一样,资源提供程序是可扩展的。
我认为内置的资源提供程序(将.resx编译为.resources)与面向Web的部署不匹配,这是一个不幸的搭配。
如果您的设置主要是字符串,可以插入一个简单的UpdatableResXResourceProvider,它使用内置的ResXResourceReader从现有的*.resx文件中读取。
结果被缓存在应用程序缓存中。
不会生成任何程序集——更新立即读取,就像使用基于文件的任何其他CacheDependency一样——可以应用任意数量的更新。
唯一的注意事项是,如果您不想禁用内置的FCN,您必须将*.resx文件移动到受保护的App_Data文件夹中(可以通过后期构建步骤轻松完成)。
你可以在这里下载可更新的ResX资源提供程序:http://www.onpreinit.com/2009/06/updatable-aspnet-resx-resource-provider.html

1

这个博客文章应该可以帮到你。我怀疑问题出在这里:

重新编译(aspx、ascx或asax)的数量超过了machine.config或web.config中指定的设置限制(默认情况下设置为15)


我对提高numRecompilesBeforeAppRestart的值感到担忧。如此描述:http://blogs.msdn.com/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx#9896689 ...它将消耗更多的内存。我们的应用程序需要RAM进行缓存,因此我认为它不会很好地扩展。 - frankadelic
我同意,我不认为这是最佳实践。你可以通过应用程序进行一些装配加载,以便它们变得可用,而无需重新编译。 - rick schott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接