SPMetal を使用する
最終更新日: 2011年2月2日
適用対象: SharePoint Foundation 2010
この記事では、SPMetal コマンド ライン ツールを使用して、Microsoft SharePoint Foundation ソリューションのエンティティ クラス宣言を生成する方法について説明します。
SPMetal を使用するように開発プロジェクトをセットアップするには
SPMetal.exe へのパスを開発コンピューターの Windows %PATH% 環境変数の末尾に追加する方法について説明します。通常は、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN です。
Windows Server コンピューターの [スタート] メニューで、[コンピューター] を右クリックして、次に [プロパティ] をクリックします。
[システム] ダイアログ ボックスで [システムの詳細設定] をクリックします。
[システムのプロパティ] ダイアログ ボックスで、[詳細設定] タブ、[環境変数] の順にクリックします。
[システム変数] リストで [パス] を強調表示し、[編集] をクリックします。
[システム変数の編集] ダイアログで、[変数値] の末尾にセミコロンを追加し、SPMetal.exe を含むフォルダーへのパスを追加します。[OK] を 3 回クリックします。
注意
この手順を実行するときに Microsoft Visual Studio を開いている場合は、1 度閉じて、再度開き、新しい %PATH% 変数を認識させる必要があります。
LINQ to SharePoint コードを開発するテスト基盤として機能する SharePoint Foundation Web サイトを開発コンピューターに作成します。現在の開発状況でコードを可能な限り確認できるように、ソリューションに付属する最終的なサイトの種類と同じリスト、列、およびルックアップ フィールドを含める必要があります。この情報は SPMetal ツールで読み取られます。ただし、ツールは再実行できます。したがって、プロジェクトの進展に応じて設計を変更できます。
Visual Studio プロジェクトを開き、テキスト ファイルを Prebuild.bat という名前でプロジェクトに追加します。
Prebuild.bat を開きます (まだ開いていない場合)。以下の行を追加します。
Echo Off SET SPLANGEXT=cs Echo Backing up previous version of generated code ... IF NOT EXIST .\PreviousVersionGeneratedCode MkDir .\PreviousVersionGeneratedCode IF EXIST SiteName.%SPLANGEXT% xcopy /Y/V SiteName.%SPLANGEXT% .\PreviousVersionGeneratedCode Echo Generating code ... SPMetal /web:http://MyServer/MySite /code:SiteName.%SPLANGEXT%
必要に応じて、次のようにコードを変更します。
Microsoft Visual Basic を使用する場合、2 行目の "cs" を "vb" で置き換えます。
"MyServer/MySite" を、LINQ to SharePoint コードを実行する開発コンピューターの Web サイトへのパスで置き換えます。
3 箇所すべての "SiteName" を Web サイトの名前で置き換えます。この文字列はファイル名になることに加えて、Web サイトのすべてのリストとデータを表すクラス名の一部にもなります。クラスが Web サイト全体を表すことを伝える文字列を使用します。たとえば、URL の末尾に表示される "MySite" や、ホーム ページの PlaceHolderPageTitle コンテンツ プレースホルダーの値を使用できます。
このバッチ ファイルにより、生成された前のバージョンのコードが保存されます。必要に応じて、このコードと新しいバージョンのコードを比較して、デバッグを行うことができます。
ファイルを保存します。ただし、ファイルを保存するときに、ツール バーの [保存] または [すべてを保存]、または [ファイル] メニューで [保存] は使用しないでください。Visual Studio では、テキスト ファイルの既定のエンコードは、システム バッチ ファイルと互換性がありません。代わりに、[ファイル] メニューで [名前を付けて Prebuild.bat を保存] を選択し、[保存するファイル名] ダイアログ ボックスで [保存] ボタンの下矢印をクリックして、[エンコード付きで保存] を選択します。[保存オプションの詳細設定] ダイアログ ボックスの [エンコード] ドロップダウン リストで [Unicode (UTF-8 シグネチャなし) - コードページ 65001] を選択し、[OK] をクリックします。必ず "シグネチャなし" バージョンの UTF-8 を選択するようにしてください。
ヒント 誤って間違った方法でファイルを保存してしまった場合は、そのファイルを再度開いて、小さな変更を加えてから (たとえば、スペースを挿入する)、正しい方法でもう 1 度保存します。変更を加えないと、ファイルは再保存されません。
ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロパティ] を選択します。[ビルド イベント] タブを開きます。
[ビルド前に実行するコマンド ライン] ボックス ([ビルド後] ではありません) に、以下の 2 つの行を入力します。
cd $(ProjectDir) Prebuild.bat
[すべて保存] ボタンをクリックします。
プロジェクトを最初に保存した後に、SiteName.cs (または SiteName.vb) ファイルが Windows 内のプロジェクト ディレクトリに配置されますが、これはソリューション エクスプローラーに配置されません。これをプロジェクトに [既存の項目] として追加します。
プロジェクトを再ビルドするたびに、SPMetal はエンティティ クラスとそのプロパティの宣言を再生成します。生成されたファイルは、毎回、上書きされるため、ファイルに変更を加えないでください。ただし、SPMetal で生成されたクラスには、"partial" のマークが付けられます。したがって、独立し、手動で作成され、SPMetal で上書きされないコード ファイルでクラスにメンバーを追加することができます。
SPMetal の構成
前述の手順は、コード ファイルを生成するために必要な最小限の SPMetal パラメーターのみを使用します。また、生成するコードでモデル化するリストと列を決定するのに SPMetal がその既定の設定を使用することを前提とします。以下の手順は、SPMetal の動作を変更する方法を示しています。
SPMetal パラメーターと既定の設定を調整するには
生成されるクラスの名前空間を指定したり、生成されたクラスから作成されるオブジェクトをシリアル化可能とするかどうかを指定したり、/web スイッチ内の URL をリモート コンピューターとする (つまり、開発コンピューターではない) ことを指定したりするには、/namespace、/serialization、または /useremoteapi オプションを prebuild.bat ファイルの SPMetal コマンド ラインに追加します。これらのオプションの詳細については、「SPMetal」を参照してください。
SPMetal を独自のコンテキストではなく、ユーザー コンテキストで実行するには、/user と /password オプションを prebuild.bat の SPMetal コマンド ラインに追加します。これらのオプションの詳細については、「SPMetal」を参照してください。
生成されるコード ファイルで "cs" または "vb" 以外のファイル名拡張子を使用するには、/language オプションを prebuild.bat の SPMetal コマンド ラインに追加します。このオプションの詳細については、「SPMetal」を参照してください。
SPMetal の最初の実行後、および Web サイトのリスト、コンテンツ タイプ、フィールド (列) に最終変更を加えた後に、生成されたファイルを確認します。以下の状況では、SPMetal の既定の動作によって、ニーズを満たさないコードが作成されたり、読みにくいコードが作成されたりする場合があります。この場合、SPMetal パラメーターの XML ファイルを作成し、/parameters オプションを prebuild.bat の SPMetal コマンド ラインに追加することを検討してください。XPMetal の既定の動作、パラメーター XML ファイル、/parameters オプションについては、それぞれ「既定の SPMetal コード生成の規則」パラメーター XML ファイルを使用して SPMetal 既定をオーバーライドする」、および「SPMetal」を参照してください。
リストを表す 1 つ以上のプロパティに不適切な名前がある。
SPMetal がモデル化する既定のセットとは異なる、リスト、コンテンツ タイプ、および列のセットを含めるまたは除外する必要がある。