警告 MSB3391: 不包含任何可以为 COM 互操作取消注册的类型

2023-11-23

我使用 VS2005 制作了一个简单的 C# DLL(这是一个更大项目的一部分)。我需要通过 VBA 代码在 Excel 中使用 DLL,因此我在程序集上使用 COM Interop。我是试图让构建过程自动生成必要的TLB文件这样我就不需要在每次构建后进入命令行并使用 regasm 。

我的问题是,尽管 DLL 可以正常编译和构建,但它不会生成 TLB 文件。相反,标题中的错误会在输出框中打印出来。

我通过转到 VS2005 中的项目属性 -> 构建 -> 输出 -> 检查来获取其他 DLL 来构建 TLB 文件“注册 COM 互操作”。我还有AssemblyInfo.cs 中的 [程序集:ComVisible(true)].

以下是问题 DLL 的源代码及其为返回类型引用的 DLL 的摘要:

using System;
using System.IO;
using System.Runtime.InteropServices;
using SymbolTable;

namespace ProblemLibrary
{
    public class Foo
    {    
        public Foo(string filename)
        {
            ...
        }

        // method to read a text file into a SymbolTable
        public SymbolTable BuildDataSet(string[] selected)
        {
            ...
        }
    }
}

以下是 SymbolTable.dll 的摘要。它包含 ProblemLibrary 使用的返回类型。

using System;
using System.Collections.Generic;

namespace SymbolTable
{
    public class SymbolTable
    {
        readonly Dictionary<SymbolInfoStub, string> _symbols = new Dictionary<SymbolInfoStub, string>();

