2009年9月17日 (木)

VSeWSS v1.2 を使った場合の不具合について

VSeWSS v1.2 を利用して遭遇した不具合とその対処方法です(なお、VSeWSS v1.1 では動作確認していません)。

※ VSeWSS はマイクロソフトの技術サポート対象外のツールであり、記載する内容はあくまでも私見ですので、実施される際には個人の責任で行っていただけるようお願いいたします。

不具合が出る操作

VSeWSS を使用して、Webパーツなどが開発できます。Webパーツの展開を行うには、デバッグの設定で展開先のSharePoint サイトのURLを指定し、展開を行います。

[図.デバッグ設定]
Vsewssdebug

しかし、同じソリューションで一度展開したプロジェクト内容をそのまま同一サーバー上の別の Web アプリケーション (IIS サイト) に展開したいと考え、VSeWSS のデバッグ設定で別の URL を指定して、再び展開しようとすると「このソリューションに同じ名前のアセンブリが2つ含まれているか、指定した名前のアセンブリが SharePoint サーバーにすでに存在します」というエラーメッセージが表示されます。

一度、エラーになってしまうとURLを元のURLに戻して再展開しようとしてもその後展開できなくなってしまいます。

[図.エラーの出力メッセージ]

Vsewssdebugerror

これは、ついやってしまいがちなミスです。

調査した結果

VSeWSS で ソリューションを展開すると WSPファイルが作成され、これがソリューションとしてSharePoint の構成データベースに登録されます。

(参考) http://msdn.microsoft.com/ja-jp/library/aa544500.aspx

そもそも、ソリューションを利用する場合の展開の大まかな流れは次の通りです。

1.ソリューションを追加する
2.ソリューションを展開する
3.フィーチャーをアクティブ化する

ソリューション展開の詳細は、日本のマイクロソフトのサポートチームのブログ記事が参考になります。

「ソリューションを展開する」
http://blogs.technet.com/sharepoint_support/archive/2009/07/15/wsp.aspx

VSeWSSでは上記の処理を自動的に実行しますが、この2.のソリューションを展開する際に、VSプロジェクトにおいてデバッグ設定で指定した SharePoint WebアプリケーションのURLに対してのみ適用します。同じプロジェクトを再度展開する場合は、いったん展開したものを削除して、再度インストールしなおす処理が行われます。

このとき、最初に展開した場所と異なるURLを指定していると、ソリューション(WSP)は情報は削除されるのですが、フィーチャーのみがアクティブのまま残るという状況となるようです。どうも、これが再展開できないエラーの原因であるようです。

対処方法

フィーチャーが残っていることが原因ですから、まずはフィーチャーを削除してからIISを再起動します。

1.当該フィーチャーの非アクティブ化 (管理サイト または stsadm.exe)
2.フィーチャーの削除 (stsadm.exe)
3. IIS の再起動

フィーチャーの削除は、最初に展開したフィーチャーのうちアクティブになっている全てのフィーチャーを非アクティブ化後、 stsadm.exe を使用して削除します。

[参考]
stsadm.exe を使ってフィーチャーを非アクティブ化する
https://www.microsoft.com/japan/technet/archive/prodtechnol/office/sharepoint/library/5fa25274-170a-42e1-a24b-4811fe4e5482.mspx?mfr=true

stsadm.exe を使ってフィーチャーを削除する
https://www.microsoft.com/japan/technet/archive/prodtechnol/office/sharepoint/library/5fa25274-170a-42e1-a24b-4811fe4e5482.mspx?mfr=true

以上、ご参考まで。

トラックバック

このページのトラックバックURL: http://bb.lekumo.jp/t/trackback/718613/34255697

VSeWSS v1.2 を使った場合の不具合についてを参照しているブログ:

コメント

私も同じ状況に陥りました。

ひとつの開発環境(開発用のMOSS+VS+VSeWSS)で、複数のWEBパーツを開発するときは、ソリューションをどうやって作成したらいいのでしょうか?

まさのりさん、ご無沙汰しております。

さて、ご質問の内容は、単純に複数の異なる Web パーツを展開するためのソリューションパッケージの作成方法でしょうか? ソリューション パッケージの定義を記述する際にそれぞれ一意にすればよいだけですね。

この記事で問題になっているのは、同じWebパーツをファーム内の異なる Web アプリケーションに配置する手順を、VSeWSSの自動化処理に任せたままにしていると問題になるという話です。本来の正しい手順は、同一のソリューション パッケージがすでにファームに追加されているのであれば、管理ツールを使ってソリューションの展開先の指定を追加指定するだけです。これでフィーチャーが自動的に展開されます。

ソリューション パッケージの概念や基本的な作成方法は、下記 MSDNサイトを参照されるか、
http://msdn.microsoft.com/ja-jp/library/aa543214.aspx
または手前味噌ですが「VSTOとSharePoint Server 2007における開発技術」書籍に記載がありますので、確認していただくとよいと思います。happy01