使用resx

时间:2015-09-15 18:56:13

标签: c# asp.net asp.net-mvc vb.net resx

我继承了一个asp.net网站,该网站混合了VB.Net webforms和C#MVC。

最近,在部署到服务器时,我们收到错误:

  

System.ArgumentException:已添加具有相同键的项。      在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark& stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)      在System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name,CultureInfo culture,Version version,Boolean throwOnFileNotFound,StackCrawlMark& stackMark)      在System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture,StackCrawlMark& stackMark)      在System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture,Dictionary`2 localResourceSets,Boolean tryParents,Boolean createIfNotExists,StackCrawlMark& stackMark)      在System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture,Boolean createIfNotExists,Boolean tryParents,StackCrawlMark& stackMark)      在System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture,Boolean createIfNotExists,Boolean tryParents)      at System.Resources.ResourceManager.GetObject(String name,CultureInfo culture,Boolean wrapUnmanagedMemStream)      at System.Resources.ResourceManager.GetObject(String name,CultureInfo culture)      在System.Web.Compilation.BaseResXResourceProvider.GetObject(String resourceKey,CultureInfo culture)

在重置应用程序之前(通过调整web.config),此错误仍然存​​在。

该网站使用resx文件进行翻译,如果我们发现异常,它似乎来自第一次使用资源字符串。

我认为这是Temporary files asp.net resx files, "item with the same key has already been added"的副本,但我没有足够的代表#39;评论该帖子。

我的直觉是,它是由竞争条件导致加载本地资源文件的附属程序集。我的另一个想法是,由于我们在同一台服务器上的两个不同的IIS网站上托管相同的代码(一个用于'登台'另一个是生产),因此它是真正的复制品。这可能导致它尝试从临时IIS文件加载资源程序集的重复卷影副本。为了证明这一点,我删除了临时文件,但错误确实消失了,但这可能只是因为它重新编译了应用程序。

只有在部署到服务器(使用MSDeploy)之后,我们才会在开发过程中收到此错误。我尝试在部署时删除临时IIS文件,但这没有任何区别。

可能是一个单独的问题或症状,但我们也看到CPU在部署时达到100%,而工作进程显示了许多似乎永远运行的请求。我想知道这是否表明线程已经死锁 - 也许所有人都在等待加载卫星资源组件?

之前有人看过这种行为并且可以提供一些亮点或更多途径来探索吗?

1 个答案:

答案 0 :(得分:0)

我设法通过更新RavenDB.Client程序集解决了这个问题。这里更好地描述了这个问题:https://groups.google.com/forum/#!topic/ravendb/Y7q3EZ5P8Cg

虽然提到的解决方法无法解决问题,但更新到最新版本的nuget包确实解决了它。