带参数的 Office Interop 构造函数
Office Interop constructor with arguments
我正在尝试编译别人的项目。他们编写的代码如下所示:
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 是一个接口:
[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 的元数据视图中的定义看起来相同,并且都从以下位置加载互操作文件:
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word.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一定修复了这个bug,不再像以前那样忽略构造函数参数了。
我正在尝试编译别人的项目。他们编写的代码如下所示:
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 是一个接口:
[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 的元数据视图中的定义看起来相同,并且都从以下位置加载互操作文件:
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Word.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一定修复了这个bug,不再像以前那样忽略构造函数参数了。