我正在尝试将 IntelliSense 和 SandCastle 兼容文档添加到通过 svcutil 生成的 WCF 代理类中。有没有办法在不直接编辑生成的代码的情况下做到这一点(因为如果重新生成它会丢失)?
5 回答
在 WCFExtras 项目中,您可以找到您正在寻找的功能;一个 WSDL 导出器和导入器,它获取 XML 代码文档并将其嵌入 WSDL + 将其拉出并再次将其作为 XML 文档添加到生成的客户端代理上。
WCFExtras 可以在这里找到:http ://wcfextras.codeplex.com/(或作为 Nuget 包)。
--larsw
我认为您可以覆盖使用模板生成这些类的方式。这是一篇文章的链接。他们专注于silverlight,但我认为代码上下文仍然适用。
一个有限的解决方案可能是只创建文档的部分类来镜像 SvcUtil 生成的类。由于 SvcUtil 类是作为分部类创建的,因此您可以利用它来记录类,但这可能不适用于方法或属性。IntelliSense 将显示注释。我相信 SandCastle 也会合并评论但还没有尝试过。如果你想走这条路,让这些类与服务更改保持同步可能会很痛苦。
下面是文档类的样子:
/// <summary>
/// This is a comment
/// </summary>
public partial class YourSvcUtilGenerateClientClass { }
就个人而言,我从不使用生成的 WCF 代理类。滚动自己的代理类太容易了。这就是它所需要的(当您在代理类上添加 ServiceContract 接口时,Visual Studio 可以为您添加方法):
using System.ServiceModel;
namespace My.Namespace
{
public class MyServiceContractProxy : ClientBase<IMyServiceContract>, IMyServiceContract
{
public MyServiceContractProxy() { }
public MyServiceContractProxy(string endpointName) : base(endpointName) { }
#region IMyServiceContract Members
public int AddValues(int val1, int val2)
{
return Channel.AddValues(val1, val2);
}
#endregion
}
}
如果您的 ServiceContract 发生更改,它将引发编译错误,因为您的代理将不再与接口匹配,但通常不会超过 10 秒对您的代理类进行编辑。
由于 XML 注释路由无法满足您的需求,因此Document! X 2011产品将是一个选择。它不是免费的,但它会做你需要的。