首页 > 解决方案 > 使用 VS2019、.Net 5.0、Winforms.Wasm 1.0.19137.60 Nuget 包 - 产生未处理的 Mono.Cecil.AssemblyResolutionExceptions

问题描述

我正在尝试使用 VS 2019 将在 .Net 4.5.2 下开发的 6 个类库移植到 .Net 5.00。我选择 .Net 5.00(和 VS 2019)作为我的最终目标是将解决方案作为 Web 程序集提供。我已将每个库的目标框架设置为 .NET 5.0。

我的一个类库使用 Winforms,因此我已将 Roozbeh Gh 的 Nuget 包 Winforms.Wasm (1.0.191137.60) 下载到 VS 2019 中。

在构建时,我最初得到了错误:

1>C:\Users\howar_000\.nuget\packages\winforms.wasm\1.0.19137.60\build\netstandard2.0\Winforms.Wasm.targets(13,5): error : 
Unhandled Exception: Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Windows.Forms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
... at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) 
... at Driver.Import(String ra, AssemblyKind kind)    
... at Driver.Run(String[] args)    
... at Driver.Main(String[] args)

我能够通过添加以下内容来解决这个问题:

<PropertyGroup>
     <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

根据我在 Roozbeh Gh 推荐的 Winforms.Wasm GIT 存储库中找到的说明。

1>C:\Users\howar_000\.nuget\packages\winforms.wasm\1.0.19137.60\build\netstandard2.0\Winforms.Wasm.targets(13,5): error : 
Unhandled Exception: Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Formats.Asn1, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 1>C:\Users\howar_000\.nuget\packages\winforms.wasm\1.0.19137.60\build\netstandard2.0\Winforms.Wasm.targets(13,5): error :    at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters) 
... at Driver.Import(String ra, AssemblyKind kind) 
... at Driver.Import(String ra, AssemblyKind kind) 
... at Driver.Import(String ra, AssemblyKind kind) 
... at Driver.Import(String ra, AssemblyKind kind) 
... at Driver.Run(String[] args)

即,它只是将问题转移到与 Winforms.Wasm 一起分发的另一个库。我也尝试过明确排除 System.Formats.Asn.dll 的 Nuget 版本,但这也不起作用。

我意识到问题在于 Nuget Winforms.Wasm 包包含 netstardard2.0 库,因此包下载是一个完整的独立发行版。此外,VS 2019 MSBuild 正在识别与 dotnet net5.0 发行版的冲突。

我做了很多调查试图解决这个问题 - 甚至覆盖 C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\5.0.0\ref\net5.0\System.Formats.Asn1.dll使用
C:\Users\howar_000.nuget\packages\system.formats.asn1\5.0.0\lib\netstandard2.0\System.Formats.Asn1.dll 反之亦然,但无济于事。

但是通过阅读网络上的大量文献,我意识到这是一个反复出现的问题,一段时间以来一直困扰着尝试将 VS 与 .Net 和 Nuget 包一起使用的开发人员。当然,要么微软需要更改 VS MSBuild 的实现以适应 Nuget 包,要么 Nuget 包编写者需要提出一个符合 VS 的发行版——而不是让开发人员花费大量时间来尝试建立变通方案并了解 VS MSBuild 的内部工作。

我正在考虑从 VS 2019 转移到使用 Mono Developer 工具包——我会告诉你我是怎么做的。

任何有关如何最好地将使用 Nuget 包的 .Net 4.5.2 程序集迁移到等效 Web 程序集的帮助/建议将不胜感激。

标签: nugetvisual-studio-2019webassembly.net-5

解决方案


推荐阅读