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


71

最近,我创造了新的FormWorkersScreen。当我尝试运行项目时,出现此错误:

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

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


10
确保您没有两个.resx文件
Wim Ombelets

@WimOmbelets,我也刚收到这个错误,也感谢您为我节省了时间,我想说的是,您应该把它作为答案
Aaron Anodide

问题是两个同名移民(大写是不同的。)
Tony Trembath-Drake

Answers:


87

如果两个.resx文件指向同一格式,则可能会发生这种情况。重命名表单时通常会发生(其他原因可能适用,我不确定)

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

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

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


7
同样,重新打开该项目并从解决方案资源管理器中删除MyFormerFormName.resx,Visual Studio可能仍会引用它。这通常对我有用。
贾汀·格拉

1
@XPecto谢谢!直到我这样做,Wim的解决方案才起作用!
匿名Pi 2014年

为什么未选择此解决方案?
Alex Jolig 2015年

如果问题仍然存在,一定要打开的.csproj和删除引用到的.resx
肖恩·

37

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

  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>

保存它,右键单击您的项目,然后单击重新加载项目。大功告成!


1
这正是我所做的,并且就像一个魅力!
极客

如果找不到任何副本该怎么办?我尝试使用Ctrl + F并使用错误的文件名,但似乎没有任何重复项。
亚伦·弗兰克

关于资源文件,我遇到了这个问题。我删除了与资源有关的所有内容,然后在保存后删除了资源文件本身。已编译。添加了新的.resx。一切都很好。
香草

7

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

Add-Migration "UpdateProducts"

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

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

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


我删除了问题迁移,并创建了一个其他名称的新迁移
Kirsten Greed '18

2

我做了一点搜索,我遇到了同样的问题,可能是因为您的表单有两个.resx,如果您尝试删除一个,则问题将消失在我的表单中:

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

我删除了Log_in.resx,并且我的程序再次工作



1

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


1

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

具体来说,以下内容:

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

我没有说这就是答案。我只是说“就我而言”,是为了说明是否有人遇到相同的原因。抱歉浪费您的时间来阅读它。
mtRoom

1

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

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

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

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

希望这可以帮助


1

在所有项目中搜索错误列表中报告的类,就像在这种情况下DryWash.WorkersScreen,可以在另一个文件名相同但在相同类名内的另一个文件中重复该类。


1

当我意外生成与业务对象同名的迁移时,出现了此问题。解决方案是删除迁移,然后使用其他名称创建一个新迁移。


1

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

我没有重复的.resx文件。我没有重复的.cs文件。我无法在线找到解决方案。

为了解决该问题,我清理了解决方案,然后重新启动了VS。不知道为什么,但是它起作用了。希望这可以帮助。


1

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


0

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

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

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


这就是我所做的(将整个.cs复制并粘贴到对象资源管理器中,重命名为.cs,然后在VS 2013中重命名为.property)。还是得到错误?
da Bich 2015年

啊..我想我现在看到了。当我在复制的文件上重命名表单时,它也在原始文件上也重命名了表单!并重构所有引用。喜悦。
da Bich

@daBich是的,知道了,我已将Form1.cs复制到Form1_Copy.cs,将Form1_Copy重命名为Form2,但是随后发现在Form1.cs和Form1.Designer.cs中对Form1类的所有引用都已更改为Form2。svn revert
起到

0

这在我运行Add Migration命令时发生了,并给我的项目名称和迁移类的名称相同。我删除了所有迁移类,并添加了一个新的类,再次构建了解决方案。


0

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

详细信息

在我们的项目中,每个表格都有6个* .resx用于本地化(DE,GB,SK,RU,SRB),如果我从VS中删除FormName.sr-Latn-CS.resx,错误消失了。如果我尝试删除FormName.en-GB.resx,则无济于事。错误消失了,仅是删除sr-Latn-CS.resx(也许设计者无法解决两个-)。当我将项目从VS 2010 Win 7迁移到VS2010 Win 10时,我第一次看到此错误。


0

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


我确实在进行迁移,但是就我而言,我做错的是“添加迁移小写字母”。删除最新的.cs文件,并使用正确的名称运行“添加迁移”,为我修复了该文件。
莫里西奥·拉玛略

0

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


0

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


-1

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

实际上,我有一个跨多个文件的局部类。此类是表单类。这本身就是成功的,并且没有引起任何问题。但是,这导致新类在保留拆分的“类窗体”代码的同时保留其唯一文件名。这很可能不是犹太实践,但当时却发生了。消除很多混乱的代码似乎是一个不错的选择。不用说,下一次我将仅使用区域或其他替代方法。

然后,当我尝试从第二个文件中获取代码并仅使用一个类将其复制/粘贴到新的非格式文件中时,便发生了错误,这是我原本打算将其转换为库并使代码更加正确且可读的。由于我不确切知道是什么原因导致错误发生,并且进行了少量更改,因此花了一些时间进行跟踪。即使在反转代码之后,我也仍然错过了两种方法。

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

希望能帮助到某人


-2

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

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


-2

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

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

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

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

这是一个琐碎的问题,但有时可能很难找到原因,因为查看CS文件只是不能说出您应该寻找的是哪个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.