如何:使用 SPMetal

上次修改时间: 2011年2月2日

适用范围: SharePoint Foundation 2010

本文介绍如何使用 SPMetal 命令行工具为 Microsoft SharePoint Foundation 解决方案生成实体类声明。

设置开发项目以使用 SPMetal

  1. 将 SPMetal.exe 的路径添加到开发计算机上的 Windows %PATH% 环境变量的结尾。它通常是 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN。

    1. 在 Windows Server 计算机的"开始"菜单上,右键单击"计算机",然后单击"属性"。

    2. 在"系统"对话框中,单击"高级系统设置"。

    3. 在"系统属性"对话框中,单击"高级"选项卡,然后单击"环境变量"。

    4. 在"系统变量"列表中,突出显示"Path",然后单击"编辑"。

    5. 在"编辑系统变量"对话框中,在"变量值"的末尾添加分号,然后添加包含 SPMetal.exe 的文件夹的路径。单击"确定"三次。

    备注

    如果执行此步骤时 Microsoft Visual Studio 已打开,则必须将其关闭并重新打开,然后它才能识别新 %PATH% 变量。

  2. 在开发计算机上创建 SharePoint Foundation 网站以充当测试平台,您将针对该平台开发 LINQ to SharePoint 代码。您可以在当前的开发状态下确定该网站,在当前开发状态下可以确定的范围内,它应该与要解决方案包含的最终网站类型具有相同的列表、列和查阅字段。SPMetal 工具将读取此信息。不过,您可以重新运行该工具,因此可以随着项目的进展更改设计。

  3. 打开您的 Visual Studio 项目并在项目中添加一个名为 Prebuild.bat 的文本文件。

  4. 如果 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,请将第二行中的"cs"替换为"vb"。

    • 将"MyServer/MySite"替换为开发计算机上您将对其运行 LINQ to SharePoint 代码的网站的路径。

    • 将所有三个位置的"SiteName"替换为网站的名称。除了作为文件名之外,此字符串还将成为表示网站上的所有列表和数据的类名称的一部分。使用的字符串应该能够传达类表示整个网站;例如,显示在 URL 末尾的"MySite",或者主页上 PlaceHolderPageTitle 内容占位符的值。

    此批处理文件会保存生成的代码的以前版本,以便您在需要调试时可以将其与新版本进行比较。

  5. 保存该文件,但不要 通过以下方式保存该文件:单击工具栏上的"保存"或"保存所有文件"按钮,或者选择"文件"菜单上的"保存"。在 Visual Studio 中,文本文件的默认编码与系统批处理文件不兼容。请改为在"文件"菜单上选择"将 Prebuild.bat 另存为"。在"将文件另存为"对话框中,单击"保存"按钮上的向下箭头。选择"编码保存"。在"高级保存选项"对话框中,选择"编码"下拉列表中的"Unicode (UTF-8 无签名) - 代码页 65001",然后单击"确定"。确保选择 UTF-8 的"无签名"版本。

    提示提示

    如果以错误的方式意外保存了该文件,请重新打开它,稍做更改(例如添加一个空格),然后以正确的方式重新保存。如果不进行更改,则实际上不会重新保存该文件。

  6. 在"解决方案资源管理器"中,右键单击项目名称,然后选择"属性"。将打开"生成事件"选项卡。

  7. 在"预先生成事件命令行"(而非"生成后")框中,输入以下两行。

    cd $(ProjectDir)
    Prebuild.bat
    

    单击"全部保存"。

  8. 首次生成项目后,Windows 的项目目录中将出现 SiteName.cs(或 SiteName.vb)文件,但是在"解决方案资源管理器"中不会出现。将其作为"现有项"添加到项目中。

每次重新生成项目时,SPMetal 都将重新生成实体类及其属性的声明。因为每次都会覆盖生成的文件,所以不应该对其进行任何更改。然而,SPMetal 生成的类标记为"partial",因此您可以在 SPMetal 不会覆盖的手动创建的单独代码文件中向这些类添加更多成员。

配置 SPMetal

前面的过程仅使用生成代码文件所需的最少 SPMetal 参数,并且假定您希望 SPMetal 使用其默认设置确定在生成的代码中应该对哪些列表和列进行建模。下面的过程介绍如何改变 SPMetal 的工作方式。

调整 SPMetal 参数和默认设置

  1. 若要为生成的类指定命名空间,或者指定基于它们创建的对象是否可序列化,或者指定 /web 开关中的 URL 是远程计算机(即不是开发计算机),请在 prebuild.bat 文件中向 SPMetal 命令行添加 /namespace、/serialization 或 /useremoteapi 选项。有关这些选项的详细信息,请参阅 SPMetal

  2. 若要在您自己的用户上下文之外的用户上下文中执行 SPMetal,请在 prebuild.bat 中向 SPMetal 命令行添加 /user 和 /password 选项。有关这些选项的详细信息,请参阅 SPMetal

  3. 若要对生成的代码文件使用除"cs"或"vb"之外的文件扩展名,请在 prebuild.bat 中向 SPMetal 命令行添加 /language 选项。有关此选项的详细信息,请参阅 SPMetal

  4. 首次执行 SPMetal 后检查生成的文件,并在对网站的列表、内容类型和字段(列)进行最终更改后再次检查生成的文件。在下列任一情形下,SPMetal 的默认行为创建的代码可能无法满足您的需要或者会破坏代码可读性。在此类情况下,请考虑创建 SPMetal 参数 XML 文件并在 prebuild.bat 中向 SPMetal 命令行添加 /parameters 选项。有关 XPMetal 的默认行为、参数 XML 文件或者 /parameters 选项的详细信息,请分别参阅 SPMetal 默认代码生成规则用参数 XML 文件替代 SPMetal 默认值SPMetal

    • 表示列表的一个或多个属性具有不适当的名称。

    • 您需要在 SPMetal 建模的默认列表、内容类型和列组中包含或排除一组不同的列表、内容类型和列。

请参阅

引用

SPMetal

概念

用参数 XML 文件替代 SPMetal 默认值

SPMetal 默认代码生成规则