我正在VS 2010中工作,并将我们的应用程序升级到.NET 4.应用程序是以Excel为基础构建的,我们希望利用.NET对于使用Excel的一些改进。但是我遇到了一个奇怪的错误,这似乎是由通用字典中使用Excel Interop对象造成的。这里是产生差错:我们无法在.NET 4.0中的泛型对象中使用Interop对象吗?
C:\MyApp\TheAssembly\MyClass.cs(823,57):
error CS1769: Type 'MyApp\OtherAssemply.IMyController.SheetReports' from assembly 'c:\MyApp\OtherAssemply.\bin\Debug\OtherAssembly.dll'
cannot be used across assembly boundaries because it has a generic type
parameter that is an embedded interop type.
下面是有问题的实际属性:
Dictionary<Excel.Worksheet, IReportSheet> SheetReports { get;}
难道我们不能在通用对象使用互操作的对象?如果是这样,这是.NET 4.0中的一个严重限制。我尝试将Embed Interop属性设置为false,但这似乎没有改变任何内容。请让我知道是否有这个问题。
干杯!
埃里克
阿德里安, 这就是我想通了,所以感谢您的确认。我最终不得不在整个解决方案中关闭嵌入。我正在研究一些方法,但没有时间去尝试。也许某种界面?让我知道你的想法。 谢谢! – Erick 2009-12-01 17:35:38
我能想到的唯一方法就是创建某种装配关联(如STA线程模型)。你可以通过将它们作为对象转换来传递互操作对象,但只要你需要访问它们,你就必须从创建它们的程序集中调用它。另一方面,在办公室使用互操作程序集有什么不对?无论如何,它们将在用户机器上,因为它们是正常安装的一部分。你不会从嵌入式互操作中获得任何东西。 – adrianm 2009-12-02 07:23:58
正确。嵌入并不是那么美妙。为了使用互联网,用户必须拥有Office的许可副本。大多数将有PIA预先安装的Office 2007 ...:D – 2010-02-25 04:48:51