标签: outlook-addin

如何解决无法加载的VSTO插件?

我的VSTO Outlook插件突然停止在一台客户机器上工作(它没有加载,没有错误消息)而且我遇到了故障排除问题.该机器是Windows 7 x86,Outlook 2007.该加载项是使用Visual Studio 2008编写的,并使用VSTO 2005和2003 PIA(因为我们还需要支持Outlook 2003).它在其他机器上完美运行.

这是我试图获得有用的故障排除输出:

没有.加载项不会在没有给出任何原因指示的情况下加载.我还检查了"通常的嫌疑人"(CAS政策,安装的PIA,注册表中的LoadBehavior,重新安装VSTO和加载项).

其他一些观察:

  • LoadBehavior在注册表中停留在3.
  • 加载项在Outlook中显示为"已禁用".选中"COM加载项"中的复选框只会执行任何操作(没有错误,第二次输入表单时复选框会再次清除).
  • 它在其他客户机器上运行得非常好,并且在这台机器上运行得非常好.(不,客户不能告诉我他的机器上发生了什么变化.)
  • 我的Trace.WriteLine代码的最顶部(ThisAddIn_Startup处理程序中的第一行)有一条消息,未到达(我使用DebugView检查).因此,不加载的原因不是我的加载项中的例外,而是VSTO加载加载项或Outlook加载VSTO失败.

而不是更随机的调试("试试这个......","试试......"),我真的想强迫Outlook和/或VSTO告诉我什么是错的,即给我一个有用的错误信息而不是只是无所事事试图启用加载项时.有任何想法吗?

.net vsto outlook-addin

73
推荐指数
4
解决办法
9万
查看次数

"UserControl"类型不支持直接内容

我有一个Outlook 2013和2016 VSTO加载项项目,我试图描述一个WPF用户控件添加到自定义任务窗格这里.

我遇到的问题是,当我添加用户控件(WPF)时,它会生成一个带网格的WPF控件,但会自动抛出"类型'UserControl'不支持直接内容"的错误.

WPF生成:

<UserControl x:Class="TestNamespace.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TestNamespace"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>

</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

我知道在过去我不得不将WPF项目类型的guid添加到.proj文件中以使一些工作正常工作,但添加它没有任何区别(实际上它甚至不会按特定顺序加载).

原版的:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

崩溃:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

不崩溃,但不修复错误:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?

UPDATE

我尝试直接创建一个新的类库项目,添加了一个WPF用户控件,然后添加了对System.Xaml的引用,我有同样的问题.

c# wpf xaml user-controls outlook-addin

55
推荐指数
5
解决办法
3万
查看次数

VSTO,Outlook加载项和Visual Studio 2015

从Visual Studio RC开始,Visual Studio 2015似乎不再支持Visual Studio Tools for Office(VSTO)中的Office加载项项目类型.很多googlin'和MS博客中的PM问题都没有发现有用的信息; 但也许社区中的其他人都知道更多.打开VSTO项目会产生"(不兼容)".所以:

  1. VSTO和Visual Studio 2015的状态如何?
  2. 是否有解决方法在VS 2015中打开旧项目类型

我已经没有2013了,因为我擦了那台机器......

vsto outlook-addin visual-studio-2015

26
推荐指数
1
解决办法
2万
查看次数

Outlook加载项教程?

有没有人知道使用C#开始使用Outlook加载项的一个很好的例子?

c# visual-studio outlook-addin

23
推荐指数
2
解决办法
2万
查看次数

获取Outlook 2007中当前用户的电子邮件地址

我有一个用C#编写的Outlook添加.

我想知道如何获得当前用户的电子邮件地址?

谢谢

.net c# exchange-server office-2007 outlook-addin

19
推荐指数
3
解决办法
2万
查看次数

钩子事件Outlook VSTO在主线程上继续工作

我开发了一个Outlook VSTO插件.某些任务应该在后台线程上完成.通常,检查本地数据库中的某些内容或调用Web请求.阅读了几篇文章之后,我放弃了在后台线程中调用Outlook对象模型(OOM)的想法.

我有一些wpf控件,我成功地设法使用.NET 40 TPL执行异步任务,并在完成时"完成"主VSTA线程中的作业(即访问UI或OOM).

为此,我使用了以下形式的语法:

Task<SomeResult> task = Task.Factory.StartNew(()=>{
    //Do long tasks that have nothing to do with UI or OOM
    return SomeResult();
});

