如何在动态CSharpCodeProvider脚本中添加对Outlook VSTO的引用



我正在尝试使用一个xml文件来确定哪些outlook属性应该包含在通过VSTO加载项代码执行的工作流中。

示例

xml可能声明当前Outlook.MailItemSubject是工作流所必需的。由于MailItem是一个接口,而不是一个类,所以我无法使用反射来使用其字符串名称"Subject"获取Subject属性。

我认为解决方案可能是创建并编译动态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);
parameters.ReferencedAssemblies.Add("Microsoft.Office.Interop.Outlook.dll");

我现在有了答案。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"";`

感谢阿巴蒂舍夫对的帮助

更新:Outlook加载项使用嵌入的互操作程序集,这会导致此问题。因此,无法从加载的程序集中确定office dll的位置。/lib路径需要通过其他方式解析

相关内容

  • 没有找到相关文章

最新更新