gpt4 book ai didi

c# - 带参数的 Office Interop 构造函数

转载 作者:行者123 更新时间:2023-11-30 23:22:56 29 4
gpt4 key购买 nike

我正在尝试编译其他人的项目。他们编写的代码如下所示:

var doc = new Microsoft.Office.Interop.Word.Document(pathToFile);

我可以在 Visual Studio 2010(开发它的地方)中很好地编译它,但是当我在 Visual Studio 2015 中编译同一个项目时,它给出了这个错误:

'Document' does not contain a constructor that takes 1 arguments

在这种情况下,Document 是一个接口(interface):

[Guid("0002096B-0000-0000-C000-000000000046")]
[CoClass(typeof(DocumentClass))]
public interface Document : _Document, DocumentEvents2_Event { }

CoClass 看起来像这样:

[ComSourceInterfaces("Microsoft.Office.Interop.Word.DocumentEvents2")]
[Guid("00020906-0000-0000-C000-000000000046")]
[TypeLibType(2), ClassInterface(0)]
public class DocumentClass : _Document, Document, DocumentEvents2_Event, DocumentEvents_Event
{
public DocumentClass();
[DispId(-2147418112)] public virtual string _CodeName { get; set; }

...
}

两个版本的 Visual Studio 的元数据 View 中的定义看起来相同,并且都从以下位置加载互操作文件:

C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll

在这两种情况下,DocumentClass 都不包含非默认构造函数,但它会在 Visual Studio 2010 中编译。

为什么它在 2010 年编译?鉴于它确实在 2010 年编译,为什么它在 2015 年不再编译?

我如何发现 Visual Studio 2015 的等效调用以使其正常工作?

最佳答案

根据评论中的@roryap 测试,Visual Studio 2010 似乎允许对 COM 互操作构造函数进行无效调用。

我在 Visual Studio 2010 中编译代码并使用 ILSpy 查看它生成的内容:

doc = (Microsoft.Office.Interop.Word.Document)Activator.CreateInstance(
Type.GetTypeFromCLSID(
new Guid("00020906-0000-0000-C000-000000000046")));

找不到文件路径。 Visual Studio 2015 肯定已经修复了这个错误,它不再像以前那样忽略构造函数参数。

关于c# - 带参数的 Office Interop 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38595445/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com