0

私が抱えている問題は、同じプロジェクトで 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 のみが出力フォルダーに表示されることです。

解決策や提案は大歓迎です。

4

0 に答える 0