Tôi đã thực hiện một đơn giản C# DLL (đó là một phần của một dự án lớn hơn nhiều) bằng cách sử dụng VS2005. Tôi cần phải sử dụng DLL trong Excel thông qua mã VBA vì vậy tôi đang sử dụng COM Interop trên lắp ráp. Tôi đang cố gắng để làm cho quá trình xây dựng tự động tạo ra các tập tin TLB cần thiết vì vậy mà tôi không cần phải đi đến dòng lệnh và sử dụng regasm sau mỗi xây dựng.cảnh báo MSB3391: <DLL> không chứa bất kỳ loại nào có thể được đăng ký cho COM Interop
Vấn đề của tôi là mặc dù DLL biên dịch và xây dựng tốt, nó không tạo ra tệp TLB. Thay vào đó, lỗi trong tiêu đề in ra trong hộp đầu ra.
Tôi đã nhận các tệp DLL khác để xây dựng tệp TLB bằng cách truy cập thuộc tính của dự án trong VS2005 -> Xây dựng -> Đầu ra -> Kiểm tra "Đăng ký COM interop". Ngoài ra tôi có [assembly: ComVisible (true)] trong AssemblyInfo.cs.
Dưới đây là tóm tắt các nguồn cho các vấn đề DLL và DLL mà nó tham chiếu cho một kiểu trả về:
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)
{
...
}
}
}
Dưới đây là một bản tóm tắt của SymbolTable.dll. Nó chứa một kiểu trả về mà ProblemLibrary sử dụng.
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*/
}
}
Tại sao bạn cần COM interop? Tôi không thấy bất kỳ COM ở đó. Bạn có muốn truy cập C# Assembly qua COM sau này không? – codeulike
Có, tôi cần phải sử dụng DLL này trong Excel VBA. –