2

我正在尝试使用 xml 文件来确定应将哪些 Outlook 属性包含在通过 VSTO 插件代码执行的工作流中。

例子

xml 可能会声明工作流需要Subject当前Outlook.MailItem的。我无法使用反射来Subject使用其字符串名称“Subject”获取属性,因为它MailItem是一个接口而不是一个类。

我认为解决方案可能是创建和编译动态 C# 代码,按名称返回所需的属性......

问题:我一直无法弄清楚如何找到正在运行的 Microsoft.Office.Interop.Outlook.dll 的位置,以便将其添加为对动态编译器的引用。我尝试了许多组合,最后的努力如下所示。

CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
parameters.IncludeDebugInformation = false;
parameters.ReferencedAssemblies.Add(Assembly.GetAssembly(typeof(Outlook.MailItem)).Location);
4

2 回答 2

1
parameters.ReferencedAssemblies.Add("Microsoft.Office.Interop.Outlook.dll");
于 2012-09-08T19:20:43.283 回答
0

我现在有了答案。abatishchev 让我有信心知道应该做什么,所以我尝试将 office dll 的编译器包含路径设置为CompilerOptions.

我仍然需要弄清楚如何为当前版本的 Outlook 获取这条路径,但这听起来并不难,否则我可能会为此提出一个新问题:)

这是有效的代码。

  parameters.ReferencedAssemblies.Add("Microsoft.Office.Interop.Outlook.dll"); 
  parameters.CompilerOptions = "/lib:\"C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\Visual Studio Tools for Office\\PIA\\Office14\"";`

感谢 abatishchev 的所有帮助

更新: Outlook 插件使用导致此问题的嵌入式互操作程序集。所以不可能从加载的程序集中确定 office dll 的位置。/lib 路径需要通过其他方式解析。

于 2012-09-08T20:39:05.923 回答