如何摆脱 VS2008 中的“目标程序集不包含服务类型”错误消息?

Posted

技术标签:

【中文标题】如何摆脱 VS2008 中的“目标程序集不包含服务类型”错误消息?【英文标题】:How can I get rid of the "The target assembly contains no service types" error message in VS2008? 【发布时间】:2010-10-08 13:12:47 【问题描述】:

我有一个客户端/服务器 wcf 应用程序

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

我的 EXE 引用了另一个程序集,其中包含 ServiceContract

它曾经工作得很好。昨天,我在我的项目设置(部分信任、完全信任、部署设置等)上玩了很多,现在,每次我启动我的客户端时,我都有以下消息框:

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

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

我找到了a post on this problem,但该解决方案不适用于我的情况。 有任何想法吗?

【问题讨论】:

【参考方案1】:

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

在定义ServiceContract的项目属性的WCF Options选项卡中, 我未选中标记为“在同一解决方案中调试另一个项目时启动 WCF 服务主机”的复选框。

我不知道一开始是如何检查的。

无论如何,这解决了我的问题。有关此项目设置,请参阅 MSDN Reference。

【讨论】:

这在 Visual Studio 2010 中的什么位置? @Jonathan:我敢打赌,您没有查看正确项目的属性。您需要选择定义合约的项目;不是实现它的人,也不是调用它的人。 谢谢 Brann,你说得对。 2010年在同一个地方 我看到了同样的问题,并且定义合同的项目没有 WCF 选项选项卡。真是气死人了…… 这解决了我的问题。我认为这是因为我在实现它的不同项目中定义了该服务。【参考方案2】:

以防万一其他人正在寻找答案,导致此错误的另一个原因可能是您碰巧在项目中有一个 App.config 文件,该文件是一个具有 <system.serviceModel> 部分的类库。

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

虽然此解决方案可能会为某些人解决问题,但至少在 vs2015 中,它会在右键单击 WCF 项目时从上下文菜单中删除“发布”... 是的,这将帮助我们找到哪个项目我们错误地检查了“当...时启动 WCF 服务主机”,正如@Brann 指出的那样。我正在使用以下命令查找具有该设置的项目: c:\MyProjects>findstr /s /m "3D9AD99F-2412-4246-B90B-4EAA41C64699" *.csproj【参考方案4】:

有些博客说,这可能是因为从不同的分支复制项目,覆盖了 GUID...所以只需按照this blog. 中的说明删除它们

【讨论】:

从 VS2015 移除 de Guid,项目无效【参考方案5】:

此错误也可能是由于您的配置文件中的服务名称错误:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

我也遇到了同样的问题,并搜索了几个小时以摆脱这个特定的错误。最后我确实找到了摆脱它的方法。

当您遇到此特定问题时,您尝试以管理员的身份运行您的服务器和客户端应用程序,并更改WPF属性的项目。

当您单击项目的 WPF 属性时,您会发现一个构建选项。在构建选项中,有一个名为 PLATFORM TARGET 的选项,您可以在其中将平台目标更改为 x86。另请注意,对于 x84,您需要将其设置为 x84

现在从控制台运行您的项目,即转到保存项目的文件夹,在客户端的bin中,您将找到一个文件夹debug您将在哪里获得控制台应用程序。您现在应该可以成功运行应用程序了。

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

在我的情况下,问题是,因为一个普通的类库项目(由 WCF 服务库引用)在它的 .csproj 文件中有这个:

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

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

【讨论】:

以上是关于如何摆脱 VS2008 中的“目标程序集不包含服务类型”错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 VS2008 中的 C++ MFC 对话框中的日期/时间小部件中提取数据

如何摆脱 Visual Studio 2019 中的密码提示?

s-s-rS 2008 R2 如何在打开报告时摆脱对话框

如何向我的程序添加描述(-> 任务管理器中的描述列)(VS 2008,C++)

如何将C#项目从VS2008迁移到VS2017

vs2008如何恢复默认设置