2011-07-20 51 views
2

ユニットテストを作成しました。テスト対象のコードは、Microsoft.Office.Interop.Excel.dllを参照しています。Microsoft.Office.Interop dllでのユニットテストがビルドサーバで失敗する

テストは自分のマシンで正常に実行されますが、ビルドサーバーでは失敗します。これは、Excelアプリケーションがインスタンス化された行に失敗します。

var application = new Application { Visible = Visible }; 

エラーがある:これは私が私のビルドサーバー上で再配布可能なプライマリ相互運用機能アセンブリをインストールする必要が

System.Runtime.InteropServices.COMException: 
Retrieving the COM class factory for component with CLSID 
{00024500-0000-0000-C000-000000000046} failed due to the following error: 
80040154 Class not registered 

ということですか?もしそうなら、ビルドサーバーにExcelをインストールする必要がありますか?

編集: Microsoft.Office.Interop.Excel.dllは私のソリューションに含まれており、そこから参照されています。

+0

テストが存在するアセンブリを必要とする場合には、明らかにそれはテストが実行されているマシン上にある必要があります。それとも、他に何かを求めていますか?そのマシンに単一のDLLを登録するだけで、Excelをインストールする必要はありません。そのDLLが[dependency walker](http://www.dependencywalker.com/)との依存関係をチェックしてください。 –

+0

これを行うには、ビルドサーバーにOfficeをインストールする必要があります。 – vcsjones

+1

@Peterありがとう、私は解明するために私の答えを編集しました。私はすでにdllを登録しようとしましたが、「DllRegisterServerエントリポイントが見つかりませんでした。このファイルはこのユーザーに登録できます」とこの男のように:http://serverfault.com/questions/59431/regsvr32-error-dllregisterserver-entry-point -was-not-found –

答えて

1

このバージョンを使用するには、Officeとプライマリ相互運用機能アセンブリをインストールする必要があります。 CI環境で実行するとCOM問題が発生する可能性があります。また、Office Interopの使用を避けるためにテストを再構成できる場合は、お勧めします。

+1

ボーナス:x64 Server 2008のボックスでOffice 2007をテストする場合は、レジストリをハックして動作させる準備が整いました。 –

+0

申し訳ありませんが、((Office && PIA)|| Visual Studio)または(Office &&(PIA || Visual Studio))をインストールする必要がありますか? :-) –

+0

Visual StudioはPIAアセンブリを「Office開発ツール」の一部としてインストールします。 VS2010には、2007年と2010年のPIAアセンブリが含まれています( 'C:\ Program Files(Microsoft)Visual Studio 10.0 \ Visual Studio Tools for Office \ PIA \ Office12'または 'Office14'フォルダ)。 Office(2k7または2k10)をインストールする場合は、「.Net Programmability Support」を有効にしてインストールできます。 3番目のオプションはOfficeをインストールし、PIAを再インストールすることです。 3番目のオプションは、Officeをインストールした後で、単に「変更」モードでOfficeインストーラを実行するのではなく、簡単なセットアップを実行する場合に便利です。 –

2

ライブラリフォルダ内のソリューションにMicrosoft.Office.Interop.Excel.dllを追加し、そこにアセンブリを参照すると、ビルドマシンは、昇格時に必要なアセンブリを取得する必要があります。それ以外の場合は、Excelのインストールに付属するアセンブリを参照しています。また、アプリケーションをExcelにインストールされていないアプリケーションを実行しようとする人は、実行時エラーが発生する可能性があります。

もちろん、アセンブリを再配布したくない場合は、Excelアセンブリを呼び出すコードの前後にtry/catchを配置して、Excelのインストールを示すメッセージを表示することもできます必須。

最後に、各バージョンのExcel(2010、2007など)には異なるバージョン番号があります。つまり、2010年のアセンブリを使用していて、誰かが2007年のExcelをインストールしていると、ランタイムエラーが発生します。その答えは、その環境で使用されているアセンブリを選択するためのリフレクションでした。

+0

こんにちはマーカス。ありがとう、はい私はすでにソリューションフォルダに.dllがあり、そこから参照されています。私は明確にするために質問を更新します。 –

+0

ビルドマシンにアセンブリを登録するための任意の種類のスクリプトを実行していますか? – Marquis

3

あなたがinstall the PIAに必要なようにはい、それはなります

Microsoft Office製品用のプライマリ相互運用機能アセンブリを再配布するMicrosoft Windowsインストーラパッケージでも使用できます。

のMicrosoft Office 2003のパッケージがありますMicrosoftダウンロードセンターからダウンロードできます(http://go.microsoft.com/fwlink/?LinkId=50479)。

2007 Microsoft Office system用のパッケージは、Microsoftダウンロードセンター(http://go.microsoft.com/fwlink/?LinkId=72637)からダウンロードできます。

そして、完全を期すために、Office 2010のパッケージはここにある:(http://www.microsoft.com/download/en/details.aspx?id=3508

関連する問題