【问题标题】:Two output file names resolved to the same output两个输出文件名解析为相同的输出
【发布时间】:2012-12-06 08:40:56
【问题描述】:

最近我创建了新的Form,名为WorkersScreen。当我尝试运行该项目时,出现此错误:

错误 1 ​​两个输出文件名解析为相同的输出路径: "obj\x86\Debug\DryWash.WorkersScreen.resources"

这是什么意思,如何解决?

【问题讨论】:

  • 确保您没有两个 .resx 文件
  • @WimOmbelets,我也遇到了这个错误,感谢你为我节省了时间......我会说你应该把它作为答案
  • 问题是两个同名的迁移(大写是不同的。)

标签: c# .net winforms


【解决方案1】:

这可能发生在两个 .resx 文件指向同一个表单的情况下。主要发生在重命名表单时(可能还有其他原因,我不确定)

如果您的特定表单文件如下所示:

Form1.cs
Form1.designer.cs
MyFormerFormName.resx
Form1.resx

那么这通常意味着您重命名了表单,但 Visual Studio 并未删除旧的 .resx 文件。手动删除文件(在此示例中为 MyFormerFormName.resx)后,该错误应该会在下一次构建时消失。

【讨论】:

  • 另外重新打开项目并从解决方案资源管理器中删除 MyFormerFormName.resx,它可能仍被 Visual Studio 引用。这通常对我有用。
  • @XPecto 谢谢!直到我这样做,Wim 的解决方案才奏效!
  • 为什么不选择这个作为解决方案?!
  • 如果仍然存在,请务必打开 .csproj 并删除对 .resx 的引用
  • 就是这样。使用 Ctrl-R+R 和 Ctrl-H 复制 Winform 并重命名两者。尽管如此,得到“输出文件名解析为相同的输出路径:obj \ ...”只有通过删除.resx文件,我才能再次构建它。谢谢。
【解决方案2】:

通过编辑项目文件查找重复项

  1. 记下 .resx 失败的名称。

  2. 首先通过右键单击您的项目卸载项目,然后单击Unload Project

  1. 再次右键单击您的项目,然后单击编辑项目

它会显示一些代码,查看(或Search 在第 1 步中的 resx 文件中)是否有重复值,在我的情况下看起来像这样

<EmbeddedResource Include="frmTerminalSerial.resx">
      <DependentUpon>frmTerminalSerial.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmVisual.resx">
      <DependentUpon>frmVisual.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmVisual.resx">
      <DependentUpon>frmVisual.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
      <SubType>Designer</SubType>
</EmbeddedResource>

注意这部分,它是一个重复

<EmbeddedResource Include="frmVisual.resx">
      <DependentUpon>frmVisual.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmVisual.resx">
      <DependentUpon>frmVisual.vb</DependentUpon>
</EmbeddedResource>

删除其中一个,使其看起来像这样

<EmbeddedResource Include="frmTerminalSerial.resx">
      <DependentUpon>frmTerminalSerial.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmVisual.resx">
      <DependentUpon>frmVisual.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
      <SubType>Designer</SubType>
</EmbeddedResource>

保存,右键单击您的项目,然后单击重新加载项目。你完成了!

【讨论】:

  • 这正是我所做的,就像一个魅力!
  • 找不到任何重复项怎么办?我用错误中的文件名尝试了Ctrl+F,似乎没有任何重复。
  • 我在资源文件方面遇到了这个问题。我删除了与资源有关的所有内容,然后在保存后删除了资源文件本身。编译。添加了新的 .resx。一切都好。
【解决方案3】:

通常,如果您创建这样的迁移

Add-Migration "UpdateProducts"

Visual Studio 将创建一个类名类似于 UpdateProducts 的迁移。如果您稍后使用相同的迁移名称添加新迁移,它将生成一个类名称如 UpdateProducts1. 的迁移,并自动在末尾添加一个递增的数字作为后缀。每次生成新的迁移时,数字都会增加 1。

