5

ClickOnceを使用して展開しているVisual Studio 2005で開発されたアプリケーションがあります。私のソリューションには、VBでコード化されたユーザーインターフェイスレイヤーと、C#でコード化されたクラスライブラリという2つのプロジェクトが含まれています。私のC#クラスライブラリには、OutlookとExcelの相互運用機能アセンブリ(Microsoft.Office.Interop.OutlookとMicrosoft.Office.Interop.Excel、いずれもバージョン11)を使用するコードがあります。ここに私の質問があります。Microsoft Office Interopアセンブリの参照

  1. これは絶対として記載されているところ、私が発見していないが、私の理解では、相互運用機能アセンブリを使用するアプリケーションをインストールするために、Officeアプリケーション(見通し/エクセル)の適切なバージョンを持っていなければならないということです。これは正しいです?

(1 =はい)すると

どのようにあなたのアプリケーションが唯一の選択数によって利用される機能の唯一のカップルのための相互運用機能アセンブリを使用している状況を扱うたい場合総ユーザーベース?なぜ、一部のユーザーだけがそれらの機能を使用する必要がある場合、アプリケーションのすべてのユーザーにMicrosoft Officeをインストールする必要がありますか?これらのInteropアセンブリは、.dllファイルなので、プロジェクトにファイルを公開するだけでなく、クライアントにインストールされているソフトウェアに関係なく参照を満たすことができないという点で他と大きく異なるのはなぜですか? (明らかに私はGACの理解が乏しく、Visual Studioの動作に影響を与えています)。自分のコードを使用して、必要なOfficeソフトウェアが存在するかどうかを調べることができます。その後、ユーザーは時に次のエラーが発生しないように私のセットアップ私の参照とClickOnceの設定を行う他にどのように

事務所ない、機能へのアクセスがない...この上の私の理解が間違っている場合は、インストールの試行ですか?

「アプリケーションをインストールまたは実行することができません。アプリケーションは、アセンブリのOfficeのバージョン11.0.0.0は最初のグローバルアセンブリキャッシュ(GAC)にインストールされている必要があります。

は、システム管理者にお問い合わせください。」

  • Interop参照のCopyLocalプロパティをTrueとFalseの両方に設定しようとしました。
  • 私のClickOnceアプリケーションファイルのリストでは、これらのアセンブリを含める、除外し、前提条件を設定しようとしました。
  • 私の研究では、* C:\ WINDOWS \ assembly \ GAC *、* C:\ Program Files \ MicrosoftのVisual Studio 9.0 \ Visual Studio Tools for Office \ PIAを参照している人がいます。 \ Office11 *参照パスを変更する方法が見つかりませんでした。 http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspxによれば、GACからの参照を追加できないため、他の人はどのように管理しましたか?
  • 私は、C:\ Program Files \ Microsoft Visual Studio 9.0 \ Visual Studio Tools for Office \ PIA \ Office11 *からプロジェクトディレクトリに参照をコピーしてそこに参照しようとしました。私は私が知っている必要があります主なものは、どのように/私は私の出版物におけるこれらのアセンブリを含めると満足またはGACの要件をバイパスすることができた場合であると仮定し

    場合

終了。

可能であれば、できるだけ具体的な質問に直接お答えください。記事は参考になりますが、私はすでにたくさんの記事を読んで、多くの提案された解決策を試してみましたが、成功していませんでした。これがどのようにして始まるのかという物流の理解が不足していることに留意してください。

私の理解の不足のために私を許し、あなたが提供できるすべてのお手伝いをありがとう。大変感謝しています!

答えて

2

私の経験では、幅広い展開シナリオでオフィスinteropアセンブリを管理しようとするのは悪夢です。 ClickOnce経由で導入する場合は、上記のGAC問題を回避しても(IT部門に企業環境の場合は相互運用機能アセンブリのGAC登録をプッシュすることによって)、ユーザーは標準とは異なるバージョンのOfficeを使用しています.Heavenは、Office 13がリリースされ、ユーザーがアップグレードを開始してアプリケーションを壊すときに役立ちます。

バージョン連動型相互運用機能アセンブリを使用するには、バージョンに依存しないOffice COMラッパーに直接pinvokeを使用してオフィスオートメーションを実行することができます。レジストリ)。しかし、これには独自の展開の難題があります(たとえば、PIAをインストールしたマシンを処理するためにレジストリを更新する必要があるかもしれませんが、展開にClickOnceを使用すると非常に困難かもしれません)。

