【问题标题】:Interop type 'ProjectKinds' cannot be embedded. Use the applicable interface instead无法嵌入互操作类型“ProjectKinds”。改用适用的接口
【发布时间】:2018-12-07 17:54:27
【问题描述】:

我正在开发一个 Visual Studio 扩展,但很遗憾我无法检查项目类型,请查看以下代码:

 if (project.Kind == EnvDTE80.ProjectKinds.vsProjectKindSolutionFolder)
            {
                list.AddRange(GetSolutionFolderProjects(project));
            }
            else
            {
                list.Add(project);
            }

【问题讨论】:

  • 消息准确,该类没有“适用接口”。没什么大不了的,在项目的 References 节点中选择 EnvDTE80 引用并将其“Embed Interop Types”设置为 False。您不必部署它,您的代码可以在其上运行的任何机器在 GAC 中都有此程序集。
  • False
  • 我的引用已经设置为 false...
  • @Will 我认为您的第一次反对票不公平。问题包括问题的代码(授予带有异常的图像也包含代码)

标签: c# visual-studio-2017 envdte visual-studio-templates


【解决方案1】:

网上找到的常见建议是将“嵌入互操作类型”设置为 false,以便 EnvDTE80 引用为 false。然而,这对我不起作用。我不确定这对于 VS 2017 是否是新的。

我发现这个 MSDN 页面对我有帮助:https://blogs.msdn.microsoft.com/mshneer/2009/12/07/vs-2010-compiler-error-interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead/

基本上,

  1. 找到ProjectKinds的定义(你可以按右 单击并选择“转到定义”)
  2. 在您的项目中使用不同的名称(即EnvDteProjectKinds)复制ProjectKinds
  3. 在您的项目中使用EnvDteProjectKinds,而您将使用ProjectKinds

【讨论】:

    【解决方案2】:

    Visual Studio 2017 版本 15.8 使使用 PackageReference 语法在 Visual Studio 可扩展性 (VSIX) 项目中引用 NuGet 包成为可能。这使得推理 NuGet 包变得更加简单,并为拥有一个包含整个 VSSDK 的完整元包打开了大门。

    安装在 NuGet 包下面将解决 EmbedInteropTypes 问题。

    安装包 Microsoft.VisualStudio.SDK.EmbedInteropTypes

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2019-02-02
      • 2011-01-29
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2011-05-12
      • 2012-02-27
      • 2022-06-17
      相关资源
      最近更新 更多