WindowsBase.dll 静态位置

WindowsBase.dll static location

我正在使用 OpenXML SDK 将数据写入 excel 文件。现在,这在我的开发机器上运行良好。

上周,我们将代码带到生产服务器,正如预期的那样,它没有安装 OpenXML DLL。为了使其正常工作,我需要在服务器上安装两个 DLL - 1. DocumentFormat.OpenXml.dll 和 2. Windowsbase.DLL。我在C盘创建了一个文件夹,把这些DLL放在里面。假设我将它们放在文件夹 C:\OpenXML

出于某种原因,我的 DocumentFormat.OpenXml.dll 解决方案中的引用正确指向 C:\OpenXML\DocumentFormat.OpenXml.dll 但 WindowsBase 指向位置 C:\Program Files ( x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\WindowsBase.dll。我从我的 DEV 机器上检查了位置 属性。然后我在 C 驱动器中快速搜索 WindowsBase,它显示了该 DLL 的大量副本。所以我试着一个接一个地添加它们,但 WindowsBase 仍然指向 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\WindowsBase.dll。在 DEV 工作站上,它工作正常。但是,在服务器上,位置 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\WindowsBase.dll 不存在,我的解决方案失败了。

不确定为什么 WindowsBase 总是只指向一个静态位置。如果有灵活性,我可以将它放在服务器的某个文件夹中并毫无问题地引用它(就像我对其他库 DocumentFormat.OpenXML.DLL 所做的那样)。有什么解决办法吗?

我的问题出在其他地方。这与我加载的 DocumentFormat.OpenXML.dll 版本有关。我试图在 .NET 4 中使用适用于 .NET 3.5 的 DLL。

最初我对WindowsBase 的理解是错误的。 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\ 被 Visual Studio 用来引用共享库。在没有 Visual Studio 的服务器上,解决方案将指向 GAC。因此,如果该库存在于 GAC 中就足够了。

西蒙在 Missing Referenced Assemblies Folder for .NET 4.0 的回答中的以下摘录解释了这一点。

Reference Assemblies folder is used with Visual Studio. While the actual deployed application will use the GAC in c:\Windows\Microsoft.Net\Assembly. I am assuming you didn't install Visual Studio on your server, therefore you wouldn't have the Reference Assemblies Folder.

了解这一点帮助我解决了问题。希望这可以帮助别人。