       /*methods that interact with Dictionary snipped*/
    }
}

  1. 你需要有没有任何参数的ctor。
  2. 你应该有引导属性 and ProgId属性围绕班级。
  3. 最好将程序集标记为 ComVisible(false) 并显式标记需要导出的类。
  4. 为您的类使用接口。
  5. 确保您在程序集级别具有 GuidAttribute。

    [Guid("<PUT-GUID-HERE-1>")]
    [ComVisible(true)]
    interface IFoo
    {
        void DoFoo();
    }
    
    [Guid("<PUT-GUID-HERE-2>")]
    [ComVisible(true)]
    [ProgId("ProgId.Foo")]
    class Foo : IFoo
    {
        public void DoFoo()
        {
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

警告 MSB3391: 不包含任何可以为 COM 互操作取消注册的类型 的相关文章

随机推荐

  • C# 中 JSON 字符串到 CSV 以及 CSV 到 JSON 的转换

    我正在我的 asp net Web API 项目中使用 JSON CSV 文件并尝试使用CSV助手 and ServiceStack Text库但无法使其工作 包含数组的 JSON 文件是动态的 并且可以具有任意数量的字段 我使用 Stre
  • C++ 从数组定义行为中间的指针进行负索引?

    include
  • Spark-NLP 预训练管道只能在 Linux 系统上运行吗?

    我正在尝试设置一个简单的代码 在其中传递数据帧并使用 johnSnowLabs Spark NLP 库提供的预训练解释管道对其进行测试 我正在使用 anaconda 的 jupyter 笔记本 并使用 apache toree 设置 Spa
  • 在linux中定期读取性能计数器

    有没有办法在Linux中定期读取性能计数器 就像是perf stat我正在寻找能够对每个 X 周期进行采样的能力 基本上我希望能够读取某些程序的每 X 个 CPU 周期的指令计数器 执行的指令数 好消息 在下一个内核 Linux 3 9 中
  • 无法在管道中构建 .Net 5

    两周前我使用 Net 5 RC2 创建了一个新的解决方案 我已将其升级到新版本 5 0 0 我正在尝试创建一个标准的 ASP Net 管道来构建它 代理池是 Azure Pipelines 代理规范我已经尝试过 windows 2019 和
  • Javascript:函数.原型.方法

    我想大多数人都看过下面的代码片段 Function prototype method function name func this prototype name func return this 我也知道它会影响所有函数 因为它们都是由
  • 不支持链接到“Gtk.Box.new”

    我是 Vala 的新手 到目前为止我认为它很酷 但我在理解继承方面遇到了困难 我读here我应该使用base 调用父构造函数 好吧 很酷 似乎可以理解 但它对我不起作用 我一直收到标题上的错误 这是我要展示的片段 public class
  • 使用 SciPy 进行逻辑回归

    我正在尝试使用 SciPy 在 Python 中编写逻辑回归代码fmin bfgs功能 但遇到了一些问题 我为逻辑 S形 变换函数和成本函数编写了函数 这些函数工作得很好 我使用了通过固定软件找到的参数向量的优化值来测试这些函数 并且这些函
  • XPath - 如何选择节点的子元素?

    我有一个包含 XHTML 表的 XmlDocument 我想循环遍历它以一次处理一行表格单元格 但下面的代码返回嵌套循环中的所有单元格 而不仅仅是当前行的单元格 XmlNodeList tableRows xdoc SelectNodes
  • .net core 中的 httprequest.UserHostName

    在 HttpRequest 上找不到 UserHostName 属性 任何论坛上都没有任何关于它的信息 这个已经被放弃了吗 任何想法 接受的答案不正确 someHttpContext Request Host对应于HostHTTP 请求中使
  • LINQ to SQL 设计器错误

    每次我在保存后更改设计器中的值时 designer cs 文件都会被删除 谁能告诉我如何解决这个问题 Move using您的指令DataContext cs and DataContext designer cs文件到namespace
  • 如何将 AJAX 检索到的值返回到 JavaScript 中当前函数的父函数?

    我有以下 JavaScript 和 jQuery 代码 function checkEmail email if email length getJSON ajax validate email email function data if
  • Node.js:获取已安装 npm 包的(绝对)根路径

    Task 我正在寻找一种通用方法来获取 Node js 中已安装 npm 包的 绝对 根路径 Problem 我知道关于require resolve 但这会给我入口点 主模块的路径 而不是包的根路径 Take bootstrap sass
  • 获取“td”元素的 jquery 索引

    我有标记 table tr td p class que 1 Who are you p td tr tr class ans td td tr table
  • 将文件(如对象)附加到电子邮件 python 3

    我在网上找到了很多有关如何将本地文件附加到电子邮件的示例 我想做的是将一个类似对象的文件附加到电子邮件中 你为什么问 所以我不必处理清理文件的问题 下面是我的代码和我的错误 经过多次谷歌搜索后 我仍然没有设法让它工作 任何帮助将不胜感激 d
  • Chrome 扩展:如何处理浏览器的禁用和启用事件

    有没有办法在 Chrome 浏览器禁用 启用扩展程序后运行回调 Chrome 管理 API chrome management onEnabled addListener function ExtensionInfo info chrome
  • 如何在over函数中使用partition by和order by?

    我正在使用 SQL Server 2008 R2 我正在尝试编写一个显示以下内容的查询 select productname unitprice categoryid sum unitprice over partition by cate
  • php.ini 中的 pack()非法十六进制数字警告

    我在 php 中使用 pack 时遇到一些问题 currencypair EUR USD buy sell buy alert device token array a a b message Your currencypair buy s
  • 在 Windows 版 Git 中使用 GIT_SSH_COMMAND

    我现在使用的是适用于 Windows 2 x 的 Git 第四个候选版本 并在 shell 中使用 GIT SSH COMMAND 来避免 SSH 的主机验证 在 Git Bash 中我写了这样的内容 GIT SSH COMMAND ssh
  • 警告 MSB3391: 不包含任何可以为 COM 互操作取消注册的类型

    我使用 VS2005 制作了一个简单的 C DLL 这是一个更大项目的一部分 我需要通过 VBA 代码在 Excel 中使用 DLL 因此我在程序集上使用 COM Interop 我是试图让构建过程自动生成必要的TLB文件这样我就不需要在每