最近我创建了新的Form
名为WorkersScreen
. 当我尝试运行该项目时,出现此错误:
错误 1 两个输出文件名解析为相同的输出路径:“obj\x86\Debug\DryWash.WorkersScreen.resources”
这是什么意思,如何解决?
如果两个 .resx 文件指向同一个表单,就会发生这种情况。主要发生在重命名表单时(可能有其他原因,我不确定)
如果您的特定表单文件如下所示:
Form1.cs
Form1.designer.cs
MyFormerFormName.resx
Form1.resx
那么这通常意味着您重命名了表单,但 Visual Studio 没有删除旧的 .resx 文件。手动删除文件(在此示例中MyFormerFormName.resx
)后,该错误应在下一次构建时消失。
通过编辑项目文件查找重复项
请注意 .resx 故障的名称。
首先通过右键单击您的项目卸载项目,然后单击Unload Project
。
它将向您显示一些代码,查看(或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>
保存它,右键单击您的项目,然后单击重新加载项目。你完成了!
通常,如果您创建这样的迁移
Add-Migration "UpdateProducts"
Visual Studio 将创建一个类名如 UpdateProducts 的迁移。如果您稍后使用相同的迁移名称添加新迁移,它将生成一个类名如 UpdateProducts1. 的迁移,并自动在末尾添加一个递增的数字作为后缀。每次生成新的迁移时,数字都会增加 1。
在我们的例子中,由于某种原因,VS 感到困惑,并开始生成与现有迁移具有相同类名的后续迁移,因此有两个自动生成的具有相同名称的迁移。
只需更改新迁移的类名即可解决问题。
我做了一些搜索,我遇到了同样的问题,这可能是因为您的表单有两个 .resx 如果您尝试删除一个,问题将在我的表单中消失:
Form1.Designer.cs
Form1.resx
Log_in.resx
Form1
我删除了 Log_in.resx 并且我的程序再次运行
我刚刚使用 VS 2019 社区版遇到了这个问题。
我没有重复的 .resx 文件。我没有重复的 .cs 文件。我在网上找不到解决方案。
为了解决这个问题,我清理了解决方案,然后重新启动了VS。不知道为什么,但它奏效了。希望这可以帮助。
确保您没有两个.resx
文件。在您的项目中查看YourServiceName.cs
. 为我工作。
这只是发生在我身上。我不小心将一个表格“拖放”到另一个表格中。它最终制作了一份名为“Copy of”的副本。我删除了它,问题就消失了。
当我复制表单以重用大部分功能然后重命名表单时,这发生在我身上。我转到引用的目录,发现实际上只有一个文件,复制了有问题的文件,将其重命名为引用我的新表单的名称,然后将新文件粘贴回目录中。
我认为这不是一个好的做法(我是 C# 新手),但它确实有效,而不必重新创建所有内容。我还需要在整个解决方案中的几个地方更新表单名称,这在原始表单和新表单中都令人惊讶。
复制表格似乎不是一个好主意。
在我的情况下,我必须.csproj
在 Note++ 中打开并在标签中查找.resx
文件我发现一些奇怪的语言后缀很奇怪其他文件是没有语言后缀或带有 *.ar 后缀的普通文件,我删除了令人毛骨悚然的嵌入资源标签和这为我解决了这个问题。EmbeddedResource
.resx
example.aa.resx
当我不小心生成了与业务对象同名的迁移时,我遇到了这个问题。解决方案是删除迁移,然后创建一个具有不同名称的新迁移。
就我而言,问题是由 Designer.resx 文件的 EmbeddedResource 标记引起的,该标记以某种方式添加到 .csproj 文件中。
具体来说,如下:
<EmbeddedResource Include="Forms\frmMenu.designer.resx">
<DependentUpon>frmMenu.designer.cs</DependentUpon>
</EmbeddedResource>
我今天遇到了这个问题。
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 并构建....它再次工作!
在所有项目中搜索错误列表中报告的类,就像在这个问题案例中一样,DryWash.WorkersScreen
它可以在另一个文件名不同但类名相同的文件中重复。
我遇到了问题,这是因为我有一个自定义控件的部分类。
我不小心为部分创建了一个 .resx 文件
我想我是通过在部分类上按 shift F7 并生成空的设计器表单来做到这一点的。
删除部分类上的 .resx 文件为我解决了这个问题。我正在使用版本控制,它显示它是一个新文件。
希望这可以帮助
当我运行Add Migration
命令并将与我的项目名称相同的名称作为迁移类时,这发生在我身上。我删除了所有迁移类并添加了新的类,再次构建解决方案。
我有同样的问题,我所做的是在更新数据库后删除我的迁移文件(通过工作室)。
如果在您使用 EntityFramework 并尝试这样做时出现此问题Add-Migration
,则解决方案很简单:删除Migrations
文件夹(在解决方案资源管理器中)并执行Enable-Migrations
. 如果需要,备份迁移。
正如@WimOmbelets 在他 2013 年的回答中所说,复制表单是重现这个恼人错误的一种非常可靠的方法,至少在 VS 2017、2019 和 2022 年是这样。
正如 Vince De Giorgio 在 2019 年的回答中所说,我也没有重复的 .resx 或 .cs 文件,也没有重复的...EmbeddedResource Include= .../> .csproj 中的标签。
删除两个涉及的表单的 .resx 文件(图标消失了,很明显),清理解决方案然后重新启动 VS 是一种穷人的解决方法,因为每次我再次添加图标或其他资源时,都会出现同样令人讨厌的错误。更糟糕的是:为了恢复,我不得不 Git 存储所有修改;如果我手动还原所有更改,以至于 Git 无法识别任何更改,即使在清理、重新启动 VS 和重建之后,错误也会继续(!!!)。
要解决 VS 2019 和 2022 中的问题:
每次我想复制表格时,我都会:
再也没有这个问题了。
对我来说,问题是复制和粘贴 .aspx,而不是重命名类文件后面的代码以匹配复制的 aspx 文件的名称。更改背后的代码和设计器类名称有效。
在我的选择中,帮助为每个引发错误的表单删除一个 *.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 时,我第一次看到这个错误。
我想在遇到这个错误后我会在至少一个随机论坛上发帖,希望能缓解别人的问题。我搜索了许多谷歌网站,没有一个有我的确切问题。我的原因是相似的,但在某些方面有所不同。
我实际上有一个分布在多个文件中的部分类。这个类是一个表单类。这本身是成功的,并没有造成问题。但是,这会导致新类在保持拆分“类表单”代码的同时保留其唯一的文件名。这很可能不是犹太洁食的做法,但当时还是发生了。这似乎是一个很好的选择,可以让很多杂乱的代码摆脱困境。不用说,下次我将只使用区域或其他替代方法。
然后,当我尝试从第二个文件中获取代码并将代码复制/粘贴到一个新的非格式文件中时,就会发生错误,因为我原本打算将其本质上变成一个库并使代码更合适,并且可读。由于我不知道究竟是什么导致了错误发生并且进行了少量更改,因此需要一些时间来跟踪。即使在反转代码之后,我还是设法错过了一对方法。
包含类 Form 的主窗体的方法以及 initializeComponent 和窗体构造函数(加载)。这些方法的第二个副本似乎会导致相同的错误。即使删除了额外的代码和额外的表单和 resx 文件。我什至尝试删除合法的 resx 文件,因为它不是主动需要的。我无法有效地跟踪它,因为任何错误都指向这些代码段的合法版本。Ctrl+F 和备份副本是您的朋友。
希望对某人有所帮助
我确认评论中给出的 WimOmbelets 答案。当您在 VS2012 中重命名一个类时,这显然会发生(我在以前的版本中从未有过这个)。
我不能确定这是不是原因,但我做的与正常方式不同的一件事是我使用F2重命名它,而不是更改它然后按control-。
当我重命名我的一个Form
类时,我遇到了同样的问题,使用Ctrl + R + R
VS 默认提供的重命名事物。
然后我在两个不同的文件(*.cs)上得到了两个具有相同类名的类。
class Bar { ... } // From Bar.cs
class Bar { ... } // This should've been Foo, from Foo.cs
这两个Bar
指示相同的资源文件,其中一个不应该。
这是一个微不足道的问题,但有时可能很难找到原因,因为查看cs 文件无法说出您应该寻找哪个文件。