最近、私はForm
と呼ばれる新しいものを作成しましWorkersScreen
た。プロジェクトを実行しようとすると、次のエラーが発生しました。
エラー 1 2 つの出力ファイル名が同じ出力パスに解決されました: "obj\x86\Debug\DryWash.WorkersScreen.resources"
それは何を意味し、どのように解決しますか?
これは、2つの.resxファイルが同じフォームを指している場合に発生する可能性があります。ほとんどの場合、フォームの名前を変更するときに発生します(他の理由が当てはまる場合がありますが、正確にはわかりません)
特定のフォームファイルが次のようになっている場合:
Form1.cs
Form1.designer.cs
MyFormerFormName.resx
Form1.resx
これは通常、フォームの名前を変更したが、VisualStudioが古い.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>
そのうちの1つを削除して、次のようにします
<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>
保存し、プロジェクトを右クリックしてからreload projectをクリックします。これで完了です。
少し検索しましたが、同じ問題がありました。おそらく、フォームに2つの.resxがあるため、1つを削除しようとすると、問題は私のフォームから消えます:
Form1.Designer.cs
Form1.resx
Log_in.resx
Form1
Log_in.resx を削除したところ、プログラムが再び動作しました
これは、フォームをコピーしてほとんどの機能を再利用し、フォームの名前を変更したときに発生しました。参照されているディレクトリに移動し、実際にはファイルが 1 つしかないことを確認し、問題のファイルをコピーして、新しいフォームの名前を参照するように名前を変更し、新しいファイルをディレクトリに貼り付けました。
これは良い習慣だとは思いませんが (C# は初めてです)、すべてを再作成する必要はなく、うまくいきました。また、ソリューション全体のいくつかの場所でフォーム名を更新する必要がありましたが、元のフォームと新しいフォームで驚くべきことでした。
フォームをコピーするのは得策とは思えません。
これは私に起こったことです。誤ってフォームを別のフォームに「ドラッグ アンド ドロップ」してしまいました。「のコピー」と呼ばれるコピーを作成することになりました。私はそれを削除し、問題はなくなりました。
このエラーが発生した後、他の誰かの問題を緩和することを期待して、少なくとも 1 つのランダムなフォーラムに投稿すると思いました。多くの Google サイトを検索しましたが、正確な問題を抱えているサイトはありませんでした。私の原因は似ていましたが、いくつかの点で異なっていました。
実際には、複数のファイルにまたがる部分クラスがありました。このクラスはフォーム クラスでした。これはそれ自体で成功し、問題は発生しませんでした。ただし、これにより、分割された「クラス フォーム」コードを維持しながら、新しいクラスが一意のファイル名を保持するようになりました。それはおそらくコーシャの慣行ではありませんでしたが、それでも当時は起こりました. 多くの雑然としたコードを邪魔にならないようにするための良い代替手段のように思えました. 言うまでもなく、次回はリージョンまたはその他の代替手段を使用します。
次に、2番目のファイルからコードを取得し、クラスだけを含む新しい非フォームファイルにコピー/貼り付けしようとしたときにエラーが発生しました。これは、本質的にライブラリに変換してコードをもう少し適切にすることを意図していたためです。読み取り可能。エラーが発生したときに何が原因でエラーが発生したのか正確にはわからず、小さな変更を加えていたため、追跡に時間がかかりました. コードを逆にした後でも、メソッドのペアを見逃すことができました。
クラス Form を含むメイン フォームのメソッドと、initializeComponent およびフォーム コンストラクター (ロード)。これらのメソッドの 2 番目のコピーは、同じエラーになるように見えました。余分なコードと余分なフォームと resx ファイルを削除した後でも。積極的に必要とされていなかったので、正当な resx ファイルを削除しようとさえしました。エラーがこれらのコード セグメントの正当なバージョンを指していたため、効果的に追跡できませんでした。Ctrl+F とバックアップ コピーはあなたの友達です。
誰かを助けることを願っています
コメントに記載されているWimOmbeletsの回答を確認します。これは、VS2012でクラスの名前を変更したときに明らかに発生する可能性があります(以前のバージョンではこれはありませんでした)。
これが原因かどうかはわかりませんが、通常の方法とは異なることの1つは、変更してからcontrol-を押すのではなく、F2を使用して名前を変更したことです。
VSがデフォルトで名前を変更するために提供するForm
クラスの名前を変更したときに、同じ問題が発生しました。Ctrl + R + R
次に、2つの異なるファイル( *.cs )に同じクラス名を持つ2つのクラスを取得しました。
class Bar { ... } // From Bar.cs
class Bar { ... } // This should've been Foo, from Foo.cs
2 つBar
は同じリソース ファイルを示しており、そのうちの 1 つはすべきではありません。
これは些細な問題ですが、 cs ファイルを調べても、どのファイルを探すべきかがわからないため、原因を見つけるのが難しい場合があります。