SPMetal 是一类用于生成实体类的命令行工具,这些类可向 Microsoft SharePoint Foundation 内容数据库提供面向对象的界面。虽然这些类主要用于 LINQ to SharePoint 查询,但它们也可用于通过利用并发冲突解决方法来添加、删除和更改列表项。此外,还可将它们作为用于引用内容的常规 SharePoint Foundation 对象模型的替代项使用。
此工具随 SharePoint Foundation 附带并位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\BIN 中。
SPMetal 在 Microsoft Visual Studio 中通常会作为预先生成命令执行,这是因为它生成的代码通常是包含一个新的网站类型(其本身在开发周期中将会演化)的解决方案的一部分。每当执行 SPMetal 时,它都会覆盖自身生成的文件,因此对于给定的输出路径和给定的网站,您不应对这些文件进行更改。它生成的类为 partial,因此您可以通过手动创建的单独的代码文件向这些类添加成员。
如果您的解决方案基于现有网站类型(如 SharePoint Foundation 中包含的工作组网站),并且它只引用此类网站中始终存在的列表和这些列表中始终存在的字段(列),则您可以仅运行一次 SPMetal 并对将不会被覆盖的生成的文件进行更改。
有关使用 SPMetal 的实例的详细信息,请参阅如何:使用 SPMetal。
SPMetal 将使用其他 Windows 命令行工具的基本语法:
SPMetal [options]
每个选项的前面都有一个左斜线。大多数选项都需要值,在此情况下,选项名后跟一个冒号,而值紧随冒号之后:
SPMetal /option1 /option2:value /option3:"value with a space"
选项可以按任意顺序排列。虽然并不是每个选项都是必需的,但如果包含一个采用值的选项,则必须为该选项指定一个值。如果值包含空格,则必须用引号 (") 将整个值引起来。
若单独使用“/?”选项,则将向标准输出显示有关该工具的一些简略帮助。
下表列出了各个选项及其用途。
选项
值定义
示例
备注
web
实体类已对其数据进行建模的网站的完整的绝对 URL。
/web:http://ContosoServer/Marketing
必选项。可以在服务器名称中包含端口号;例如,/web:http://ContosoServer:5555/Marketing。
不要在 URL 中包含主页或任何其他页。
code
输出文件的相对或绝对路径和文件名。
/code:MarketingSite.cs
如果未使用此选项,则生成的代码将传输到标准输出。
如果未指定文件扩展名或文件扩展名不为“cs”或“vb”,则必须使用 language 选项。
此外,还可将文件名(不包括文件扩展名)用作从 DataContext 派生的类的名称的开头;在此示例中,派生的类名为 MarketingSiteDataContext。由于派生的类表示的是整个网站的列表和数据,因此请选择一个能够表达此含义的文件名。(可以使用 SPMetal 参数 XML 文件重写这一命名行为。)
language
生成的代码的编程语言。
/language:csharp
可能的值仅为“csharp”和“vb”。
如果 code 选项的值采用“cs”或“vb”作为文件扩展名,则 SPMetal 可以推断语言,而无需使用 language 选项。
namespace
包含实体类声明的命名空间。
/namespace:Contoso.TeamActivityReports
如果未使用此选项,则生成的代码将不会指定任何命名空间,并且编译的程序集会将 Visual Studio 项目的属性中指定的默认命名空间视为生成的类的命名空间。
useremoteapi
没有值。
/useremoteapi
此选项指示,web 参数的值指向的服务器不是运行 SPMetal 的服务器。在对 SharePoint 进行联机部署时,可以使用此参数对要将解决方案作为沙盒解决方案上载到的网站生成代码。
user
在其上下文中执行 SPMetal 的用户。
/user:Contoso\bob
如果您不希望在自己的上下文中运行 SPMetal,请使用此选项。指定域。
password
user 选项中指定的用户的密码。
/password:$5U+ryz
与 user 选项结合使用。
serialization
指定用于实例化生成的类的对象是否是可序列化的。
/serialization:unidirectional
可能的值仅为“unidirectional”和“none”。如果您希望这些对象是可序列化的,请指定“unidirectional”。SPMetal 会将 System.Runtime.Serialization 命名空间中的属性添加到类和属性声明中,并会添加针对反序列化事件的处理程序。
如果未使用此选项,则假定为“none”。
parameters
标识 XML 文件的路径和名称,该文件包含 SPMetal 默认设置重写。
/parameters:MarketingSite.xml
由于您通常不会对不同的网站重用同一参数 XML 文件,因此请为该文件指定与网站相同的名称。
有关参数文件的详细信息,请参阅 用参数 XML 文件替代 SPMetal 默认值。
生成 C# 代码:
SPMetal /web:http://ContosoServer/Marketing /code:MarketingSite.cs
使用自定义参数设置生成 Visual Basic 代码:
SPMetal /web:http://ContosoServer/Marketing /code:MarketingSite.vb /parameters:MarketingSite.xml
从指定的用户上下文生成 Visual Basic 代码:
SPMetal /web:http://ContosoServer/Marketing /code:MarketingSite.vb /user:Contoso\sally /password:7Yj38d