【问题标题】:How to fix "namespace x already contains a definition for x" error? Happened after converting to VS2010如何修复“命名空间 x 已经包含 x 的定义”错误?转换为 VS2010 后发生
【发布时间】:2011-10-25 12:18:57
【问题描述】:

具体错误发生在Resources.Designer.cs:

错误 2 命名空间“ModulusFE”已包含“StockChartX”Resources.Designer.cs 11 21 ModulusFE.StockChartX 的定义

我用谷歌搜索了这个,但仍然很困惑。有人知道我可以尝试什么吗?

我尝试过重建和清理,以及重命名Resources.Designer.cs 文件,希望它能够重建,但没有运气。

代码的顶部是这样写的:

// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.225
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>

任何想法都将不胜感激。

【问题讨论】:

  • 通常使用设计器生成的代码,会有多个带有partial 类的文件。你是这种情况吗?
  • 是的,就是这样。不过,我对如何解决这个问题有点迷茫。谢谢您的回复。
  • 可能其中一个文件省略了partial 修饰符,因此您可能想看看是否可以找到它。

标签: c# visual-studio-2010 compiler-errors


【解决方案1】:

大约一年前我遇到过这种情况,我不记得确切的根本原因是什么,但您可以尝试以下两件事:

  1. 如果它是自动生成的文件(通常是“Resources.Designer.cs”),请尝试删除它并让 VS 重新生成它。
  2. 单独或与 #1 一起,在解决方案资源管理器中选择 Show All Files 或在 Windows 资源管理器中打开解决方案文件夹 - 可能是文件的某个版本以某种方式从项目中排除,因此“不可见”对 VS 但仍然让它生气...

【讨论】:

  • 确实这两个错误都在生成的文件上。设置和资源。但是,当我尝试删除时,我只会收到更多错误。我怎样才能让 Visual Studio 重建它们?
  • 想通了 - 只是一直在搞乱重建并且它有效。非常感谢
  • 只是想补充一点,当我这样做时文件不会自动重新生成,但是来回切换访问修饰符(在 RESX 文件上)会重新生成 Designer.cs 文件。
  • @stormist - 如果删除的文件是 Settings.Designer.cs,您需要双击 Settings.settings 来启动设计器,然后进行更改并保存。这将重新生成已删除的设计器文件。
【解决方案2】:

我也遇到过这个问题,是因为我创建了一个新的命名空间,但是父命名空间包含一个同名的类。

【讨论】:

  • 在我的情况下,我一开始找不到命名空间,因为我没有定义任何具有该名称的命名空间。我发现这样的命名空间是 VS 从包含文件夹的名称生成的。
  • 我有一个已经存在的命名空间,其类名是我创建的。
【解决方案3】:

看起来像是 VS 代码的 OmniSharp 中的一个错误。

我的解决方案是执行命令“重启 OmniSharp”。

只要做: - ctr shift P - 输入“重启 OmniSharp” .. 回车

这为我解决了问题。

【讨论】:

  • 旧线程,但由于最初的问题是关于 VS2010 而不是 VS Code,我可以理解为什么这没有得到太多可见性。如果您使用的是 VS Code,这个答案是有价值的。这修复了 OP 使用 Visual Studio Code 报告的相同问题。
  • @VinnyGuitara 我偶然发现了这个线程,正是因为我遇到了 VS Code 的问题。
  • 啊,是的。我无法强调搜索 Visual Studio 答案并找到 Visual Studio 代码答案是多么棒。或者反过来。但是,嘿,我想 MS 最清楚的是,当他们以成熟的企业级 IDE 命名一个美化记事本时。
【解决方案4】:

这是一个老问题,但我没有找到我使用的修复程序,所以我在这里添加了它。

在我的例子中,它是一个与父命名空间中的类同名的命名空间。

为了找到这个,我使用了对象浏览器并搜索了已经定义的项目的名称。

如果在您仍然遇到错误时它不允许您执行此操作,则暂时更改它所抱怨的项目的名称,然后找到有问题的项目。

