解析为同一输出的两个输出文件名

最近我创建了新的 Form,称为 WorkersScreen。当我尝试运行这个项目时,我得到了这个错误:

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

这意味着什么? 如何解决这个问题?

102069 次浏览

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

我不能肯定这是原因,但我做了一件不同于我的正常方式是我使用 F2重命名它,而不是改变它,然后按 控制。

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

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

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

那么这通常意味着您重命名了表单,但是 VisualStudio 没有删除旧的。Resx 文件。一旦手动删除了文件(在本例中为 MyFormerFormName.resx) ,下一次构建时错误就会消失。

这是刚刚发生在我身上的事。我不小心将一个表单“拖放”到另一个表单中。它最后复制了一份,叫做“拷贝”。我删掉了,问题就解决了。

我查了一下 我也有同样的问题 可能是因为你的表单有两个 如果你试图删除一个,问题就会消失 我的表格:

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

我删除了 Log _ in. resx,我的程序又工作了

我认为我会在遇到这个错误后至少在一个随机论坛上发帖,以期解决其他人的问题。我搜索了许多谷歌网站,没有一个有我确切的问题。我的目标是相似的,但在某些方面有所不同。

我实际上有一个分布在多个文件中的部分类。这个班是一个表格班。这本身是成功的,没有引起任何问题。但是,这导致新类在维护分割的“类窗体”代码的同时保留其唯一的文件名。这很可能不是犹太教的做法,但它仍然发生在当时。这似乎是一个很好的替代方案,可以消除大量混乱的代码。不用说,下次我将只使用区域或其他替代品。

然后,当我试图从第2个文件中获取代码并将其复制/粘贴到一个新的只有一个类的非表单文件时,出现了错误,我原本打算将其转换为一个库,使代码更加合适和可读。由于我不知道错误发生时究竟是什么原因造成的,并且做了大量的更改,因此需要一些时间来跟踪。即使在反转代码之后,我还是设法漏掉了两个方法。

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

希望这对某人有帮助

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

我不认为这是一个好的实践(我是 C # 的新手) ,但它确实起作用了,而不是必须重新创建所有东西。在整个解决方案中,我还需要在一些地方更新表单名称,无论是在原始表单还是在新表单中,这都令人惊讶。

抄袭表格似乎不是个好主意。

当我运行 Add Migration命令并给出与迁移类相同的项目名时,就会发生这种情况。我删除了所有的迁移类,并添加了新的一个,解决方案再次构建。

在我的例子中,问题是由于 Designer.resx 文件的 EmbeddedResource 标记以某种方式被添加到。Csproj 文件。

具体来说,如下:

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

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

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

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

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

这是一个微不足道的问题,但有时可能很难找到原因,因为看 Cs 文件就是不能说哪一个是你应该寻找的。

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

详细信息

在我们的项目中,我们有6个 * 。对于每个用于本地化的表单(DE、 GB、 SK、 RU、 SRB) ,以及如果我删除(从 VS 中) FormName.sr-Latn-CS,则使用 resx。Resx 比错误消失。如果我尝试删除 FormName.en-GB。雷克斯它没有帮助。删除 sr-Latn-CS 时错误消失。Resx (也许一个设计师不能解决两个 -)。当我将项目从 VS2010 Win 7迁移到 VS2010 Win 10时,我第一次看到这个错误。

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

  1. 注意.resx 失败的名称。

  2. 右键单击项目,然后单击 Unload Project,先卸载项目。

enter image description here

  1. 再次右键单击项目并单击 编辑项目

enter image description here

它将向您展示一些代码,在步骤1中的 resx 文件中查看(或者 Search)重复的值,在我的例子中如下所示

<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>

保存它,右键单击到您的项目,然后单击 重新装弹计划。您完成了!

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

我有这个问题,它是因为我有一个 部分类海关控制

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

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

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

希望这个能帮上忙

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

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

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

Add-Migration "UpdateProducts"

VisualStudio 将使用类名(如 UpdateProducts)创建迁移。如果您稍后使用相同的迁移名称添加新的迁移,它将生成一个类名为 UpdateProducts1. 的迁移,并自动在末尾添加一个增量数字作为后缀。每生成一次新的迁移,这个数字就会增加一个。

在我们的例子中,由于某种原因,VS 产生了混淆,并开始用与现有迁移相同的类名生成后续的迁移,因此有两个自动生成的迁移具有相同的名称。

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

对我来说,问题是复制和粘贴。并且不重命名类文件后面的代码以匹配复制的 aspx 文件的名称。更改后面的代码和设计器类名起作用了。

确保你没有两个 .resx文件。看在你的项目下的 YourServiceName.cs。为我工作。

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

我只是得到了这个问题使用 VS 2019社区版。

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

要解决这个问题,我 打扫干净的解决方案,然后 重新开始 VS。 不知道为什么,但起作用了,希望能有帮助。

在我的例子中,我不得不在 Note + + 中打开 .csproj,并在 EmbeddedResource标签中查找 .resx文件,我发现一些奇怪的 .resx文件带有奇怪的语言后缀 example.aa.resx其他文件是没有语言后缀或带有 * 的普通文件。Ar 后缀,我删除了令人毛骨悚然的嵌入式资源标记,并为我修复了问题。

我今天有个问题。

表格。设计师有一个。Resx,对于我的解决方案,它是 TestForm。Designer.resx.已经有一个 TestForm.resx 了。我清理了解决方案,关闭了 VS,删除了 TestForm。Resx 文件,然后重新启动 VS. 我仍然有错误。

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

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

然后我打开 VS 并构建... ... 它又工作了!

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

正如文斯•德乔治(Vince De Giorgio)在2019年的回答中所说,我也没有重复。雷斯克斯或。Cs 文件中没有重复的 ... 嵌入资源包括 = .../> 标签。Csproj.

正在删除。Resx 文件(图标不见了,显然) ,清理解决方案,然后重新启动 VS 是一个穷人的方式来解决,因为每次我再次添加一个图标或另一个资源,同样恼人的错误。更糟糕的是: 为了恢复,我必须让 Git 隐藏所有的修改; 如果我手动恢复所有的修改,以至于 Git 不能识别任何修改,那么错误就会继续(! !)即使在清洁、重新启动 VS 和重建之后。

为了解决 VS 2019和2022中的问题:

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

  1. 排除要从项目中复制的表单(排除,不要删除!)
  2. 在文件资源管理器中,我创建一个 Form 的副本,然后用 Visual Code (随便什么)打开它们(. cs 和 Designer.cs)
  3. 在 VisualStudio 中,我使用不同的名称创建“添加新窗体”——当然
  4. 从 VS 代码粘贴 Designer.cs 和. cs 代码; 更改名称空间、类名和 Ctor
  5. 再次包括在项目上一个表单
  6. 好好享受吧

从来没有过这样的问题。

在 VisualStudio2022中,我在.NET6中的 WinForms 应用程序遇到了同样的问题。

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

下次打开该文件时,VisualStudio2022尝试在 WinForm 设计器中打开该文件。这向项目添加了一个冗余的 .resx文件。

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

以下连结载有: Https://learn.microsoft.com/en-us/visualstudio/msbuild/errors/msb3577?view=vs-2022

   <EmbeddedResource Include="MyResources.resx">
<ManifestResourceName>CustomName</ManifestResourceName>
</EmbeddedResource>

打开项目文件,并确保为 CustomName 给出的值对于每个生成的资源文件是不同的。