如何在 VS2008中消除“目标程序集不包含任何服务类型”错误消息?

我有一个 Client/Server wcf 应用程序

我的可执行文件没有定义任何 ServiceContract,它甚至没有对 System.ServiceModel(而是具有对包含到服务器的连接逻辑的程序集的引用)的引用

我有另一个程序集,它是由我的 EXE 引用的,它包含一个 ServiceContract

以前很好用的。昨天,我用我的项目设置(部分信任、完全信任、部署设置等)做了很多工作,现在,每次我启动我的客户端,我都会得到以下消息框:

服务主机
目标程序集不包含任何服务类型。
您可能需要调整此程序集的代码访问安全策略。

然后 VS 冻结1分钟,最终让我像往常一样调试我的程序。

我已经找到了 关于这个问题的帖子,但解决方案不适用于我的情况。 有什么想法吗?

41727 次浏览

总是这样。你搜索了2个小时,最终在 SO 上发帖,5分钟后,你找到了答案。

在定义 ServiceContract的项目属性的 周转基金选择选项卡中, 有一个标签为“启动 WCF 服务主机时调试同一解决方案中的另一个项目”的复选框,我没有选中。

我不知道它一开始是怎么被检查的。

无论如何,这解决了我的问题。看到这个项目设置的 MSDN 参考资料

要确定具有此问题的项目,请在项目文件中查找字符串3D9AD99F-2412-4246-B90B-4EAA41C64699。

例子: <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

然后关闭项目选项 “ WCF 选项/在同一解决方案中调试另一个项目时启动 WCF 服务主机”

我也经历了同样的问题,并且花了几个小时来寻找,以消除这个特殊的错误。最后我终于找到了解决的办法。

当你遇到这个特殊的问题,你 尝试以 < em > Administrator 运行服务器和客户端应用程序,并改变项目的 WPF 属性

当您单击项目的 WPF 属性时,您将找到一个生成选项。在构建选项中,有一个名为 平台目标的选项,您可以在其中将平台目标更改为 X86。还要注意,在 X84的情况下,需要将其设置为 X84

现在转到 从控制台运行项目,也就是转到保存项目的文件夹,然后转到 在客户端的文件夹中,你会找到一个文件夹 < em > debug ,你可以在那里找到你的控制台应用。您现在应该能够成功地运行应用程序了。

有些博客说,这可能是因为从不同的分支复制了项目,覆盖了 GUID... ... 所以只需要像 这个博客。中解释的那样删除它们

为了防止其他人寻找答案,这个错误的另一个原因可能是如果您碰巧在一个项目中有一个 App.config文件,这个项目是一个具有 <system.serviceModel>节的类库。

我将服务代码从一个项目中移出,这个项目是一个可执行文件,移到了另一个项目中,但是不小心留下了旧的 App.config文件。我的新项目是一个通过编程配置的控制台应用,它启动了 WCF,但是因为旧的 App.config文件在引用的程序集中,所以即使在调试控制台应用时,我也会看到那个神秘的对话框。

我花了12个小时才找到这个程序,因为我没有意识到 VS 调试器会检查所有为 App.config 配置了 WCF 服务的引用程序集。

配置文件中的服务名称错误也可能导致此错误:

<system.serviceModel>
<services>
<service name="MyServiceLibrary.WrongServiceName">
...

检查配置文件并确保服务名称正确。

旧线程。只需删除任何命令行参数从调试部分的选项。这对我很有帮助。

添加另一个解决方案,因为此消息似乎有多个原因。从项目文件中的 ProjectTypeGuids 标记中删除以下 GUID 解决了这个问题。

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699}</ProjectTypeGuids>

在我的例子中,问题是,因为一个普通的类库项目(由 WCF 服务库引用)在它的。Csproj 文件:

<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
<WcfProjectProperties>
<AutoStart>True</AutoStart>
</WcfProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>

将其改为 False 解决了这个问题。 这个答案已经存在,但是请确保您检查了所有的项目,而不仅仅是 WCF 服务库项目。