avertissement MSB3391: <DLL> ne pas contenir tous les types qui peuvent être ou non pour COM Interop

J'ai fait un simple C# DLL (qui fait partie d'un projet plus vaste) à l'aide de VS2005. J'ai besoin d'utiliser la DLL dans Excel via VBA code donc je suis en utilisant COM Interop sur l'assemblée. Je suis d'essayer de rendre le processus de construction de générer automatiquement le nécessaire fichier TLB de sorte que je n'ai pas besoin d'aller à la ligne de commande et l'utilisation regasm après chaque génération.

Mon problème est que, bien que la DLL compile et s'appuie fine, il ne génère pas un fichier TLB. Au lieu de cela, l'erreur dans le titre imprime dans la sortie de la boîte.

J'ai obtenu d'autres Dll afin de construire des fichiers TLB en allant dans les propriétés du projet dans VS2005 -> Build -> Output -> Vérifiez "s'Inscrire pour COM interop". J'ai également [assembly: ComVisible(true)] dans le AssemblyInfo.cs.

Voici le résumé de la source du problème et DLL les DLL qu'il fait référence à un type de retour:

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)
        {
            ...
        }
    }
}

Voici un résumé de SymbolTable.dll. Il est titulaire d'un type de retour que ProblemLibrary utilise.

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*/
    }
}
Pourquoi avez-vous besoin de la COM interop? Je ne vois pas de COM. Voulez-vous accéder à la C# Assemblée via COM plus tard?
Oui, j'ai besoin d'utiliser cette DLL dans Excel VBA.

OriginalL'auteur | 2009-05-12