【问题标题】:DocumentFormat.OpenXml in Ubuntu serverUbuntu 服务器中的 DocumentFormat.OpenXml
【发布时间】:2017-01-19 11:15:29
【问题描述】:

我有一个使用 Open XML SDK 的基本 C# 应用程序。我想让它在我的 Nginx & Ubuntu & DigitalOcean 服务器上运行。

该应用程序在 Windows 和 我的带有单声道的 Mac 中编译和运行良好。然后,我在Ubuntu服务器上安装了mono,scp .exe文件到服务器,运行mono ConsoleApplication2.exe,返回如下错误:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
File name: 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
 at ConsoleApplication2.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
File name: 'DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
  at ConsoleApplication2.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 

我找到了this link,看来问题出在DocumentFormat.OpenXml的版本上。但是我怎样才能在 Ubuntu 服务器上安装它的正确版本呢?

有人可以帮忙吗?

更新1:然后,我尝试安装Open XML SDK 2.6.1,但是有no makefile。否则,对于 Open XML SDK 2.5,我不知道在哪里可以找到发布分发。

更新2:我应该尝试build.open-xml-sdk.sh...我尝试在服务器中运行它,但它给出了an error。有谁知道这里出了什么问题?

更新3:我卸载了mono,并关注this link

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mono-complete

mono 重新安装成功。然后我再次尝试build.open-xml-sdk.sh,但它返回了the same error

更新 4: 根据 ZagNut 的评论,我尝试将 DLL 添加到 GAC。我注意到两件事:

1) 我下载了源代码并生成了DocumentFormat.OpenXml.dllSystem.IO.Packaging.dll,它们使我的程序在Visual Studio 中编译得很好。但是,当我尝试通过gacutil 将它们添加到 GAC 时,它告诉我它们需要一个强名称

2)然后我尝试通过关注this page向它们添加strong name,我意识到新的2个dll在Visual Studio中无法正常工作了:

【问题讨论】:

标签: ubuntu nginx mono openxml openxml-sdk


【解决方案1】:

只需将您需要的二进制文件与您的应用程序可执行文件放在一起。

对于二进制文件,您可以自己构建它: https://github.com/OfficeDev/Open-XML-SDK

或从下面下载并使用Universal Extractor 提取二进制文件或安装并找到它们。

2.0:https://www.microsoft.com/en-us/download/details.aspx?id=5124

2.5:https://www.microsoft.com/en-us/download/details.aspx?id=30425

【讨论】:

  • 感谢 2.02.5 的链接...但我说的是在 Ubuntu 服务器中安装它们,而不是在 Windows 中...
  • ok 提取二进制文件并将它们添加到 GAC:mono-project.com/docs/advanced/assemblies-and-the-gac
  • 呃。如果您只是将dll放在可执行文件旁边的目录中,它不起作用吗?如果 Mono 像 .NET 一样工作,它会自动在那里搜索 dll。如果可行,您可以在项目中明确引用它们,并且它们应该始终包含在您的构建中。那么,您不必为它们命名。
  • 请参阅this,尤其是有关探测的信息。它应该在与这些 dll 的执行程序集相同的目录中查找。
  • 确实,它可以工作...即,1)从微软网站下载并安装.msi,并将DocumentFormat.OpenXml.dll复制到Ubuntu服务器; 2)在Visual Studio中用相同的dll构建Sample.exe,并将Sample.exe复制到Ubuntu服务器,在与之前的dll相同的文件夹中; 3) mono Sample.exe 工作。
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2017-04-23
  • 2017-07-11
  • 1970-01-01
相关资源
最近更新 更多