Je travaille dans VS 2010 et travaille sur la mise à niveau de notre application vers .NET 4. L'application est construite avec Excel comme base et nous voulons profiter des améliorations apportées à .NET pour utiliser Excel. Mais j'ai rencontré une erreur étrange qui semble être causée par l'utilisation d'un objet Excel Interop dans un dictionnaire générique. Voici l'erreur qui a été généré:Sommes-nous incapables d'utiliser des objets Interop dans des objets génériques dans .NET 4.0?
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.
Voici la propriété réelle qui a la question:
Dictionary<Excel.Worksheet, IReportSheet> SheetReports { get;}
Sommes-nous incapables d'utiliser des objets Interop dans les objets génériques? Si c'est le cas, il s'agit d'une limitation sérieuse dans .NET 4.0. J'ai essayé de définir la propriété Embed Interop sur false, mais cela ne semblait pas changer quoi que ce soit. S'il vous plaît laissez-moi savoir s'il y a de toute façon autour de cela.
À la votre!
Erick
Adrian, C'est ce que j'ai compris donc merci pour la confirmation. J'ai fini par devoir désactiver l'intégration dans toute la solution. Je suis à la recherche d'un moyen de contourner mais je n'ai pas eu le temps d'expérimenter. Peut-être une sorte d'interface? Faites-moi savoir vos pensées à ce sujet. Merci! – Erick
La seule autre façon de contourner cela est de créer une sorte d'affinité d'assemblage (comme le modèle de thread STA). Vous pouvez faire circuler les objets interop, en les convertissant en objet, mais dès que vous avez besoin d'y accéder, vous devez effectuer l'appel depuis l'assemblage où ils ont été créés. D'un autre côté, qu'est-ce qui ne va pas avec l'utilisation d'assemblages interop pour le bureau? Ils seront sur la machine des utilisateurs de toute façon puisqu'ils font partie d'une installation normale. Vous n'obtiendrez rien de l'interopérabilité intégrée. – adrianm
correct. l'intégration n'est pas si merveilleuse. Pour utiliser Interops, les utilisateurs doivent disposer d'une copie sous licence d'Office. La plupart auront Office 2007 qui vient avec le PIA pré-installé ....: D –