首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Web.Globalization命名空间与.NET 4.6.2在运行时与System.Globalization冲突

System.Web.Globalization命名空间与.NET 4.6.2在运行时与System.Globalization冲突
EN

Stack Overflow用户
提问于 2016-08-08 11:37:54
回答 2查看 12.1K关注 0票数 14

在周末安装Windows 10周年更新(其中包括.NET Framework4.6.2)之后,一些代码停止工作。我回到了一个1周前的版本,以确保它与我们的代码无关。

在运行时,引发一个错误:

错误BC30561:“全球化”是模棱两可的,从名称空间或类型'System.Web,System‘导入。

堆栈跟踪:

代码语言:javascript
复制
System.Web.HttpCompileException (0x80004005): C:\path\to\project\MasterPages\SiteMaster.master(71): error BC30561: 'Globalization' is ambiguous, imported from the namespaces or types 'System.Web, System'.
   at System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate)
   at System.Web.UI.BaseTemplateParser.GetReferencedType(VirtualPath virtualPath, Boolean allowNoCompile)
   at System.Web.UI.PageParser.ProcessMainDirectiveAttribute(String deviceName, String name, String value, IDictionary parseData)
   at System.Web.UI.TemplateParser.ProcessMainDirective(IDictionary mainDirective)

这是一句冒犯的话:

代码语言:javascript
复制
$.SetLanguage("<%= Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName %>");

Globalization替换System.Globalization解决了这个问题,但是Visual建议“名称可以简化”,这表明System是不必要的。

当在违规行设置断点时,我可以通过即时窗口获得相同的错误:

代码语言:javascript
复制
Globalization.CultureInfo.CurrentUICulture
error BC30560: 'CultureInfo' is ambiguous in the namespace 'System.Globalization'.

如果我理解正确的话,就会有System.GlobalizationSystem.Web.Globalization。根据the API diff的说法,引入了一个新的命名空间,这似乎导致了这个问题。

+命名空间System.Web.Globalization {+公共接口IStringLocalizerProvider {+ string GetLocalizedString(CultureInfo区域性,字符串名称,params object[]参数);+} +公共密封类ResourceFileStringLocalizerProvider : IStringLocalizerProvider {+ public const string ResourceFileName = "DataAnnotation.Localization";+ public ResourceFileStringLocalizerProvider();+公共字符串GetLocalizedString(CultureInfo区域性,字符串名,params object[]参数);+}+公共静态类StringLocalizerProviders {+ public StringLocalizerProviders{ get;set;}+}+}

为什么这个错误只出现在运行时?如何使它在编译时失败?

EN

回答 2

Stack Overflow用户

发布于 2016-09-23 23:21:13

破碎机的答案是正确的。要回答Stijn的评论,只需搜索您的项目中的“全球化”即可。并移除它的每一个实例。我不会使用Find +替换来做这件事,因为这可能会产生意外的副作用。

然后确保您编辑的每个文件顶部都有正确的导入或使用语句。

VB- Imports System.Globalization

C#- using System.Globalization;

这就是VS会提出的解决方案。

票数 8
EN

Stack Overflow用户

发布于 2016-08-09 19:05:03

我们消除了“全球化”。然后让Visual提出一个修复方案。我们选择了“导入System.Globalization”,它为我们添加到文件中。

这消除了错误和网站的工作正常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38828248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档