C # combinando projetos .NET Core e .NET Framework em uma solução [duplicado]

Sep 19 2020

Não consegui fazer a biblioteca Microsoft.Office.Interop.Outlook funcionar da maneira que preciso no .NET Core, mas funciona bem no .NET Framework. Como resultado, desejo construir meu aplicativo principal como um projeto .NET Core e apenas chamar a parte .NET Framework conforme necessário (de outro projeto na mesma solução).

Então, eu tenho meu projeto .Net Framework, vamos chamá-lo de TESTOutlookInterop. Ele tem uma classe parecida com esta:

using Microsoft.Office.Interop.Outlook;

namespace TESTOutlookInterop
{
    public class OutlookInterop
    {
        public string GetSelectedMessage()
        {
            Application outlook = new Application();
            OlSelectionLocation select = outlook.ActiveExplorer().Selection.Location;
            string selection = outlook.ActiveExplorer().Selection[1].EntryID;
            return selection;
        }
    }
}

Se eu definir o menu suspenso no topo e definir como TESTOutlookInterop e clicar em 'Iniciar', isso funcionará bem (quando chamo GetSelectedMessage () do método Main de TESTOutlookInterop, ele retorna a string que estou procurando, em outras palavras). Para algum contexto, isso basicamente olha para o processo atual do Outlook e retorna o ID de qualquer mensagem que esteja destacada no momento.

Agora eu tenho um segundo projeto nesta solução chamado TESTcore. Tento chamar o método GetSelectedMessage () assim:

using TESTOutlookInterop;
namespace TESTCore
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            OutlookInterop outlookinterop = new OutlookInterop();           
            ResultLabel.Content = outlookinterop.GetSelectedMessage();
        }
    }
}

Se eu definir o menu suspenso no VS para executar 'TESTcore' e executar o aplicativo Core, o método 'GetSelectedMessage ()' será chamado e se comportará da mesma forma que quando tento executá-lo no .NET Core (não funciona , aparentemente porque a biblioteca de interoperabilidade não é compatível com o Core). Então, como eu chamo esse método de interoperabilidade no projeto .NET Framework do projeto Core corretamente?

Respostas

JackJJun-MSFT Sep 21 2020 at 14:04

Você pode tentar o código a seguir para usar a interoperabilidade do Outlook no aplicativo principal .net.

Primeiro, crie um aplicativo principal .net (usei o aplicativo de console).

Segundo, clique com o botão direito do mouse em Dependências-> escolha Adicionar Referência COM.

Terceiro, adicione a Biblioteca de Objetos do Microsoft Outlook 16.0 na guia.

Quarto, defina "Embed Interop Types" como "Yes".

Finalmente, você pode usar o código relacionado no aplicativo principal .net.

using Microsoft.Office.Interop.Outlook;

 static void Main(string[] args)
        {
            Application outlook = new Application();
            MailItem selection = outlook.ActiveExplorer().Selection[1];
            Console.WriteLine(selection.EntryID);
            Console.WriteLine(selection.Subject);
        }