在我们的例子中,出于某种原因,VS 感到困惑,并开始生成与现有迁移具有相同类名的后续迁移,因此有两个自动生成的具有相同名称的迁移。

只需更改新迁移的类名即可解决问题。

【讨论】:

  • 我删除了问题迁移并创建了一个具有不同名称的新迁移
【解决方案4】:

我做了一些搜索 我有同样的问题 这可能是因为您的表单有两个 .resx 如果您尝试删除一个,问题将消失 我的表格:

Form1.Designer.cs
Form1.resx
Log_in.resx
Form1

我删除了 Log_in.resx,我的程序又运行了

【讨论】:

    【解决方案5】:

    我刚刚使用 VS 2019 社区版遇到了这个问题。

    我没有重复的 .resx 文件。我没有重复的 .cs 文件。 网上没找到解决办法。

    为了解决这个问题,我清理解决方案,然后重新启动 VS。 不知道为什么,但它奏效了。希望这会有所帮助。

    【讨论】:

      【解决方案6】:

      确保您没有两个 .resx 文件。请参阅YourServiceName.cs 下的项目。对我有用。

      【讨论】:

        【解决方案7】:

        这只是发生在我身上。我不小心将一个表格“拖放”到另一个表格中。它最终制作了一份名为“Copy of”的副本。我删除了它,问题就消失了。

        【讨论】:

          【解决方案8】:

          当我复制一个表单以重用大部分功能然后重命名该表单时,这发生在我身上。我转到引用的目录,发现实际上只有一个文件,复制了有问题的文件,将其重命名为引用我的新表单的名称,然后将新文件粘贴回目录中。

          我认为这不是一个好的做法(我是 C# 新手),但它确实有效,而不必重新创建所有内容。我还需要在整个解决方案的几个地方更新表单名称,这在原始表单和新表单中都令人惊讶。

          复制表单似乎不是一个好主意。

          【讨论】:

          • 这就是我所做的(在对象资源管理器中复制并粘贴整个 .cs,重命名 .cs,然后在 VS 2013 中使用表单名称 [property]).. 但文件本身存在并且似乎命名正确 - 我仍然收到错误?
          • 啊.. 我想我现在看到了。当我重命名复制文件上的表单时,它也重命名了原始表单!并重构了所有参考资料。喜悦。
          • @daBich 是的,你明白了,我已经将 Form1.cs 复制到 Form1_Copy.cs,将 Form1_Copy 重命名为 Form2,但随后发现 Form1.cs 和 Form1.Designer 中对 Form1 类的所有引用.cs 已更改为 Form2。 svn revert 成功了 :-)
          • 对我来说,几乎一样。现在,每次我想复制一个表单时,我:1) 从项目中排除它; 2) 创建一个副本并用可视代码打开它们(.cs 和designer.cs); 3) 当然,在 Visual Studio 中,我创建了一个具有不同名称的添加新表单; 4) 粘贴designer.cs 和.cs 代码,当然要更改命名空间和类名以及Ctor。 5) 再次包含在 Project 上一个表单中
          【解决方案9】:

          在我的情况下,问题是由 Designer.resx 文件的 EmbeddedResource 标记引起的,该标记以某种方式添加到 .csproj 文件中。

          具体如下:

          <EmbeddedResource Include="Forms\frmMenu.designer.resx">
                <DependentUpon>frmMenu.designer.cs</DependentUpon>
          </EmbeddedResource>
          

          【讨论】:

          • 我没有说这就是答案。我只是说“在我的情况下”,因为如果其他人碰巧遇到同样的原因。很抱歉浪费您阅读它的时间。
          【解决方案10】:

          我遇到了问题,这是因为我有一个自定义控件部分类

          我不小心为部分创建了一个 .resx 文件

          我想我是通过在部分类上按 shift F7 并生成空的设计器表单来做到这一点的。

          删除部分类上的 .resx 文件为我解决了这个问题。我正在使用版本控制,它显示它是一个新文件。

          希望对你有帮助

          【讨论】:

            【解决方案11】:

            在所有项目中搜索错误列表中报告的类,就像在这个问题案例DryWash.WorkersScreen 中一样,它可以在另一个文件名不同但类名相同的文件中重复。

            【讨论】:

              【解决方案12】:

              当我不小心生成了与业务对象同名的迁移时,我遇到了这个问题。 解决方案是删除迁移,然后创建一个具有不同名称的新迁移。

              【讨论】:

                【解决方案13】:

                在我的情况下,我必须在 Note++ 中打开 .csproj 并在 EmbeddedResource 标签中查找 .resx 文件我发现一些奇怪的 .resx 带有奇怪的语言后缀 example.aa.resx 其他文件是普通文件没有语言后缀或带有 *.ar 后缀,我删除了令人毛骨悚然的嵌入式资源标签,这为我解决了问题。

                【讨论】:

                  【解决方案14】:

                  我今天遇到了这个问题。

                  Form.Designer 的扩展名是 .resx,我的解决方案是 TestForm.Designer.resx。已经有一个TestForm.resx。我清理了解决方案,关闭了VS,删除了TestForm.Designer.resx文件,然后重新启动了VS。我仍然有错误。

                  然后我关闭了 VS 并使用 NotePad++ 打开了 .proj 文件,发现仍然引用了 TestForm.Designer.resx。我删除了嵌入的资源。

                  <EmbeddedResource Include="TestForm.Designer.resx">
                      <DependentUpon>TestForm.Designer.vb</DependentUpon>
                  </EmbeddedResource>
                  

                  然后我打开 VS 并构建....它再次工作!

                  【讨论】:

                    【解决方案15】:

                    当我运行Add Migration 命令并将与我的项目名称相同的名称作为迁移类时,这发生在我身上。我删除了所有迁移类并添加了新类,再次构建解决方案。

                    【讨论】:

                      【解决方案16】:

                      在我的选择中,帮助为每个引发错误的表单删除一个 *.resx

                      详细信息

                      在我们的项目中,每个本地化表单(DE、GB、SK、RU、SRB)都有 6 个 *.resx,如果我删除(从 VS)FormName.sr-Latn-CS.resx,错误就会消失。如果我尝试删除 FormName.en-GB.resx 它没有帮助。仅删除 sr-Latn-CS.resx 错误就消失了(也许设计师无法解决两个 - )。当我将项目从 VS 2010 Win 7 迁移到 VS2010 Win 10 时,我第一次看到这个错误。

                      【讨论】:

                        【解决方案17】:

                        如果在使用 EntityFramework 并尝试 Add-Migration 时出现此问题,解决方案很简单:删除 Migrations 文件夹(在解决方案资源管理器中)并执行 Enable-Migrations。如果需要,可以备份迁移。

                        【讨论】:

                        • 我确实在使用迁移,但就我而言,我做错的是“添加迁移小写名称”。删除最新的迁移 .cs 文件并使用正确的名称运行“添加迁移”为我修复了它。
                        【解决方案18】:

                        对我来说,问题是复制和粘贴 .aspx,而不是重命名类文件后面的代码以匹配复制的 aspx 文件的名称。更改背后的代码和设计器类名称有效。

                        【讨论】:

                          【解决方案19】:

                          我遇到了同样的问题,我所做的是在更新数据库后删除了我的迁移文件(通过工作室)。

                          【讨论】:

                            【解决方案20】:

                            正如@WimOmbelets 在他 2013 年的回答中所说,复制表单是重现这个恼人错误的一种非常可靠的方法,至少在 VS 2017、2019 和 2022 年是这样。

                            正如 Vince De Giorgio 在 2019 年的回答中所说,我也没有重复的 .resx 或 .cs 文件,也没有重复的 ...EmbeddedResource Include= .../> .csproj 中的标签。

                            删除两个涉及的表单的 .resx 文件(图标消失了,很明显),清理解决方案然后重新启动 VS 是一种穷人的解决方法,因为每次我再次添加图标或其他资源时,都会出现同样令人讨厌的错误。更糟糕的是:为了恢复,我不得不 Git 存储所有修改;如果我手动还原所有更改,以至于 Git 无法识别任何更改,即使在清理、重新启动 VS 和重建之后,错误仍然存​​在(!!!)。

                            解决 VS 2019 和 2022 中的问题:

                            每次我想复制表格时,我:

                            1. 排除要从项目中复制的表单(排除,不要删除!)
                            2. 在 Windows 资源管理器中,我创建了一个表单的副本并使用 Visual Code(随便)打开它们(.cs 和 Designer.cs)
                            3. 在 Visual Studio 中,我创建了添加一个具有不同名称的新表单 - 当然
                            4. 从 VS 代码中粘贴回 Designer.cs 和 .cs 代码;更改命名空间、类名和 Tor
                            5. 再次包含在 Project 上一个表单中
                            6. 享受

                            再也没有这个问题了。

                            【讨论】:

                              【解决方案21】:

                              我在 Visual Studio 2022 中遇到了与 .NET 6 中的 WinForms 应用程序相同的问题。

                              在这种情况下,我在它自己的.CS 文件中添加了一个部分类,以处理Designer 生成的InitializeComponent 之外的自定义设置。

                              下次我打开文件时,Visual Studio 2022 尝试在 WinForm 设计器中打开它。这为项目添加了一个冗余的.resx 文件。

                              删除新添加的.resx更正错误。

                              【讨论】:

                                【解决方案22】:

                                我以为遇到此错误后,我会在至少一个随机论坛上发帖,希望能缓解其他人的问题。我搜索了许多谷歌网站,没有一个有我的确切问题。我的原因很相似,但在某些方面有所不同。

                                我实际上有一个部分类分布在多个文件中。这个类是一个表单类。这本身是成功的,并没有造成问题。但是,这会导致新类在维护拆分“类表单”代码的同时保留其唯一的文件名。这很可能不是犹太洁食的做法,但当时还是发生了。这似乎是一个很好的选择,可以让很多杂乱的代码摆脱困境。不用说,下次我只会使用区域或其他替代方法。

                                当我尝试从第二个文件中获取代码并将代码复制/粘贴到只有一个类的新非格式文件时发生了错误,因为我原本打算将其本质上变成一个库并稍微制作代码更恰当和可读。由于我不知道究竟是什么导致了错误发生并且进行了少量更改,因此需要一些时间来跟踪。即使在反转代码之后,我还是设法错过了一对方法。

                                包含类 Form 的主窗体的方法以及 initializeComponent 和窗体构造函数(加载)。这些方法的第二个副本似乎会导致相同的错误。即使删除了额外的代码和额外的表单和 resx 文件。我什至尝试删除合法的 resx 文件,因为它不是主动需要的。我无法有效地跟踪它,因为任何错误都指向这些代码段的合法版本。 Ctrl+F 和备份副本是你的朋友。

                                希望对某人有所帮助

                                【讨论】:

                                  【解决方案23】:

                                  我确认 WimOmbelets 在 cmets 中给出的答案。当您在 VS2012 中重命名一个类时,这显然会发生(我在以前的版本中从未有过这个)。

                                  我不能确定这是不是这个原因,但我所做的与正常方式不同的一件事是我使用 F2 重命名它,而不是更改它然后按 control -.

                                  【讨论】:

                                    【解决方案24】:

                                    当我使用 Ctrl + R + R 重命名我的一个 Form 类时,我遇到了同样的问题,VS 默认提供重命名。

                                    然后我在 2 个不同的文件 (*.cs) 上获得了具有相同类名的两个类。

                                    class Bar { ... } // From Bar.cs
                                    class Bar { ... } // This should've been Foo, from Foo.cs
                                    

                                    这两个Bar 表示同一个资源文件,其中一个不应该。

                                    这是一个微不足道的问题,但有时可能很难找到原因,因为查看 cs 文件 无法确定您应该查找哪个文件。

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 2015-07-31
                                      • 2013-09-16
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多