【问题标题】:Upgrading class library project to .net standard 2.1 where this has been referenced by .net framework 4.X projects将类库项目升级到 .net 标准 2.1,其中已被 .net 框架 4.X 项目引用
【发布时间】:2021-11-25 09:30:29
【问题描述】:

我们正在升级我们的多个项目的解决方案。从一个被 13 个项目引用的类库开始。我需要将我的类库项目.NET Framework 4.5 升级到.NET Standard 2.1。 这里的问题是:

这个类库正被.NET Framework 4.5 的项目引用,并且抛出无法访问.NET Standard 2.1 lib 的错误

项目“abc.csproj”以“netstandard2.1”为目标。它不能被以 '.NETFramework,Version=v4.5' 为目标的项目引用。

如何解决这个问题?不可能同时升级所有这 13 个项目。


编辑: 在 cmets 之后,如果我将 lib 转换为 .netstandard1.1,那么库本身就会开始出现错误:

将 lib 降级为 .netstandard1.1 后,继续 NetStandard 1.4 does not allow decorating class with [DataContract]。我看到了这个帖子并添加了这个包System.Runtime.Serialization.Primitives

我什至添加了对旧 dll 的引用,但仍然出现错误:

【问题讨论】:

  • 好吧,根据this article.NET Standard 2.1 似乎没有跟随.NET Framework。您可以获得的最新消息是.NET Standard 2.0.NET Framework 4.6.1
  • 所以如果所有应用程序都在.NET Framework 4.5,你应该将你的类库升级到版本.NET Standard 1.1。这应该可行,一旦您将所有其他应用程序升级到标准,您可能会再次将所有内容升级到更高版本的 .NET Standard。
  • 将其更改为.NET Standard 1.1 也会带来一些问题。正如您提到的另一个错误,可以在必须下载的 NuGet 包中找到此问题的答案。有关详细信息,请参阅stackoverflow.com/questions/43950931/…
  • 我刚刚创建了 2 个项目(一个是 .NET Framework 4.5,另一个是 .NET Standard 1.1)。在库中,我在某些属性上有 [DataMember],VS 要求我下载 Nuget pckg:System.Runtime.Serialization.Primitives(版本 4.3.0)。这样做之后,我通常能够构建它。请尝试运行构建解决方案并提供输出
  • 现在的问题是您的“最终应用程序”和“库”都在使用这些序列化 -> 但它们使用的是不同版本的 DLL。一个来自 Nuget,另一个来自“系统组装”。您需要做的是删除对系统程序集 (System.Runtime.Serialization) 的所有引用,并在任何地方使用 Nugets。

标签: c# .net


【解决方案1】:

在我们遍历 cmets 时添加答案。起初 OP 想将库的框架更改为.NET Standard 2.1,同时在.NET Framework 4.5 下拥有其他应用程序。

很遗憾,这是不可能的。正如official documentation 中所指定的,.NET Standard 2.1 不会与.NET Framework 一起跟随。您可以获得的最新消息是.NET Standard 2.0.NET Framework 4.6.1。解决这个问题的方法是将公共库项目降级为.NET Standard 1.1,其他应用项目应该可以链接到这个。

下一次迭代(降级到.NET Standard 1.1 之后)带来了与“未知类”和 VS/编译器要求添加参考相关的问题。已经有existing question,答案是下载数据序列化器相关的NuGet包。

如果最终应用程序中的代码也使用受影响程序集中的类/属性,则必须进行清理。这样所有代码都引用了唯一的单一版本的源代码。不可能从 Nuget 获取一个 Attribute 并检查“相同属性/相同名称”但来自不同来源(系统程序集 -> System.Runtime.Serialization)。

【讨论】:

  • 或者,您知道,将 .NET Framework 项目升级到 4.8。框架 4.5 已经有四年多了,support will end as of April 2022。升级到 4.8 将为您提供安全更新并允许访问 .NET Standard 2.0。
  • 好吧,OP 提到不可能完全升级所有项目。这就是为什么我要走这条路。 ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多