6

我正在编写一个将在我们公司内广泛使用的 WCF 服务,我想生成 WCF 客户端代理作为构建过程的一部分并将它们打包到一个程序集中,这样服务的客户端就没有多次重复这个过程。有没有人知道可以做到这一点的方法?MSBuild 是否有任何预先存在的构建任务?

4

5 回答 5

4

我试图解决同样的问题。这就是最终要做的事情。在 .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>
于 2015-08-07T12:59:26.947 回答
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 片段发送给他们。

于 2012-07-25T15:27:12.817 回答
0

我不知道任何内置任务,这就是我的做法:

创建一个项目,通过svcutil生成代理类并添加到项目中。创建一个 MSBuild 脚本,该脚本 (1) 调用 svcutil 并覆盖上述类并 (2) 构建项目。

那不会达到你想要的吗?

于 2012-07-18T08:09:50.980 回答
-1

看看T4模板,以及 T4Toolbox 等项目

于 2012-07-18T08:22:28.980 回答
-1

为什么不简单地创建一个单独的类库项目。在该项目中,为您需要的每个服务使用“添加服务引用”。

然后其他代码可以简单地使用类库中的类。

于 2012-07-25T15:51:19.080 回答