如何重用svcutil中的所有程序集类型并指定字典集合类型?

时间:2013-12-06 17:42:11

标签: c# visual-studio-2012 svcutil.exe service-reference

我正在尝试通过命令行生成我的解决方案的服务引用,所以我一直在尝试使用svcutil。我有两个问题。

  1. 在Visual Studio 2012中,我可以指定System.Array的集合类型和System.Collections.Generic.Dictionary的字典集合类型。在svcutil中,只有collectionType的选项,如何指定两种集合类型?

  2. 在Visual Studio 2012中,我可以选择在引用的程序集中重用类型。然后,我可以选择在所有引用的程序集中重用类型。有没有办法指示svcutil从解决方案中重用所有类型,甚至是一种方法让我列出从中重用类型的多个程序集?

  3. 额外细节:我的项目是一个银色项目。我有很多组件,我不确定哪些类型可以重复使用以及在哪里使用。字典类型转换为Dictionary,所有其他集合类型转换为System.Array。

    以下是我目前尝试使用命令行而不是Visual Studio 2012重现我的Reference.cs文件:

    SvcUtil.exe /target:code "myMexServiceAddress" /language:cs /out:Reference.cs /noConfig /async /collectionType:System.Array /serializable /serializer:Auto /enableDataBinding /namespace:*,myNamespace
    

    编辑:我目前通过Visual Studio 2012成功生成我的服务引用,但我需要能够通过命令行生成它们。这是我没有这样做的地方。

    UPDATE1:所以我解决了问题2.你只需要将/r :assembly.dll / r :assembly2.dll / r :assembly3.dll添加到svcutil,让它重用类型那些集会。必须手动将路径添加到所需的所有程序集有点烦人,但是没有办法让它自动使用项目引用中的所有类型,就像在Visual Studio中一样。

    UPDATE2:要在代码中生成Silverlight 5服务引用和可移植库服务引用,您需要使用SLSvcUtil.exe而不是SvcUtil.exe:

    SLSvcUtil.exe "myMexServiceAddress" /out:Reference.cs /language:cs /enableDataBinding /namespace:*,myNamespace /serializer:Auto /config:ServiceReference.config
    

    我仍然不知道如何指定两种类型的集合,一种用于字典,另一种用于其他集合类型。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

1)Commandline仅支持生成一种类型的集合,但您可以通过Visual Studio Add Servcie Refenerence对话框配置您的Web服务。它的高级面板支持选择CollectionType和DictionaryType。

2)当您在Visual Studio中选择此选项时,它会查看您正在添加服务引用的项目已引用的所有程序集。如果在运行“添加服务引用”向导之前添加这些引用,Visual Studio应该选择它们。

如果所有其他方法都失败,您可以手动编辑Visual Studio生成的.svcmap文件。在这里,您可以添加您想要(重新)使用的其他集合类型,这些可以是自定义集合类型,您也可以通过此文件添加其他集合类型。