web-dev-qa-db-fra.com

Comment inclure la référence de DocumentFormat.OpenXml.dll sur Mono2.10?

J'utilise l'application de bureau Windows C # .net. Je souhaite également exécuter ces applications avec une autre plate-forme. Donc, j'utilise Mono 2.10 comme compilateur croisé. Pendant l'exécution, de façon inattendue, mon application se termine en disant le message d'erreur comme

Erreur: impossible d'ouvrir le dossier sélectionné.
Impossible de charger un fichier ou un assembly 'DocumentFormat.OpenXml.dll, version = 2.0.5022.0, culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances.

Je ne sais pas quel est le problème ici ... J'ai installé openxml sdk2.0 sur c:\program files\open xml sdk\v2\lib\DocumentFormat.OpenXml.dll.

et aussi mettre mon application eXe au même endroit à des fins de test ...

Veuillez me guider pour résoudre ce problème ...

31
Saravanan

Vous devez également vous assurer que vous définissez une référence à WindowsBase. Ceci est nécessaire pour utiliser le SDK car il gère System.IO.Packaging (qui est utilisé pour décompresser et ouvrir le .docx/.xlsx/.pptx compressé en tant que document OPC).

21
Todd Main

Étant moi-même nouveau dans ce domaine, voici ce que j'ai fait:

J'utilise MS Visual Studio 2010 Pro.

  1. Téléchargez et installez le SDK OpenXML
  2. Dans mon projet dans Visual Studio, sélectionnez "Projet" puis "Ajouter une référence"
  3. Sélectionnez l'onglet "Parcourir"
  4. Dans le menu déroulant "Rechercher dans:", accédez à: C:\Program Files (x86)\Open XML SDK\V2.0\lib et sélectionnez le "DocumentFormat.OpenXml.dll
  5. Appuyez sur OK
  6. Dans "l'Explorateur de solutions" (à droite pour moi), le dossier "Références" affiche désormais la bibliothèque DocumentFormat.OpenXML.
  7. Faites un clic droit dessus et sélectionnez Propriétés
  8. Dans le panneau Propriétés, remplacez "Copier local" par "Vrai".

Vous devriez maintenant être désactivé et en cours d'exécution à l'aide des classes DocumentFormat.

19
Imp1ety

sélectionnez DocumentFormat.OpenXml sous références, affichez ses propriétés et définissez l'option Copier local sur True pour qu'il le copie dans le dossier de sortie. Cela a fonctionné pour moi.

7
Som

Goto Nuget Package Manager et recherchez openxml. Et installez DocumentFormat.OpenXml

6
Hrishikesh T T

Ce qui a fonctionné pour moi:

  1. Ajoutez un dossier au projet, appelez-le ThirdParty.
  2. Ajoutez dans le dossier ThirdParty les deux DocumentFormat.OpenXML.dll et WindowsBase.dll
  3. Assurez-vous que le projet utilise le répertoire ThirdParty comme référence pour les deux DLL
  4. Construit et publié sur un serveur externe.
3
Juliean

Eh bien, dans mes applications, j'ai juste besoin d'ajouter une référence à "DocumentFormat.OpenXml" sous l'onglet .Net et les deux références (DocumentFormat.OpenXml et WindowsBase) sont toujours ajoutées automatiquement. Mais ils ne sont pas inclus dans le dossier Bin. Ainsi, lorsque l'application est publiée sur un serveur externe, je place toujours DocumentFormat.OpenXml.dll sous le dossier Bin manuellement. Ou définissez la propriété de référence "Copier local" sur true.

1
El Bayames

Vous devez avoir DocumentFormat.OpenXML.dll dans le même dossier que votre application - ou dans le chemin "bin" si vous développez une application ASP.NET. Cependant, je ne suis pas certain que le SDK OpenXML soit pris en charge sur les systèmes d'exploitation non Windows - vous devrez peut-être rechercher une solution tierce.

Oui, cette réponse est correcte, la seule différence est que vous copiez votre .dll dans le dossier bin du projet.

0
Sean O'Brien

J'ai trouvé que lorsqu'il était mélangé avec des bibliothèques PCL, le problème ci-dessus se présentait, et bien qu'il soit vrai que la bibliothèque WindowsBase contient System.IO.Packaging, j'utilisais la bibliothèque OpenXMLSDK-MOT 2.6.0.0 qui elle-même fournit sa propre copie du système physique Bibliothèque .IO.Packaging. La référence qui me manquait se trouvait comme suit dans le projet csharp

<Reference Include="System.IO.Packaging, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\..\..\..\packages\OpenXMLSDK-MOT.2.6.0.0\lib\System.IO.Packaging.dll</HintPath>
  <Private>True</Private>
</Reference>

J'ai rétrogradé ma version de XMLSDK à 2.6 qui a alors semblé résoudre ce problème pour moi. Mais vous pouvez voir qu'il existe un Assembly System.IO.Packaging.dll physique

0
The Senator

Le problème pour moi était que DocumentFormat.OpenXml.dll existait dans le Global Assembly Cache (GAC) sur ma boîte de développement Win7. Ainsi, lors de la publication de mon projet dans VS2013, il a trouvé le fichier dans le GAC et a donc omis de le copier dans le dossier de publication.

Solution: supprimez le DLL du GAC.

  1. Ouvrez la racine GAC dans l'Explorateur Windows (Win7: %windir%\Microsoft.NET\Assembly)
  2. Rechercher OpenXml
  3. Supprimez tous les dossiers appropriés (ou pour être sûr, coupez-les sur votre bureau au cas où vous voudriez les restaurer)

Il existe peut-être un moyen plus approprié de supprimer un fichier GAC (ci-dessous), mais c'est ce que j'ai fait et cela a fonctionné. gacutil –u DocumentFormat.OpenXml.dll

J'espère que ça t'as aidé!

0
Kidquick

Après avoir consulté et modifié les propriétés en DocumentFormat.OpenXml, j'ai également dû changer la version spécifique en false.

0
Randal Hicks