Assembly.GetTypes()在动态加载程序集时返回null

时间:2017-06-18 06:31:58

标签: c# wcf dynamic-programming

我试图在运行时生成wcf服务的代理类。 我通过附加“?wsdl”访问SVC网址。 使用ServiceDiscription导入器类生成代理。

我能够生成代理但无法访问程序集中的类型。

这是我的代码:

if(_proxyAssembly != null)
{ 
     foreach (Type t in _proxyAssembly.GetTypes())
     {
       //Some coding
     }
}

GetTypes()应返回proxyAssembly类中的所有类型,但它返回null。

1 个答案:

答案 0 :(得分:0)

你甚至不应该尝试在这里创建自己的代理生成器魔法,而是使用内置的ChannelFactory来实现你想要的。

http://www.c-sharpcorner.com/UploadFile/ff2f08/channel-factory-in-wcf/ http://www.dotnettricks.com/learn/wcf/difference-between-wcf-proxy-and-channel-factory

此外,您需要将客户端需要访问的所有类型和接口移动到一个单独的程序集中,然后通过标准引用在客户端和服务器之间共享。因此,再次,您不需要处理反射来访问这些类型。

修改

根据您在下面的评论,我建议您使用Process.Start在运行时调用SvcUtil,让它生成代理类,compile将其添加到程序集中{{3}它在运行时。这样您就可以通过反射正确访问所有类型,就像您在示例中所做的那样。