2

我在使用 .NET Core 3.1/5 的 Windows 上。

dotnet build我似乎一直遇到运行/时不会发生的 Ionide 报告错误的问题dotnet run,以及看似锁定 DLL 文件阻止我运行dotnet build直到关闭 VS Code,有时甚至需要手动终止 dotnet 进程。

在过去,当出现不一致时重新启动 VS Code 通常可以解决问题(单独的“清除项目缓存”似乎很少做任何事情)。不过,我一直在为一个新项目的一个非常具体的问题而苦苦挣扎:

报告的异常是:System.IO.FileNotFoundException - 无法加载文件或程序集“FSharp.Core,版本=5.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”。该系统找不到指定的文件。

确切的消息因我尝试了一些包版本和框架目标(netstandard2.0、netcoreapp3.1、net5)的组合而有所不同,但最终在构建/运行时完美运行的项目定义/DLL似乎因各种原因而失败通过 Ionide 的原因。

另一个例子:

检测到的包降级:FSharp.Core 从 4.7.2 到 4.7.1。直接从项目中引用包以选择不同的版本。

即使每个 .fsproj 文件都包含以下内容:

<PackageReference Include="FSharp.Core" Version="4.7.2" />

我可以检查什么来发现 Ionide 如何运行构建与如何dotnet build执行之间的差异?

4

1 回答 1

3

发现一件事似乎可以解决当前项目的直接问题:SDK 中的 .props 文件具有以下内容:

<ItemGroup Condition="'$(DisableImplicitFSharpCoreReference)' != 'true'">
  <PackageReference Include="FSharp.Core" Version="$(FSharpCoreImplicitPackageVersion)" />
</ItemGroup>

添加:

<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>

在我的 .fsproj 文件中,现在似乎所有内容都引用了相同的版本,而不是之前在 5.0.0(未引用时)和 4.7.1/4.7.2(仅引用 4.7.2 时)之间的不一致。

于 2020-12-07T02:05:39.750 回答