web-dev-qa-db-ja.com

Mono2.10にDocumentFormat.OpenXml.dllの参照を含める方法

C#.net Windowsデスクトップアプリケーションを使用しています。これらのアプリケーションを他のプラットフォームでも実行したいです。だから、私はMono 2.10をクロスコンパイラとして使用しています。実行中に、予期せずにアプリケーションが終了します

エラー:選択したフォルダーを開けませんでした。
ファイルまたはアセンブリ 'DocumentFormat.OpenXml.dll、version = 2.0.5022.0、culture = neutral、PublicKeyToken = 31bf3856ad364e35'またはその依存関係の1つをロードできませんでした。

ここで何が問題なのかわかりません... openxml sdk2.0をc:\ program files\open xml sdk\v2\lib\DocumentFormat.OpenXml.dllにインストールしました。

また、テスト目的でアプリケーションeXeを同じ場所に配置します...

この問題の解決方法を教えてください...

31
Saravanan

また、WindowsBaseへの参照を設定する必要があります。これは、System.IO.Packaging(OPCドキュメントとして圧縮された.docx/.xlsx/.pptxを解凍して開くために使用される)を処理するSDKを使用するために必要です。

21
Todd Main

私自身これに慣れていないので、私がやったことは次のとおりです。

MS Visual Studio 2010 Proを使用しています。

  1. OpenXML SDKをダウンロードしてインストールします
  2. Visual Studioのプロジェクト内で、[プロジェクト]、[参照の追加]の順に選択します
  3. 「参照」タブを選択します
  4. 「Look in:」プルダウンで、C:\ Program Files(x86)\ Open XML SDK\V2.0\libに移動し、「DocumentFormat.OpenXml.dll」を選択します
  5. ヒットOK
  6. (ソリューションエクスプローラー)(右側)の[参照]フォルダーにDocumentFormat.OpenXMLライブラリが表示されます。
  7. それを右クリックし、プロパティを選択します
  8. プロパティパネルで、「ローカルコピー」を「True」に変更します。

DocumentFormatクラスを使用して、オフにして実行する必要があります。

19
Imp1ety

referencesの下のDocumentFormat.OpenXmlを選択し、そのプロパティを表示して、Copy LocalオプションをTrueに設定して、出力フォルダーにコピーします。それは私のために働いた。

7
Som

Nuget Package Managerに移動して、openxmlを検索します。そして、DocumentFormat.OpenXmlをインストールします

6
Hrishikesh T T

私のために働いたもの:

  1. プロジェクトにフォルダーを追加し、ThirdPartyという名前を付けます。
  2. ThirdPartyフォルダーに両方ともDocumentFormat.OpenXML.dllおよびWindowsBase.dll
  3. プロジェクトが両方のDLLの参照としてThirdParty dirを使用していることを確認してください
  4. ビルドして外部サーバーに公開します。
3
Juliean

私のアプリケーションでは、.Netタブの下に「DocumentFormat.OpenXml」への参照を追加するだけで、両方の参照(DocumentFormat.OpenXmlおよびWindowsBase)が常に自動的に追加されます。しかし、それらはBinフォルダーには含まれていません。そのため、アプリケーションを外部サーバーに公開するときは、常にDocumentFormat.OpenXml.dllをBinフォルダーに手動で配置します。または、参照「ローカルのコピー」プロパティをtrueに設定します。

1
El Bayames

DocumentFormat.OpenXML.dllは、アプリケーションと同じフォルダー、またはASP.NETアプリケーションを開発している場合は「bin」パスに配置する必要があります。ただし、OpenXML SDKがWindows以外のオペレーティングシステムでサポートされているかどうかは定かではありません。サードパーティのソリューションを調べる必要がある場合があります。

はい、この答えは正しいです。唯一の違いは、.dllをプロジェクトのbinフォルダーにコピーすることです。

0
Sean O'Brien

PCLライブラリと混合すると、上記の問題自体が発生し、WindowsBaseライブラリにSystem.IO.Packagingが含まれているのは事実ですが、それ自体が物理システムの独自のコピーを提供するOpenXMLSDK-MOT 2.6.0.0ライブラリを使用していたことがわかりました.IO.Packagingライブラリ。私にとって欠けていた参照は、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>

XMLSDKのバージョンを2.6にダウングレードすると、この問題は解決されたようです。しかし、物理的なAssembly System.IO.Packaging.dllがあることがわかります。

0
The Senator

私にとっての問題は、DocumentFormat.OpenXml.dll Win7開発ボックスのグローバルアセンブリキャッシュ(GAC)に存在していました。そのため、VS2013でプロジェクトを公開すると、GACでファイルが検出されたため、公開フォルダーへのコピーが省略されました。

解決策:DLLをGACから削除します。

  1. WindowsエクスプローラーでGACルートを開きます(Win7:%windir%\Microsoft.NET\Assembly
  2. OpenXmlを検索
  3. 適切なフォルダを削除します(または安全のため、復元する必要がある場合に備えてデスクトップに切り取ります)

GACファイルを削除するより適切な方法があるかもしれません(下記)が、それは私がやったことであり、うまくいきました。 gacutil –u DocumentFormat.OpenXml.dll

お役に立てば幸いです!

0
Kidquick

プロパティを表示してDocumentFormat.OpenXmlに変更した後、特定バージョンをfalseに変更する必要もありました。

0
Randal Hicks