gpt4 book ai didi

c# - 迁移到 netcore 2.0 会导致 Linux 和 Mac 上的 System.IO.Filesystem 出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:15:01 25 4
gpt4 key购买 nike

我正在处理一个 NET Core 项目。我的项目在 NET Core 1.1 上运行良好,因为我可以发布适用于 Windows、Mac 和 Ubuntu 的版本,它们按预期运行。

但是,我想迁移到 NET Core 2.0 以利用新功能,并减少我必须执行的构建数量,如 https://stackoverflow.com/a/45705268/8363669 中所述

我的项目由一个使用 NET Core 2.0 的独立 ASP.NET Core 应用程序和一个使用 NET Standard 2.0 的库组成

应用程序引用包,如下所示:

"Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
"Microsoft.AspNetCore" Version="2.0.0"
"Microsoft.AspNetCore.Mvc" Version="2.0.0"
"Microsoft.AspNetCore.StaticFiles" Version="2.0.0"
"Microsoft.EntityFrameworkCore.Design" Version="2.0.0"
"Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0"
"Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.3"
"Microsoft.Extensions.Logging.Debug" Version="2.0.0"
"Microsoft.NETCore.Runtime.CoreCLR" Version="2.0.0"
"Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0"
"Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0"
"NETStandard.Library" Version="2.0.0" />
"Newtonsoft.Json" Version="10.0.3"
"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0"

我的库也引用了一些包:

"MsgPack.Cli" Version="0.9.2"
"System.Xml.XmlSerializer" Version="4.3.0"

当使用构建目标 win-x86 和 win-x64 时,我的应用程序运行良好,但是当我为 linux-x64 和 osx-x64 构建它时,我的应用程序在运行时返回以下错误:

Could not load file or assembly 'System.IO.FileSystem, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我见过其他人遇到此错误,但他们问题的解决方案似乎不适用于我的情况。我不知道为什么会出现此错误,我一开始甚至没有引用 System.IO.Filesystem。

我希望我的问题包含必要的信息来帮助人们帮助我:)

最佳答案

我设法自己找到了解决方案。看来我移植代码的方式并不完美。使用 ASP.NET Core 2.0,所需的依赖项比版本 1.1 少得多

如果有人感兴趣,我所做的是将依赖项减少为以下内容:

"Microsoft.AspNetCore.All" Version="2.0.0"
"Newtonsoft.Json" Version="10.0.3"

我认为“Newtonsoft.Json”现在甚至可能是多余的。

此外,我发现从 Visual Studio 2017 发布和从 Linux 终端发布(我使用适用于 Linux 的 Windows 子系统)之间存在差异。如果我从 Visual Studio 发布,可执行文件将不会在 linux/mac 上运行,但如果我从 WSL 发布,它工作得很好。

从 linux 终端发布的命令是

dotnet publish -c Release -r linux-x64

dotnet publish -c Release -r osx-x64

分别。

关于c# - 迁移到 netcore 2.0 会导致 Linux 和 Mac 上的 System.IO.Filesystem 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com