Вместо этого размышляй .NET-to-.NET сценарий

#c# #.net #dcom

Вопрос:

Я создал Человека.dll и зарегистрируйте его(regsvcs.exe) в командной строке Promt для Visual Studio 2019. В результате регистрации я получил Person.tlb. Я попытался добавить Person.tlb в консольный проект в качестве справочного COM-компонента, но получил предупреждение MSB3290.

предупреждение MSB3290: Не удалось создать сборку оболочки для библиотеки типов «{8b1098cb-d453-4dc7-96ac-52df54d0a2ce}». Библиотека типов «Person» была экспортирована из сборки CLR и не может быть повторно импортирована как сборка CLR.

Как я могу добавить Person.tlb в консольный проект с помощью отражения?

Person.dll:

 using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.InteropServices;
using System.EnterpriseServices;

namespace COM
{
    [ClassInterface(ClassInterfaceType.None)]
    public class Person : ServicedComponent, COM.IPerson
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public bool IsMale { get; set; }
        public void Persist(string FilePath)
        {
            StreamWriter oFile = new StreamWriter(FilePath);
            XmlSerializer oXmlSerializer = new XmlSerializer(typeof(Person));
            oXmlSerializer.Serialize(oFile, this);
            oFile.Flush();
            oFile.Close();
        }
        static public Person Retrieve(string FilePath)
        {
            StreamReader oFile = new StreamReader(FilePath);
            XmlSerializer oXmlSerilizer = new XmlSerializer(typeof(Person));
            Person oPerson = oXmlSerilizer.Deserialize(oFile) as Person;
            return oPerson;

        }
    }
}
 

Консольный проект:

 using System;

namespace Test10
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            COM.Person per = new COM.Person();
            per.FirstName = "Maxim";
            per.LastName = "Donax";
            per.Persist(@" C:myFile.xml ");
        }
    }
}
 

Комментарии:

1. Это обычно происходит, когда вы пытаетесь обернуть библиотеку типов, созданную из сборки, скомпилированной с другой версией среды CLR , используемой вами (например. .NETFX 2.0 против .NETFX 4.0 против .NET Core).

Ответ №1:

Я использовал другой способ: создал Человека.dll в Visual Studio и зарегистрируйте ее(regsvcs.exe). После использования reference Person.tlb в Visual Basic 6.0.