私が抱えている問題は、同じプロジェクトで 2 つのサードパーティ DLL を参照として使用する必要があることです。ただし、この 2 つは同じ名前を持っています。同様の問題に関するいくつかのスレッドを見つけましたが、どれも私の問題を解決しません。
私が達成しようとしていること:
Siemens には、PLC (産業用アプリケーションのコントローラ) のプログラミングに使用される「TIA-portal」と呼ばれるプログラミング パッケージがあります。Siemens は、.NET プロジェクトでリファレンスとして使用できる DLL も提供しています。これにより、独自のアプリケーションで TIA ポータルの機能を使用できます。この DLL は、TIA ポータルのコードを自動的に生成するためによく使用されます。
数年ごとに、Siemens は TIA ポータルの新しいバージョンをリリースします。最新のものはバージョン 17 です。アプリケーションをバージョン 16 と 17 の両方で動作させたいと考えています。唯一の違いは、参照する DLL です。
私の問題:
両方のバージョンの DLL は、「Siemens.Engineering」という同じ名前になっています。
私が試したこと:
別のスレッドから、エイリアス プロパティを使用して、同じプロジェクトで同じ名前の 2 つの参照を使用できることを知りました。2 つの参照に別名「TIAv16」と「TIAv17」を付けました。(両方の参照を追加できるようにするために、DLL のファイル名を変更する必要がありました)
これを行った後にコンパイルすると、Visual Studio でエラーが発生しませんでした。ただし、出力ウィンドウに次のエラーが表示されます。
warning MSB3243: No way to resolve conflict between "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" and "Siemens.Engineering, Version=16.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84". Choosing "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" arbitrarily.
output-folder を見ると、2 つの DLL のどちらもそこにないことに気付きました。
この問題は、両方の参照が「Siemens.Engineering」という同じ ID を持っていることが原因であると考えています。
私の質問
したがって、問題を正しく理解していれば、2 つの解決策が考えられます。
1: DLL ファイルを編集します。
Identity プロパティを変更する方法で DLL を編集する方法はありますか? 「Resource Hacker」というプログラムを使ってみました。ただし、必要な変更を加える方法が見つかりませんでした。
2:プログラムの構造を変更します。
問題を完全に無効にするために、ソリューションを再構築する方法はありますか?
私が以前に試したのは、ソリューションでユーザーコントロールごとに2つの別々のプロジェクトを作成することです。これらの各プロジェクトには 1 つの DLL しかありません。
私のメイン アプリケーションでは、これら 2 つのプロジェクトを参照として使用し、それぞれのユーザー コントロールを使用できるようにします。これの問題は、両方の DLL が同じ名前を持っているため、一方の DLL のみが出力フォルダーに表示されることです。
解決策や提案は大歓迎です。