//now I need to access the OOM
task.ContinueWith((Task<SomeResult> tsk) =>{
   //Do something clever using SomeResult that uses the OOM
},TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但现在我想在OOM中挂钩没有Form/WPF控件的事件时做类似的事情.确切地说,我的问题来自于TaskScheduler.FromCurrentSynchronizationContext()抛出异常的事实.

例如,

Items inboxItems = ...;
inboxItems.ItemAdd += AddNewInboxItems;

private void AddNewInboxItems(object item)
{
    Task<SomeResult> task = Task.Factory.StartNew(()=>{
    //Do long tasks that have nothing to do with OOM
    return SomeResult()});


   var scheduler = …
Run Code Online (Sandbox Code Playgroud)

c# outlook multithreading vsto outlook-addin

19
推荐指数
1
解决办法
1200
查看次数

在运行构建vs时,自定义功能区不会出现在Outlook中

我遵循了教程,但是当我构建然后在visual studio中运行我的项目时,不会出现功能区选项卡.如果有帮助的话,我正在使用outlook 2010.

outlook vsto add-in ribbon outlook-addin

18
推荐指数
2
解决办法
1万
查看次数

如何访问ThisAddIn类之外的VSTO Outlook加载项中的应用程序属性?

使用新的Outlook VSTO C#项目创建的ThisAddIn类具有一个Application属性,您可以使用该属性访问Outlook文件夹和项目.问题是当你在ThisAddIn类中时可以轻松使用它,但是从项目中的其他类中无法轻松访问它.这是因为它是一个实例属性.

我想找到这个属性在我的其他类中提供相同功能的最佳方式,所以我想出了两个可能的解决方案,但我不知道它们中的哪一个(如果有的话)是好的.

让我们假设我想获取默认的收件箱文件夹.在ThisAddIn类里面我会做这样的事情:

this.Application.Session.GetDefaultFolder(Outlook.olFolderInbox);
Run Code Online (Sandbox Code Playgroud)

现在如何在这堂课外做同样的事情?

1.静态属性

首先,我可以向ThisAddIn类添加一个静态属性,并将其设置为我想在其他类中公开的值.

public partial class ThisAddIn
{
    public Outlook.Application OutlookApp;

    void ThisAddIn_Startup(object sender, EventArgs e)
    {
        // init static variable value here
        OutlookApp = this.Application

        // initialize the rest of addin here
    }

    void InternalStartup()
    {
        this.Startup += this.ThisAddIn_Startup;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样在我的任何其他类中我都可以这样做:

ThisAddIn.OutlookApp.Session.GetDefaultFolder(Outlook.olFolderInbox);
Run Code Online (Sandbox Code Playgroud)

2.创建新的Application对象

我可以做的第二件事是在我使用它之前在我的其他类中初始化Application对象.但我不确定创建该类型的新对象是否不会创建Outlook的新实例.

class MyOtherClass
{
    public void MyMethod()
    {
        var app = new Outlook.Application();
        var folder = app.Session.GetDefaultFolder(Outlook.olFolderInbox);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何建议哪种方法更好,如果你对这个问题有不同的解决方案,我也会对此表示赞同.

.net c# vsto outlook-addin

17
推荐指数
1
解决办法
1万
查看次数

_MailAutoSig缺少书签(Outlook 2010)

我为Outlook写了一段时间,在outlook消息中添加/删除签名下面的可选标语.此加载项无任何问题.

我正在编写第二个加载项,需要在下面添加信息(无论是否存在可选签名),并再次引用Word编辑器中的_MailAutoSig书签.我遇到的问题是这个书签似乎不再出现,我的其他加载项的书签也没有出现.

下面两段代码中的一个区别是第一个代码是从ItemSend传递的对象转换的MailItem,而第二个代码是在ItemSend事件之前处理的.

这是我目前正在编写的代码:

            Word.Document toMsg = msg.GetInspector.WordEditor as Word.Document;

        foreach (Word.Bookmark b in toMsg.Bookmarks)
            Debug.Print(b.ToString());

        Word.Range r_toMsg;

        try
        {
            string oBookmark = "_MailAutoSig";  // Outlook internal bookmark for location of the e-mail signature`
            object oBookmarkObj = oBookmark;
            if (toMsg.Bookmarks.Exists(oBookmark) == true)
                Debug.Print("sigbookmark");
            r_toMsg = toMsg.Bookmarks.get_Item(ref oBookmarkObj).Range;
        }
        catch
        {
            string oOffsiteBookmark = "OffsiteBookmark";
            object oOffsiteBookmarkObj = oOffsiteBookmark;

            if (toMsg.Bookmarks.Exists(oOffsiteBookmark) == true)  // if the custom bookmark exists, remove it
                Debug.Print("offsite bookmark");
        }
        finally
        { 
            r_toMsg = toMsg.Range(missing,missing);
        }
Run Code Online (Sandbox Code Playgroud)

这是来自我的工作加载项的代码: …

.net c# outlook ms-word outlook-addin

15
推荐指数
1
解决办法
1485
查看次数

取消Item_Open会导致崩溃

我正在使用c#和Microsoft.Interop库编写办公室插件.当我通过将Cancel属性设置为false取消在Item_Open事件中打开约会时,它会导致Outlook与Appcrash崩溃.当与与会者开始定期重复播放系列时,会发生崩溃.

这在2016年有点新.在2010年和2013年它曾经工作过.

有谁知道如何让这个在2016年工作?

我试图在我的代码中找出问题,但是即使我在AppointmentItem打开事件中将cancel设置为true,即使是这里找到的示例(其他方面也适用于2016)也会中断.

编辑:我发现只有在禁用缓存模式时才会发生这种情况

编辑2:我刚刚发现这只发生在2016年的2019年和o365(自动更新到2019年)它似乎再次起作用.

c# vsto outlook-addin outlook-2016

15
推荐指数
1
解决办法
176
查看次数