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 ...
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).
Étant moi-même nouveau dans ce domaine, voici ce que j'ai fait:
J'utilise MS Visual Studio 2010 Pro.
Vous devriez maintenant être désactivé et en cours d'exécution à l'aide des classes DocumentFormat.
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.
Goto Nuget Package Manager et recherchez openxml. Et installez DocumentFormat.OpenXml
Ce qui a fonctionné pour moi:
ThirdParty
.ThirdParty
les deux DocumentFormat.OpenXML.dll
et WindowsBase.dll
ThirdParty
comme référence pour les deux DLLEh 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.
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.
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
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.
%windir%\Microsoft.NET\Assembly
)OpenXml
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é!
Après avoir consulté et modifié les propriétés en DocumentFormat.OpenXml, j'ai également dû changer la version spécifique en false.