C # combinando projetos .NET Core e .NET Framework em uma solução [duplicado]
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
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);
}