在周末安装Windows 10周年更新(包括.NET Framework 4.6.2)后,一些代码停止工作。我已经回到1周前的版本,以确保它与我们的代码无关。
在运行时,会抛出错误:
错误BC30561:'全球化'是不明确的,从名称空间或类型&System;系统' System'中导入。
堆栈追踪:
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)
这是违规行:
$.SetLanguage("<%= Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName %>");
用Globalization
替换System.Globalization
可以解决问题,但Visual Studio建议可以简化&#34;名称&#34;,表示System
不是必需的。
在违规行设置断点时,我可以通过立即窗口获得相同的错误:
Globalization.CultureInfo.CurrentUICulture
error BC30560: 'CultureInfo' is ambiguous in the namespace 'System.Globalization'.
如果我理解正确,则System.Globalization
和System.Web.Globalization
都有。根据{{3}},引入了一个新的命名空间,这似乎导致了这个问题。
+namespace System.Web.Globalization { + public interface IStringLocalizerProvider { + string GetLocalizedString(CultureInfo culture, string name, params object[] arguments); + } + public sealed class ResourceFileStringLocalizerProvider : IStringLocalizerProvider { + public const string ResourceFileName = "DataAnnotation.Localization"; + public ResourceFileStringLocalizerProvider(); + public string GetLocalizedString(CultureInfo culture, string name, params object[] arguments); + } + public static class StringLocalizerProviders { + public static IStringLocalizerProvider DataAnnotationStringLocalizerProvider { get; set; } + } +}
为什么此错误仅出现在运行时?如何在编译时使其失败?
答案 0 :(得分:7)
Bug Crusher的回答是正确的。要解决Stijn对答案的评论,只需在项目中搜索“全球化”。并删除它的每个实例。我不会使用Find + Replace来执行此操作,因为这可能会产生意想不到的副作用。
然后确保您编辑的每个文件都有正确的导入或使用语句。
VB- 进口System.Globalization
C# - 使用System.Globalization;
这就是VS提出的解决办法。
答案 1 :(得分:3)
我们删除了“全球化”。并让Visual Studio提出修复。我们选择了“Import System.Globalization”,它已添加到我们的文件中。
这解决了错误,网站运行正常。