シナリオ
Microsoft Office には 2 つのラッパーがあり、1 つは 2003 用、もう 1 つは 2007 用です。Microsoft Office の 2 つのバージョンを並べて実行することは「公式には不可能」であり、Microsoft によっても推奨されていないため、1 つは Office 2003 用で、もう 1 つは 2 つのボックスがあります。 Office 2007 を使用します。ラッパーは個別にコンパイルします。DLL はソリューションに含まれています。各ボックスには同じチェックアウトがありますが、Office 2003 または 2007 が「アンロード」されているため、その特定の DLL をコンパイルしようとしません。そうしないと、Office COM DLL が利用できないため、コンパイル時にエラーがスローされます。
.NET 2.0 と Visual Studio 2008 を使用しています。
事実
Microsoft は 2007 年に Office 2003 API を不思議なことに変更し、いくつかのメソッドの名前を変更したり変更したりして (ため息)、後方互換性をなくしたため、2 つのラッパーが必要です。各ビルド マシンには、ソリューションと 1 つの Office DLL がアクティブ化されています。例: Office 2003 を搭載したマシンでは、「Office 2007」DLL がアンロードされているため、コンパイルされていません。もう一方のボックスも同じアイデアですが、逆です。これはすべて、プログラミング目的で同じボックスに 2 つの異なる Office を入れることができないためです。(Microsoft によれば、技術的には 2 つの Office を一緒に使用できます) が、プログラミング用ではなく、いくつかの問題がないわけではありません。
問題
アプリケーションのバージョンを (たとえば 1.5.0.1 から 1.5.0.2 に) 変更する場合、DLL を再コンパイルしてアプリケーションの新しいバージョンに一致させる必要があります。Office ラッパーがソリューションに含まれているため、これは自動的に行われます。ラッパーはソリューションに含まれているため、APP バージョンを継承しますが、それを 2 回行ってから、他の DLL をインストーラーを作成するマシンに「コピー」する必要があります。(痛み…)
質問
「古い」にもかかわらず、どのバージョンのアプリケーションでも動作する DLL をコンパイルすることは可能ですか? マニフェストについて何か読んだことがありますが、マニフェストとやり取りする必要はありませんでした。任意のポインタをいただければ幸いです。
これの秘密の理由は、私たちが「何年にもわたって」ラッパーを変更しておらず、Microsoft の古い API も変更していないためです。それでも、リリースごとにアプリのバージョンに一致するように DLL を再コンパイルしています。2台のマシンに頼る代わりに、このプロセスを自動化したいと考えています。
依存関係があるため、プロジェクトから DLL を削除できません (どちらも削除できません)。
3 番目の「マスター ラッパー」を作成できますが、まだ考えていません。
何か案は?同じ要件を持つ他の誰か?
アップデート
明確化:
N 個のプロジェクトで 1 つのソリューションがあります。
「アプリケーション」+ Office11Wrapper.dll + Office12Wrapper.dll。
両方の「ラッパー」は、ソリューション内のアプリケーション + 他のライブラリ (データレイヤー、ビジネスレイヤー、フレームワークなど) の依存関係を使用します。
各ラッパーには、それぞれの Office パッケージ (2003 および 2007) の参照があります。
Office 12 がインストールされていない状態でコンパイルすると、Office12Wrapper.dll から Office 2007 ライブラリが見つからないというエラーが発生します。したがって、私が持っているのは、Office 2003 と Office 2007 の 2 つのビルド マシンです。完全な SVN の更新と各マシンでのコンパイルの後、「インストーラー」で office12.dll を使用して、ラッパーを「同じ」に対してコンパイルします。コード、同じバージョン".
注: Office 2007 ビルド マシンには、Office 2003 用のラッパーが「アンロード」されており、その逆もあります。
前もって感謝します。