我正在尝试使用一个xml文件来确定哪些outlook属性应该包含在通过VSTO加载项代码执行的工作流中。
示例
xml可能声明当前Outlook.MailItem
的Subject
是工作流所必需的。由于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路径需要通过其他方式解析