【讨论】:

    【解决方案5】:

    不幸的是,其他答案都没有帮助。 我的问题专门发生在 WPF 项目中。

    当我在MainWindow 文件夹下创建一个文件夹时出现了问题,该文件夹有效地创建了一个类似于ProjectName.MainWindow.Folder 的命名空间。 现在,我相信由于一些静态设计器代码,Visual Studio 在类 MainWindow 和命名空间 Project.MainWindow.Folder 之间感到困惑。 作为解决方案,我将Folder 移出MainWindow。查看类视图或解决方案/项目有助于识别其中存在哪些命名空间和类。

    【讨论】:

    • 谢谢。查看班级视图也救了我(而且因为你的回答:))
    • 同样的问题,但这为我解决了。重命名文件夹解决了这个问题。
    【解决方案6】:

    这只是发生在我身上。发生的事情是我复制了一个最初受源代码控制的项目。尽管我正确重命名了所有内容,但所有文件的文件权限仍设置为只读。当我开始修改一些表单控件时,Visual Studio 自动创建了一个 Resource1 文件,因为原来的 Resource 文件是只读的。

    我解决这个问题的方法如下:

    1. 允许对项目文件的写入权限。
    2. 删除了原来的资源文件
    3. Ctrl-A 用于所有表单元素,然后 Ctrl-X 剪切它们。
    4. 保存表单。
    5. Ctrl-V 将它们全部粘贴回去。
    6. 保存表单。

    我必须这样做,因为自动生成的代码不会自行更新,所以我通过更改表单“强制”它更新。不这样做会留下一堆在更改文件权限之前不再存在的表单元素代码。

    【讨论】:

    • 刚刚有一个变种。 VS 无法连接到云中的源代码控制并做了类似的事情。最后打开另一个解决方案,让它记住源代码控制在哪里,然后重新打开我的问题并同步。
    【解决方案7】:

    我有一个具有以下定义的 xaml 文件

    <Window x:Class="mm2.Views"
       .etc..
    />
    

    mm2.Views 是我的应用中的命名空间的名称

    为了修复它,我正确地重命名了 xaml 对象:

    <Window x:Class="mm2.Views.RecordedTracks"
       .etc..
    />
    

    【讨论】:

      【解决方案8】:

      我遇到了类似的问题,并通过从目录中删除 .cs 文件的所有副本/备份来解决它。

      【讨论】:

        【解决方案9】:

        我遇到了同样的问题,这是由于在与我的工具相同的代码中命名了一个函数。简单的错误,但也要记住一些事情。

        【讨论】:

          【解决方案10】:

          我遇到了类似的问题,但找到了与我阅读的不同的解决方案。在阅读了 P Walker 的回答后,我解决了问题。

          当我错误地为我的资源文件命名为日语时,我的问题发生了。长话短说,我试图为日语创建一个资源,但我不小心将其命名为localized.jp.resx。然后我意识到iso语言代码是ja而不是日语的jp。一旦我将文件名更改为localized.ja.resx 并删除了设计器文件中的所有内容,它就解决了我的问题。

          这就是解决我的问题的方法,希望它可以帮助其他人。

          【讨论】:

            【解决方案11】:

            我遇到了类似的问题。从 edmx 文件生成数据库后,我单击“全部保存”和“构建”,我创建的所有类型/模型类都显示在错误框中。我研究了为什么会发生这种情况,并且就像您的回复所暗示的那样,我认为这是自动生成的。

            但是,像删除自动生成的类并重新生成它们这样的解决方案对我不起作用。

            我最终失去了耐心,决定用另一种方式解决它。由于我的脚本已保存,我只是删除了 edmx 文件(及其在 web.config 中的引用)并返回并使用“数据库中的模型”创建了另一个文件,之后就没有再碰它了。

            不用说,结果是这样,我很生气。

            【讨论】:

              【解决方案12】:

              我也遇到了这个错误, 当我将 WPF 项目的目标框架更改为框架版本 4.0 客户端配置文件 -> 框架 4.0 时。它自己解决了。

              【讨论】:

                【解决方案13】:

                我解决它的方法是从模型浏览器中删除所有枚举,然后重新添加它们。不知何故,该工具奇迹般地完美地重新生成了所有内容,并且错误消息消失了(我使用的是 VS2012,仅供参考)。

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

                    我刚才遇到了同样的问题,我发现这是最简单的疏忽之一。我正在构建类,将代码从一个类文件复制并粘贴到其他类文件中。例如,当我在 Class2 中更改类的名称时,类名称旁边有一个下拉菜单,询问我是否要更改对 Class2 的所有引用,当我选择“是”时,它又更改了 Class1命名为 Class2。

                    就像我说的,这是一个非常简单的疏忽,让我摸不着头脑,但请仔细检查您的其他文件,尤其是您复制的源文件,以确保 VS 没有更改您的名称,在幕后。

                    【讨论】:

                      【解决方案16】:

                      如果你使用不同的 aspx.cs 文件来定义同名的类,你可以使用

                      <compilation targetFramework="4.5" />
                      

                      在您的 web.config 文件中的 &lt;system.web&gt; 下。

                      尽管我仍然强烈建议您更改班级名称。

                      【讨论】:

                        【解决方案17】:

                        这不是最好的解决方案,但如果您真的不在乎,这是一个简单的解决方案。 我只是重命名了我的班级。所以我有class Card,我把它改成了MyCard。

                        【讨论】:

                          【解决方案18】:

                          我认为这个问题是因为您为单个表添加了 2 个 DAL 类。 如果此表包含在关系中,则删除它的 table_name.dbml,并为相关表保留它。 您必须使用其中之一。

                          【讨论】:

                            【解决方案19】:

                            我有一个类似的问题(通用项目,Visual Studio 2015),我通过以下更改解决了它:

                            在 App.xml.cs 中是(还可以):

                            namespace Test.Main {
                            

                            错误,App.xml 的旧版本:

                            x:Class="Test.Main"
                            

                            好的,App.xml 的新版本:

                            x:Class="Test.Main.App"
                            

                            【讨论】:

                              【解决方案20】:

                              我的 WPF 应用程序中发生了类似的情况。当我试图通过声明一个更具描述性的命名空间来进行一些清理时,它就出现了。出现问题是因为我在代码隐藏(或 cs)中将命名空间命名为与 Window 类相同。代码隐藏中的命名空间应该去掉最后一部分(在最右边的点之后)并用于声明类并实例化它。在下方通知Win

                              xaml

                              &lt;Window x:Class="FrameApp.UI.Invoice.Win" ...&gt;

                              代码隐藏

                              namespace FrameApp.UI.Invoice
                              {
                                  public partial class Win : Window
                                  {
                                      public Win()
                                  }
                              }
                              

                              一个明显的疏忽,但它让我延迟了至少一个小时,所有出现的错误都出现了。

                              【讨论】:

                                【解决方案21】:

                                我遇到了这个问题,但我的问题与此处提到的问题略有不同。我正在清理我的项目并将一些类移动到新文件夹中。我有一个“AddFilter”类,我将它移到了一个“AddFilter”文件夹中——所以我实际上已经完成了一个共享命名空间名称的类。起初这有点难以发现,因为我找不到任何其他与之冲突的类;而是与命名空间冲突。

                                【讨论】:

                                  【解决方案22】:

                                  如果您复制和粘贴页面,请不要忘记重命名类名。否则,您也会收到此错误,“类型已经定义了一个具有相同参数类型的名为 'OnGet' 的成员”

                                  【讨论】:

                                    【解决方案23】:

                                    当我在项目中的类名称相同的文件夹中创建新文件时,我遇到了这种情况{ 文件夹名称: 文件夹 } 并且有类名 { Folder } 所以命名空间是 namespace.Folder 以便编译器假定在两个地方定义的 cass

                                    在新文件中:

                                    namespace APP.Folder
                                    {
                                        partial class NewFile
                                        {
                                           // ....
                                        }
                                    }
                                    

                                    在另一个文件中(有问题的文件)

                                        namespace APP
                                    {
                                        partial class Folder
                                        {
                                          // ....
                                        }
                                    }
                                    

                                    -- 这样您就可以编辑文件夹名称或从新文件的命名空间中删除 .Folder

                                    【讨论】:

                                      【解决方案24】:

                                      这发生在我身上,我注意到在同一个命名空间“OtpService.Models.Request”下实际上有另一个同名的类,所以我所做的只是将第二个类的命名空间更改为“OtpService. Models.Request.ExtraObj”。我这样做是因为我不想将冲突类的名称更改为其他任何名称。

                                      【讨论】:

                                        【解决方案25】:

                                        从 .net 4.5.1 转换到 4.7.2 后,我在解决方案的 winform 中遇到了这个部分类问题。

                                        最初编译器的问题不是抱怨部分类,而是使用 properties.default...没有限定。添加 Global::solnNameSpace 后。限定符,然后我得到了部分类问题。

                                        在查看此线程中的答案后,我查看了资源设计器文件,我发现它是使用显式 solnNameSpace 生成的,而解决方案中的类没有。此外,solnNameSpace 与有问题的类名的名称相同。

                                        为了以最少的精力和时间解决问题,我退出了 Global... 限定符,并从资源设计器文件中删除了显式命名空间 ... 和 end 语句。我知道如果有导致资源设计器文件自动生成的更改,我以后可能会遇到麻烦,但我的截止日期很紧。我制作了关于临时更改的文档,而不是更好的长期解决方案,因为解决方案的性质和多项目使用不允许更改解决方案。

                                        【讨论】:

                                          【解决方案26】:

                                          我遇到了这个问题。这是因为我重命名了 App_Code 目录中的文件夹并发布到我的 iis 站点文件夹。原来的命名文件夹仍然存在于我的目标目录中——因此是重复的——(在复制之前我没有完全删除目标)无论如何删除旧文件夹修复了这个问题。

                                          【讨论】:

                                            【解决方案27】:

                                            当您尝试了其他所有方法但仍然遇到同样的麻烦时,有一条出路;但是这会很乏味,需要仔细准备。

                                            使用现有文件开始另一个新项目,或者如果您精通编辑 csproj(需要备份),则编辑项目 .csproj 文件。我将列出新项目的步骤。

                                            1. 准备工作:
                                              • 注意所有参考资料及其来源
                                              • 注意其他项目中包含的所有文件
                                            2. 重命名原始 projectname.csproj 文件
                                            3. 关闭解决方案/项目
                                            4. 使用现有文件启动新项目(您会从引用中得到错误)
                                            5. 加回注明的参考文献
                                            6. 包含/添加来自其他项目的现有文件

                                            【讨论】:

                                              【解决方案28】:

                                              如果您的“app_code”文件夹中有任何代码文件(*.cs、*.vb 等)的 2 个版本,那么您将收到此错误,因为 dot net 会将这两个文件都包含在您的项目中并且会获取同一类的 2 个不同实现(因为 app_code 文件夹中相同代码文件的 2 个版本中的名称相同)

                                              【讨论】:

                                                【解决方案29】:

                                                这发生在我身上,因为我为 RPG 能力系统导入了 2 个第三方库,并且它们都有一个名为 ActionType 的枚举。

                                                通过以下方式解决了此问题:

                                                1. 在至少一个具有相同名称的类/枚举周围添加命名空间。 (在我的情况下为 ActionType)(这可能会导致其他一些错误,因为您的其他一些文件无法再访问该类/枚举)
                                                2. 转到想要访问类/枚举的每一行,并通过使用类顶部所需的命名空间重新调整用法。 (点击未找到的字段,导入正确的类)(可以有2个选择)(快捷键是option+enter)

                                                注意:您不必总是想出一个新的命名空间名称,有时您的项目有不同的命名空间,最好将您的类/枚举放入该命名空间。 (在我的案例中,显然有人忘记在该命名空间中添加该类/枚举,所以我使用了现有的。)

                                                namespace THMSV.RPGBuilder.Managers{
                                                
                                                    [RequireComponent(typeof(CombatNode))]
                                                    public class ObjectActionTrigger : MonoBehaviour
                                                    {
                                                        public enum ActionType
                                                        {
                                                            ability,
                                                            effect
                                                        }
                                                    }
                                                }
                                                

                                                【讨论】:

                                                  【解决方案30】:

                                                  我知道这是一篇较旧的帖子,但我认为如果我分享我遇到此错误的经验,它可能会对其他人有所帮助。对我来说,我在 Visual Studio 2019 中工作并使用 Xamarin Forms。当我创建一个新文件夹并将其命名为与我之前创建的内容页面相同时,我收到了此错误消息。显然我们不应该那样做......

                                                  无论如何,我不得不重命名文件夹,然后通过文件夹中的每个单独的内容页面更改它们的命名空间(在他们的 .cs 文件中)以及他们的 ContentPage 标记中的 x:Class(在他们的 .xaml 文件中) 以反映文件夹的新名称。

                                                  这对我有用。如果错误再次出现,我希望它对其他人有所帮助。

                                                  【讨论】:

                                                    猜你喜欢
                                                    • 1970-01-01
                                                    • 2016-07-01
                                                    • 1970-01-01
                                                    • 2022-07-18
                                                    • 1970-01-01
                                                    • 2022-08-13
                                                    • 2013-06-16
                                                    • 2016-03-06
                                                    • 1970-01-01
                                                    相关资源
                                                    最近更新 更多