版本控制:svcmap、disco、xsd、wsdl、svcinfo和数据源文件。

27
我们拥有一个名为Foo的Web服务。
因此,有一个Foo.svc文件和与之相关的代码文件Foo.svc.cs。
我们添加了一个Silverlight项目,并希望使用Foo.svc服务,所以我们添加了一个服务引用并将其命名空间命名为FooBar。
这将创建以下文件:
- Reference.cs - Reference.svcmap - Foo.xsd - Foo.disco - configuration.svcinfo - Foo.wsdl - 还有各种*.datasource文件。
随着时间的推移,我们更新了Foo.svc,并添加了更多的Web服务(方法和接口),因此FooBar目录中的文件数量正在增加。
在该目录下我有26个Foo(nn).xsd文件,其中 nn = 1到26。
我的configuration.svcinfo已经更新到configuration91.svcinfo。
我的问题是:这些文件中是否需要进行版本控制?每次构建\部署时都可以将它们全部删除(只要您更新服务引用)吗?

我不确定,但对我来说只有Reference.cs文件最重要。有时slsvcutil.exe在与VS合作时无法正常工作,因此当我使用它为Silverlight生成引用时,只会生成Reference.cs。 - Shawn Mclean
谢谢!我刚在Silverlight论坛上看到了David的同样问题。当然,那里的回答毫无用处。感谢Stack Overflow! - Daniel Williams
2个回答

36

Reference.svcmap文件实际上是服务引用的定义。它包含不同的设置以及源链接。由于它实际上是项目项中的服务引用,因此Reference.svcmap绝对应该被源代码控制。

Reference.cs包含生成的合同和代理,对其进行编译后得到代码。是否对该文件进行源代码控制取决于您。一般来说,这是项目代码的一部分,应该进行源代码控制,但由于它是自动生成的,有时可能会导致意外的破坏性提交。

所有其他文件都是在生成合同和代理代码时使用的临时文件。它们共同构成了由服务公开的元数据总和,其中包括服务合同(*.wsdl)、数据合同(*.xsd)和配置信息(*.svcinfo)。


让我测试一下我的理解:*.xsd文件存储在本地是临时文件,在Reference.svcmap中的SourceUrl才是模式定义的关键吗? - jmoreno
svcmap 中的 URL 是在生成代理时查询元数据的位置。*.xsd 文件实际上是从服务的元数据终结点返回的。 - Tamir Daniely
我正在查找实际终结点存储的位置,看起来对于服务引用,这在MetaDataSource标记的Address属性中的Reference.svcmap中。对于Web引用,这在proj文件中的WebReferenceUrl标记中。 - jmoreno
实际端点是可配置的,您可以始终使用任何基本地址的客户端,并且这可以在代码和配置中进行覆盖。 svcmap中的url通常指向dev / local服务实例。例如,为了说明一点,您还可以直接从解决方案中的另一个项目生成客户端,在这种情况下,在开发时不需要端点,因为工具可以从源中提取元数据。 - Tamir Daniely

15

这些xsd文件只是你的服务的元数据,只在创建或更新服务引用时使用。实际上,你可以删除它们,因为它们只在引用文件生成时使用。这些文件无需进行版本控制。


9
这些文件中有哪些是必须的?还是所有的内容都包含在ServiceReferences.config文件中?删除所有的.datasource、.disco、.svcinfo甚至references.cs文件是否可以? - Daniel Williams
@DanielWilliams:Reference.cs 实际上是被编译的,理论上你可以手动编辑它来添加或更改行为。它不能被删除,除非你想在每次构建代码时更新服务引用,因为它实际上是完成所有工作的组件。其他所有内容在某种程度上都只是创建它的步骤。 - jmoreno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接