【问题标题】:The namespace 'Resources' already contains a definition for 'SiteResources'命名空间“资源”已包含“站点资源”的定义
【发布时间】:2014-07-31 08:45:55
【问题描述】:

好的,由于某种原因,我的 resx 文件有问题,我有这个错误

命名空间“Resources”已包含“SiteResources”的定义

所有文件都在 App_GlobalResources 中,但我不断收到此错误

任何指针

【问题讨论】:

  • @DGibbs 看起来只是我的文件名,我有 3 个旧的西班牙文文件,我没有在 VS 中显示

标签: c# asp.net .net


【解决方案1】:

即使您将它们隐藏在 Visual Studio 中,它也有可能试图读取名称相似的文件,

如果在GlobalResources 中您有多个文件,请尝试像这样重命名扩展名

发件人:

SiteResources-fr-FR.resx

到:

SiteResources-fr-Fr.old.resx
(可能仍会被读取)

尝试更改后者的扩展名,使其完全不是 resx 文件,例如:

SiteResources-fr-Fr.old

这将 100% 现在不是 resx 文件,并且应该停止 asp.net 混淆您希望使用的文件。

希望这能解决您的问题。

【讨论】:

  • 似乎已经解决了我在 VS 中没有显示一些西班牙语文件的问题,谢谢@AlanMorton2.0
  • @Mikey 不用担心,乐于助人
【解决方案2】:

当我在 App_GlobalResources 文件夹中添加新的自定义文化但忘记注册时遇到了这个问题。所以我不得不删除该文件,在global.asax 中添加以下函数,浏览我网站的随机页面以便代码运行,最后将文件复制回其文件夹中。

public static void CreateCulture(string name, string cultureInfo, string regionInfo)
{
    try {
        CultureAndRegionInfoBuilder.Unregister(name);
    } catch { }
    var cib = new CultureAndRegionInfoBuilder(name, CultureAndRegionModifiers.None);
    cib.LoadDataFromCultureInfo(new CultureInfo(cultureInfo));  // Populate the new CultureAndRegionInfoBuilder object with culture information.
    cib.LoadDataFromRegionInfo(new RegionInfo(regionInfo));   // Populate the new CultureAndRegionInfoBuilder object with region information.
    cib.Register();
}

Application_Start:

CreateCulture("en-gb-custom", "en-gb", "gb")

奖励:不要忘记为用户 IIS_IUSRS 添加对以下文件夹的完全权限,否则自定义语言将无法注册:

  • 文件夹C:\Windows\Globalization
  • 注册:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Nls\CustomLocale

【讨论】:

    【解决方案3】:

    这可能有点极端,但我们在开发环境中时常遇到这种情况。我们必须在 Windows 中设置自定义文化以支持 en-HK。 Windows 8.1 现在像 Windows 2012 R2 一样原生支持这种文化,但旧机器需要创建这种文化。任何没有此区域性设置的机器都会报告此错误。解决方案是在机器上创建文化(我们为此创建了一个控制台应用程序),然后一切都重新开始工作。

    我也在How to fix "namespace x already contains a definition for x" error? Happened after converting to VS2010上报告了这个答案

    【讨论】:

    • 是的。另请注意,虽然大多数语言代码可以缩写为“en”(不需要“en-US”),但中文不支持“zn”,仅接受“zn-CN”。
    【解决方案4】:

    我遇到了一些问题。你应该像那个 en-US 或任何你可以从这个https://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx 检查的国家/地区一样编写资源文件 我的意思是您不能像这样 en-Us 或 US-en 更改字符串类型,因为它是特殊字符串。希望对大家有帮助

    【讨论】:

      【解决方案5】:

      确保只有一个 GlobalResources.resx 文件。

      尝试将 GlobalResources.Portal-0.resx 重命名为 GlobalResources.Portal-0.old,这样它现在就不是 resx 文件了。

      【讨论】:

      • 似乎是问题 iv 删除了旧的西班牙文件并修复了它
      【解决方案6】:

      我需要有不同语言的资源。其中一个名字不正确。检查此页面以获取正确的文化名称:https://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx

      示例名称:

      • SiteResources.resx - 默认资源
      • SiteResources.af-AZ.resx - 南非语资源 - 南非

      【讨论】:

        【解决方案7】:

        确保您使用的文化名称是有效的文化名称。

        例如:sys.pt-eb

        pt-eb 不是有效的区域性名称,因此在构建应用程序时会引发错误。

        可以从

        中检查支持的文化

        IE-浏览器 -> 工具 -> Internet 选项 -> 语言 -> 添加语言

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-26
          • 2016-10-09
          相关资源
          最近更新 更多