我有一个WCF Web服务项目,比如FooService.vbproj,带有FooService.svc端点。它的实现在一个单独的项目Foo.vbproj中,它有一个实现IFooService服务契约的Foo.vb类和其他文件。 FooService有一个对Foo的项目引用。 FooService本地托管在IIS中。
当我构建FooService时,它会编译Foo项目,然后编译FooService项目,可以正常工作;浏览器中的http://localhost/Foo/FooService.svc为我提供了端点信息页面。但是如果我仅仅构建Foo ,那么我在浏览器中访问http://localhost/Foo/FooService.svc,我得到了一个黄色的死亡屏幕,“找不到方法:'Foo.Bar Foo.IFooService。 GetFizz(System.Guid)'。更多详情如下。
原来它正在将旧版本的Foo.dll复制到FooService的bin文件夹中。它来自哪里?
有关如何排除故障的任何想法?该服务不应该保留“第一个”新的Foo.dll,以便端点仍然可以工作吗?
完整堆栈跟踪:
[MissingMethodException: Method not found: 'Foo.Bar Foo.IFooService.GetFizz(System.
System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase) +0
System.Reflection.Assembly.GetType(String name, Boolean throwOnError) +36
System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +174
MyCo.Infrastructure.MultipleBindingHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +994
System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +11666348
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +42
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +479
答案 0 :(得分:0)
事实证明,通过另一个引用,在Foo中存在对Foo.dll的循环间接引用。但是仍然不确定为什么它会将一个dll复制到一个没有构建的项目中。
重要的是,当您有循环引用时,Visual Studio和/或msbuild会出现意外行为。