2012-07-17 102 views
5

我写这将是我们公司内部广泛使用的WCF服务,我想生成WCF客户端代理作为构建过程的一部分,并在它们打包一个组件,以便服务的客户不必多次重复这个过程。有没有人知道要做到这一点?是否有任何预先存在的MSBuild生成任务?生成WCF代理作为构建过程的一部分

回答

3

这里就是我清盘做:

1)创建一个具有我想生成客户端代码的服务项目

2)创建一个MSBuild任务执行以下操作:

a) Takes the compiled WCF Service assembly, runs svcutil.exe on it to extract XSD and WSDL metadata for all the services in the Service assembly. 

b) Runs svcutil.exe again, this time on the extracted XSD and WSDL files to generate a .cs file containing the client 

c) Run csc.exe to compile the generated client code into a separate assembly. 

3)将MSBuild任务进入 'AfterBuild' 靶包含该服务的项目。

现在,每当我建立了服务时间,我得到的是包含在我们公司的多个其他项目可以参考客户端代码自动生成的装配,而不必重新/生成多个项目在同一Web引用。他们只需引用一个程序集,就可以更轻松地进行更新,只需更新项目文件中的一行而不是Web引用生成器生成的多个文件。如果有人感兴趣,我可以向他们发送MSBuild任务的代码和使用它的XML代码片段。

+0

你能发布您的代码为这个解决方案?它正是我一直在考虑的事情。像下面的帖子,我一直在使用批处理文件,并希望停止。 – Jonathan 2015-06-12 00:16:20

+0

@aloncatz在MSBuild中执行必要的命令大致有正确的想法。在我的解决方案之后,我进一步将其完成了几步,将程序集编译为nuget包,然后将该nuget包发布到我公司的内部nuget服务器 – 2016-03-02 22:22:15

0

我不知道任何内置的任务,这是我要做的事:

创建一个项目,通过生成SvcUtil工具的代理类,并将其添加到项目中。 创建一个MSBuild脚本(1)调用svcutil并覆盖上面的类并(2)构建项目。

那会不会达到你想要什么?

-1

T4模板和项目,如T4Toolbox

-1

为什么就不能创建一个单独的类库项目。在该项目中,为每个需要的服务使用“添加服务参考”。然后

其他代码可以直接使用的类的类库。

+1

因为这是非常手动的,我必须保持作为一个项目。通过这种方式,我可以自动生成客户端程序集,我从不需要维护任何东西,人们也永远不必去查找项目并自行编译它们,它们只是已经有了程序集,随时可以使用。 – 2012-08-01 14:40:33

+0

它是什么方式手动,除了最初创建引用?您只需在服务更改时更新它们。然后,只需处理该项目的输出,就与处理其他库代码的方式完全相同。 – 2012-08-02 17:20:56

0

你创建的MSBuild方法是正好我想实现的(当前使用批处理文件)。请张贴/发送MSBuild任务和XML片段!

3

我试图解决同样的问题。以下是最终做的事情。 在.csproj的AfterBuild目标下,添加一个任务以获取SDK路径,并使用Exec命令运行svcutil.exe。我不得不使用&“因为路径包含空格。

<Target Name="AfterBuild"> 
    <GetFrameworkSdkPath> 
     <Output TaskParameter="Path" PropertyName="SdkPath"/> 
    </GetFrameworkSdkPath> 
    <Exec Command="&quot;$(SdkPath)bin\NETFX 4.5.1 Tools\svcutil.exe&quot; $(TargetPath)"/> 
</Target> 
相关问题