svcutil 排除/重用引用的程序集

Stí*_*ndr 5 .net wcf svcutil.exe

是否可以使用 svcutil 来重用/排除引用类型,就像 Visual Studio 一样。

我有多个项目,我的类型/数据模型存储在单独的程序集中,因此它们可以被其他非 wcf 项目等使用。在 Visual Studio gui 中更新引用时,这一切都很好。只要在边界的两侧都找到了一个类型,它就会被排除在代理中定义的 beeing 之外。

如何使用 svcutil 实现相同的功能?

更清楚的是,我想从 dll 生成代理,而不是包含 servicecontract 的正在运行的服务。同时,我想提供包含共享类型的 dll 文件,这些文件应该从代理中定义的 beeing 中排除。

这一切的原因是允许我的项目在构建服务器上更新和构建。

编辑:首先感谢您的回复和参数建议。但是,我没有按照您的指示让 svcutil 重用程序集。

这是我制作的 .bat 文件的一部分,我排除了用于生成 INotifyPropertyChanged 等的所有标志。

SET BACKENDROOT=C:\SomePath\Development\Backend\bin
SET DATAMODELSBASE=C:\SomePath\Development\DataModels\bin
SET COMMONBASE=C:\SomePath\Development\Common\bin

SET REFRENCED_ASSEMBLIES=/r:%DATAMODELSBASE%\Jall.DataModels.Consignment.dll

svcutil %BACKENDROOT%\Jall.Backend.Consignment.DLL /t:metadata
svcutil /o:test.cs %REFRENCED_ASSEMBLIES% *.wsdl *.xsd
Run Code Online (Sandbox Code Playgroud)

结果如下:

[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
   [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/KSD.DataModels.Consignment")]
public partial class ExtInvoice : OrmBase
{

private System.DateTime buyersOrderDateField;

private bool buyersOrderDateFieldSpecified;

private string buyersOrderNumberField;

private string compCodeField;
.....
Run Code Online (Sandbox Code Playgroud)

在客户端它自己:

public Address CreateNewAddress(int TK, string AddressType)
Run Code Online (Sandbox Code Playgroud)

这是不正确的数据模型是直接在代理中生成的。客户端不只是跳过它们并为类型使用正确的命名空间。正确的结果应该是:

public Jall.DataModels.Consignment.Address CreateNewAddress(int TK, string AddressType)
Run Code Online (Sandbox Code Playgroud)

(名字被打乱了:))

布格兹,斯蒂安

Stí*_*ndr 3

感谢您的帮助。最终使用以下命令使其工作:

SET BACKENDROOT=C:\SomePath\Development\Backend\bin
SET DATAMODELSBASE=C:\SomePath\Development\DataModels\bin
SET OUTFOLDER=C:\SomeOutputFolder
SET REFRENCED_ASSEMBLIES=/r:%DATAMODELSBASE%\Jall.DataModels.Consignment.dll
SET REFRENCED_ASSEMBLIES=%REFRENCED_ASSEMBLIES% /r:%DATAMODELSBASE%\Jall.DataModels.SomethingElse.dll

SET SVCFLAGS=/enableDataBinding /s /a /tcv:Version35

::Generate metadata
svcutil %BACKENDROOT%\Jall.Backend.Consignment.DLL /t:metadata -d:%OUTPUTFOLDER%

::Generate proxy with shared types
svcutil %OUTPUTFOLDER%\*.wsdl %OUTPUTFOLDER%\*.xsd %SVCFLAGS% /ser:DataContractSerializer %REFERENCED_ASSEMBLIES /o:test.cs
Run Code Online (Sandbox Code Playgroud)

请注意,必须使用 /ser:DataContractSerializer 才能使其工作。另一个烦恼是,如果使用诸如数据表/数据集等类型(并不是他们真的应该这样做),则必须包含它们的程序集,否则 svcutil 将搞乱生成元数据。

IE:

SET SHAREDASSEMBLIES=%SHAREDASSEMBLIES% /r:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
Run Code Online (Sandbox Code Playgroud)