He creado una simple C# DLL (que es parte de un proyecto mucho más grande) utilizando VS2005. Necesito usar el DLL en Excel a través del código VBA, así que estoy usando COM Interop en el ensamblado. Estoy tratando de hacer que el proceso de compilación genere automáticamente el archivo TLB necesario para que no necesite ir a la línea de comandos y usar regasm después de cada compilación.advertencia MSB3391: <DLL> no contiene ningún tipo que no se pueda registrar para la Interoperabilidad COM
Mi problema es que, aunque la DLL compila y crea bien, no genera un archivo TLB. En cambio, el error en el título se imprime en el cuadro de salida.
He obtenido otras DLL para compilar archivos TLB yendo a las propiedades del proyecto en VS2005 -> Compilar -> Salida -> Comprobar "Registrarse para interoperabilidad COM". También tengo [assembly: ComVisible (true)] en AssemblyInfo.cs.
Aquí está el resumen de la fuente de la DLL problema y la DLL que hace referencia para un tipo de retorno:
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)
{
...
}
}
}
Aquí es un resumen de SymbolTable.dll. Tiene un tipo de devolución que usa 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*/
}
}
¿Por qué necesita la interoperabilidad COM? No veo ningún COM allí. ¿Desea acceder al conjunto de C# a través de COM más tarde? – codeulike
Sí, necesito usar esta DLL en Excel VBA. –