私が靴を履いていた場合は、クラスライブラリで使用している相互運用性の機能を詳しく見ていきます。必要な機能を提供する別の方法がありますクライアントマシン?おそらく、クライアントがリクエストにカスタマイズオフィスドキュメントを生成し、ダウンロードのためにそれを提供するために、サーバーを提出し、サービス指向のソリューションが...。ここ

+0

ありがとうございます。これまでのところ私はバージョンの競合の問題を抱えていませんでした。2003年と2007年の両方のユーザーはこれらの機能をうまく使えました。私は本当に私が思っていることを本当にターゲットにするより簡単な質問があると思うが、アプリケーションの非Interop機能を使用できるようにするために、Officeのバージョンを持っていないユーザーに対してアプリケーションをインストールできるようにすることはできますか? Interopベースの機能を使用するにはOutlook/Excelが必要ですが、私のアプリケーションのほとんどはOfficeには関係ありません。 –

+0

Interopコードの1つのインスタンスでは、Officeをインストールしたユーザーにアプリケーションを完全に限定しないと思っています。 –

+0

ダウンロードオンデマンド(http://msdn.microsoft.com/en-us/library/ak58kz04(VS.80).aspx)を使用することを試してみることをお勧めします。 Office interopクラスを含むアセンブリを呼び出す/ダウンロードする場合は、Officeがインストールされているかどうかを確認する必要があります。私が知らないのは、ダウンロードオンデマンドアセンブリが実際にダウンロード要求されるまで、またはゲートからすべての可能性のある依存関係がチェックされるまで、ClickOnceが依存関係をチェックするのを遅らせるかどうかです。 –

1

は、私が経験から知っているものです(私たちはClickOnceのが、を使用していないことを指摘しなければなりませんなぜそれが問題なのか分かりません):

Excel 2003 APIに書き込んでExcel 2007のマシンにデプロイすると、Excel 2007が本質的にExcel 2003を偽装するために動作します。問題はいくつかのAPIが変更されていることですそれらは削除されたものもあります。アプリケーションが影響を受けるかどうかは、自分で試してみる必要があります。

実際、それよりも少し悪いです。 Excel 2003とExcel 2007がインストールされているマシンでアプリケーションを実行すると、InteropでExcel 2007が使用されます。

を使用すると、Excel互換のWindowsフォームコントロールが完全に1つに実装されます。 NETアセンブリを使用しているため、アプリケーションはOfficeに依存しません。

あなたはそれを試してみたい場合は、無料トライアルhereをダウンロードすることができます。

免責事項:私は、スプレッドシートギア社が

1

最良の方法は、遅延バインディングライブラリ

https://sourceforge.net/projects/exceldata/

  • サポート、各種の異なるオフィスのバージョンとiteropsとのTLBと無nigthmareに使用することです所有しますオフィス
  • 簡単に変更できます

しかし:

  • そのハードこのライブラリをサポートするための
0

COMインターフェイスと後期バインディングを使用してください。 VB.NETは、後でバインディングをサポートしています。 Marshal.GetActiveObject()を使用し、変数の型をObjectに設定するだけです。これを行うVB.NETオブジェクトを作成し、C#から呼び出すことができます。

リフレクションAPIを使用している場合、C#ではレイトバインディングを取得しますが、これを使用してコードを書くのはかなり苦労します。 C#4では、動的型を介してレイトバインディングを取得することもできます。

これを行うと、Officeアセンブリ内のオブジェクトの属性が変更されない限り、Officeアセンブリを配布する必要はなく、コードは機能します。

レイトバインディングコードは初期バインディングコードよりも低速ですが、多くの目的でこれは問題にはなりません。

8

NetOfficeプロジェクト:http://netoffice.codeplex.com/を参照してください。

これは、バージョンに依存しない相互運用機能アセンブリの無料(MITライセンス)版と完全版(すべてのバージョン2000-2010およびすべてのOfficeアプリケーション)セットです。アセンブリは、ツールを使用して実際のPIAから生成されるため、正しい、完全で最新のものであり、将来のバージョンですぐに更新される可能性があります。

また、各メンバのIntelliSenseには、そのメンバを実装するOfficeバージョンが表示されています。

展開するには、アプリケーションでアセンブリをコピーまたはインストールします。

関連する問題