【问题标题】:Updating an old C#更新旧的 C#
【发布时间】:2021-02-03 13:53:33
【问题描述】:

所以我是一个相当新的开发人员,希望有人可以向我解释一些事情并帮助我了解如何完成我的任务。

好的,所以我们有一个“Web 应用程序”,用于我们很久以前用 C# 编写的服务之一。它引起了我的雇主的注意,他要求我将其更新到最新的框架/添加或删除软件包并重新构建(现在无法构建)。

所以当我添加包时问题就来了。我已经尝试过手动复制缺少的 DLL 文件的旧方法,因为 VPC 不允许使用“NuGet”。我曾尝试在家中使用 NuGet 执行此操作,但仍然失败。

大多数情况下我会遇到以下类型的错误:

无法加载文件或程序集'DocumentFormat.OpenXml, 版本=2.0.5022.0,文化=中性,PublicKeyToken="CustomNumber"' 或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。 (HRESULT 的例外情况: 0x80131040)。

注意:CustomNumber 代表我刚才没有复制的公钥令牌。

一个用于 DocumentFormat.OpenXml,另一个用于 Ajax.min 控制工具包。

谁能给我任何关于如何更新旧项目或如何解决它们的指示或解释? 是否有特定的方法或方法可以解决此类问题,或者只是基本的谷歌搜索,直到你烧掉? (我试过谷歌搜索,但还是卡住了)

【问题讨论】:

  • since the VPC does not allow for "NuGet" usage. 如果您无法访问 NuGet,将会有很多痛苦。
  • 你有没有看到原始项目针对的是哪个框架?也许您正在尝试使用针对较新框架的软件包?只抛出想法
  • 请添加有关旧项目针对哪个框架(我假设是 .NET Framework 4.x?)以及您现在要针对哪个框架(我假设是 .NET 5.0)的信息。提醒:“.NET Framework”是旧框架,不兼容“.NET Core”或最新的简称为“.NET”。
  • 您好,我对来自@user9938 的awser 很满意,但是我还没有完成任务,因为它是一个“低优先级”任务,我会在空闲时间处理它。我会在处理它时发布更新并跟进问题。

标签: c# visual-studio nuget


【解决方案1】:

您是否添加了对WindowsBase 的引用?

VS 2019 / VS 2017

在 VS 菜单中,

  • 点击项目
  • 选择添加参考...
  • 点击程序集
  • 检查 WindowsBase
  • 点击确定

另见:How to include the reference of DocumentFormat.OpenXml.dll on Mono2.10?

如果您正在寻找最新版本,您可以查看:

What's new in .NET 5

What is .NET Framework

Download .NET, .NET Core, and .NET Framework

GithubOpen-XML-SDK

NuGetDocumentFormat.OpenXml

既然你说你是一个“相当新的开发者”,下面是一些可能对你有用的信息。

ildasm

如果您有兴趣查看 .NET DLL 文件或 .NET .exe 文件中使用了哪些程序集,可以使用 Windows Kit 中的ildasm.exe

注意:SDK 可以在%ProgramFiles(x86)%\Microsoft SDKs\Windows\ 中找到(例如:C:\Program Files (x86)\Microsoft SDKs\Windows)

ildasm.exe 可以在以下一个或多个位置找到(假设 SDK 安装在默认位置):

赢得 10

  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 工具
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 工具
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\x64
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 工具
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools\x64 ...

赢 8.1

  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 工具
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64

Win 7

  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 工具
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\
  • `%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\x64

运行 ildasm.exe

  • 双击ildasm.exe 运行它(或打开cmd 窗口并输入ildasm.exe
  • 点击文件
  • 选择打开
  • 选择您的 DLL 文件或 .exe 文件(例如:TestDLL35.dll)
  • 双击MANIFEST在新窗口中打开它

您会看到类似以下内容:

...

当您看到:.assembly extern <name>(例如:.assembly extern System.Core)时,这指定了所需的程序集。查看大括号内的.ver 以查看正在使用的程序集版本。对于 .NET 程序集,这是该库的 .NET 版本(例如:3:5:0:0),表明使用了 .NET 3.5。

如果查看 .assembly DocumentFormat.OpenXml 的“.ver”,则版本显示为 2:0:5022:0,即版本 2.0.5022.0。


NuGet 包

这里有一些关于 NuGet 包的信息,如果你安装了一个(在家)。如果安装了 NuGet 包,可以在 %UserProfile%\.nuget\packages 中找到它。例如,最新的 NuGet 包 DocumentFormat.OpenXml,可以在 C:\Users\<username>\.nuget\packages\open-xml-sdk\<version>\lib\<.NET version> 中找到(例如:C:\Users\TestUser\.nuget\packages\open-xml-sdk\2.9.1\lib\net46)。 OpenXml 版本 2.0,可以在 NuGet 包 DocumentFormat.OpenXmlSDK (C:\Users\\.nuget\packages\documentformat.openxmlsdk\2.0.0\lib\Net35) 中找到

在 Visual Studio 中,以下设置确定是否将 .NuGet 包复制到本地项目文件夹:

在 VS 菜单中:

  • 点击工具
  • 选择选项
  • 展开 NuGet 包管理器
  • 点击常规
  • 在包管理下,查看默认包管理格式的值。

注意:当指定Packages.config,并且在你的项目中安装了一个.NuGet包,它会被下载到%UserProfile%\.nuget\packages\<NuGet package name>然后复制到你的解决方案文件夹(或项目文件夹)到名为“包”的文件夹。如果指定了 PackageReference,.NuGet 包将安装在您的项目中,并将下载到您的项目将引用它的%UserProfile%\.nuget\packages\<NuGet package name>,从而确保您的所有项目都使用相同版本的NuGet 包(它不会被复制到您的解决方案文件夹/项目文件夹)。 .csproj 文件中的某些设置也有所不同。

您上面列出的文件可能来自 NuGet 包 DocumentFormat.OpenXmlSDK (v.2.0.0),它看起来需要 .NET 3.5。 OpenXml 的最新/最新 NuGet 包是 DocumentFormat.OpenXml (v.2.12.1) 和 .NET 3.5、.NET 4.0 和 .NET 4.6 的 DLL。

Package references (PackageReference) in project filesMigrate from packages.config to PackageReference

【讨论】:

  • 关于更可能是缺少/不兼容的程序集的大量信息。
  • 是的,但是由于发帖人说,“所以我是一个相当新的开发人员..”这些信息会很有帮助/有用。
  • 可能,但太多的信息也会让他们感到困惑。
  • 我重新格式化了信息以便于理解。
  • 非常感谢,非常详细,我会进一步研究,并在我工作时尝试完成(如有必要,将发布更新和跟进问题)
【解决方案2】:

由于错误,多半是你的电脑环境导致你的电脑找不到DocumentFormat.OpenXml.dll version 2.0.5022.0。因此,一种解决方案是将此 dll 添加到 GAC 中,以便您的环境可以找到它。

检查this link

【讨论】:

  • 不幸的是,这个anwser对于导致问题的原因没有用(因为我已经知道它没有找到.dll)并且提供的链接没有直接引用我的案例,而是一个特定的不同 dll 上的大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多