【问题标题】:using newer target framework .net standard for a sub project in a .net framework solution在 .net 框架解决方案中为子项目使用较新的目标框架 .net 标准
【发布时间】:2018-03-09 00:42:37
【问题描述】:

每当我使用 VS2017 创建新的解决方案时,我通常会选择一个较新的框架作为目标(目前最常见的是 4.6.1)。

现在,当我在解决方案中创建一个 .dll 子项目时,它将该子项目的目标框架设置为 .NET Standard 2.0。这是可以设置的最“现代”的目标框架。

这虽然有一个问题,我不能使用一些我以前喜欢的东西,比如“Resources.MyResource”(适用于 Framework 4.6.1)。

现在我想知道有没有办法纠正这个问题?是通过增加 .NET 标准,还是让人们也可以为这些 .dll 项目选择 .NET Framework(除了在解决方案之外创建 .DLL 项目,然后将其导入解决方案)?

【问题讨论】:

  • .NET Standard 旨在创建可在多个操作系统上运行的类库。它不是 4.6.1 的较新版本。完整框架的最新版本是4.7.1
  • @PanagiotisKanavos tnx 解决了一些问题。

标签: c# visual-studio-2017


【解决方案1】:

.Net Standard 是 .NET API 的规范,可用于所有 .NET 实现。

这是什么意思? - 在 .Net Standard 中调用 API 将在已实现该标准版本的所有 .Net 版本上运行。

那么这是什么意思? - .Net Core 引入了跨平台开发。现在可能需要在 Windows 机器和 Linux 机器之间共享代码需要一个可以在所有机器上平等实施的“标准”。

将其视为合同。如果 .Net 版本实现了 .Net Standard 2.0,则表示它将具有该标准中的 API 版本,可在所有平台上使用。

那么,回到你原来的问题。 .Net Standard 2.0 不是框架的“新”版本。这是您的子项目的合同,假设它是一个类库将遵守。如果某个 API 似乎丢失,那是因为它没有将它作为其合同的一部分(也许)。我说可能是因为它不是最容易找到的。

**** 开始修订****

这是table of the versions of .Net that support the versions of .Net Standard

在您的情况下,4.6.1 甚至不支持 2.0。 4.6.1 支持的最后一个标准版本是 1.4。

我认为 4.6.1 支持 .Net 标准 2.0 在我编写上述内容后,进一步阅读后发现更多 up to date chartthis post 声明它在 4.6.1 中受支持。 叹息

****结束修订****

这个SO answer 似乎表明 1.4 中确实有资源,但它是预览版本并且事情发生了变化。我在支持的 API 列表中没有看到它,但我可能会错过它。 SO的答案似乎表明这是一个工具问题,可以解决。现在可以解决了....

在这里您可以查看each Standard supports for APIs 的内容。

但是,我认为这实际上不是您想要的。

我认为您真正想要的只是将子项目的目标更改为 4.6.1,就像您的主应用程序一样,因为我高度怀疑您不需要/不希望跨平台运行。

此外,在 .Net Standard 2.0 之前,标准中没有数千个 API。 IMO,在 2.0 之前,该标准很难销售,特别是对于 .Net Full Framework 上的用户。

【讨论】:

  • 我认为该版本有错误(您认为它支持还是不支持 2.0?)
  • 删掉的句子是我的原话。在链接上显示 4.6.1 不支持 2.0。我觉得这很“错误”,所以我继续挖掘并找到了一个修改后的图表和博客文章(未删除部分),表明 4.6.1 确实支持 2.0。
【解决方案2】:

据我所知,要使用的项目模板位于“Windows 经典桌面 > 类库 (.Net Framework)”下

编辑

也就是说,您可以将 .resx 文件添加到 .Net Standard 项目并以完全相同的方式使用它。

【讨论】:

  • 我如何告诉它以这种方式使用?至于 .resx 文件我试过了。我不能使用 Resources.MyResource 虽然。我需要使用一种方法,将 MyResource 作为 Name 放入,然后让它以这种方式返回它的值。
  • @Thomas 你怎么知道该用什么方法?我刚刚尝试添加一个名为Resources.resx 的“.resx”文件(我不得不作弊并添加一个文本文件,然后手动将扩展名更改为.resx)。我添加了一个名为“MyResource”的字符串(使用 VS 中的编辑器)。然后我可以在 .Net Standard 项目中使用 Resources.MyResource。
猜你喜欢
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2018-05-12
相关资源
最近更新 更多