【问题标题】:.NET Core missing from Target framework list目标框架列表中缺少 .NET Core
【发布时间】:2019-05-14 20:59:25
【问题描述】:

使用 Visual Studio 2017 Enterprise,我正在尝试将单元测试项目的目标框架更改为 .NET Core,以便我可以使用 xUnit。我在可用框架列表中没有看到它。

在我的可用框架列表中,我看到:

.NET Framework 2.0 -> 4.7.1 and several Unity Frameworks.  

尽管我安装了 .NET Core SDK 2.1.200 (x64)、2.1.202 (x64) 和 2.1.500 (x64),但还是这样。

【问题讨论】:

  • 如果它是一个针对 .NET Framework 的项目,我认为您无法选择将其更改为 .NET Core 或 .NET Standard,因为它并不那么简单。您需要创建一个新项目或手动编辑 .csproj 文件以进行转换。
  • @Eric:您是否尝试过创建 Visual C#->.NET Core->xUnit Test Project (.NET Core) 项目?
  • Target Framework 属性仅显示支持的转化。您不能仅通过更改目标框架来从 4.7.1 更改为 .NET Core。项目文件格式本身是不同的。有几篇文章和重复的问题解释了如何手动将一种格式转换为另一种格式,尽管最好的选择可能是从一个新项目开始,然后复制源文件
  • @PanagiotisKanavos,有些对话不一定会导致问题,但仍然没有显示。例如,我刚刚通过编辑项目文件将一个项目从 .NET Standard 2.0 转换为 .NET Core 3.0(如下 Jimmy 所述),没有出现任何问题。我认为它并不能保证工作,但它可以比创建一个新项目并转移所有内容要快得多。
  • @RyanLundy 这并不意味着 Visual Studio 支持更改。任何问题都是专门针对通过下拉菜单将 4.7.1 更改为 .NET Core 3.0 的,这需要将项目文件更改为新格式并清理瞬态包依赖项。这就是new try-convert tool 所做的

标签: c# .net visual-studio .net-core visual-studio-2017


【解决方案1】:

您似乎有两个选择,这两个都很简单:

将您的目标框架更改为 netcoreapp*

编辑您的项目文件并进行更改

<TargetFramework>net461</TargetFramework>

<TargetFramework>netcoreapp2.1</TargetFramework>

(或您希望定位的任何版本的 .NET Core。我相信 SDK 2.1.500 是 netcoreapp2.1。)

在 .NET Framework 项目中使用 XUnit

创建一个 .NET Framework 类库项目并安装 xunit NuGet 包。然后你可以像平常一样开始使用 XUnit,它可以引用你的 web 项目。

要在 VS 中运行测试,您还需要 xunit.runner.visualstudio 包。

【讨论】:

  • 这仅在 OP 已手动更改 csproj 文件以使用新格式时才有效。
【解决方案2】:

Visual Studio 仅显示支持的转换。从 .NET Framework 转换到 .NET Core 并不像更改版本号那么简单。

您可以使用try-convert 对项目文件进行必要的修改。请务必先使用--diff-only 来检查更改。

您应该查看Nate McMaster's 迁移指南和Additions to the csproj format for .NET Core 以了解更改。

Microsoft 不支持该工具,也不能保证执行 100% 的转换。

此工具不受任何支持。

此工具适用于谁?

此工具适用于希望在将项目迁移到 .NET Core(或 .NET SDK 样式的项目)时获得一点帮助的任何人。

顾名思义,此工具不能保证将项目完全转换为 100% 的工作状态。该工具是保守的,并且尽其所能确保转换后的项目仍然可以加载到 Visual Studio 中并进行构建。但是,有大量因素会导致项目可能无法加载或构建,而该工具并未明确涵盖这些因素。其中包括:

  • 您的解决方案中可能包含复杂的自定义构建
  • API 使用与 .NET Core 不兼容
  • 不支持的项目类型(例如 Xamarin、WebForms 或 WCF 项目)

如果您的大部分代码库通常能够迁移到 .NET Core(例如许多没有特定平台代码的类库),那么这个工具应该会有所帮助。

强烈建议您在受源代码控制的项目中使用此工具。

强调我的。

为什么?

.NET Core 和 .NET Framework 使用非常不同的 csproj 格式并以不同方式处理包引用,尤其是临时依赖项,即另一个包需要的包。

在 .NET Framework 中,packages.config 包含所有包,这意味着您不知道真正需要哪些包。在 .NET Core 中没有 packages.configcsproj 文件仅包含顶级依赖项的 PackageReference 元素。

在旧的csproj 格式中,您必须明确包含每个源文件。在新格式中,所有源文件都会自动包含在内,从而生成一个非常易于编辑的文件。

进行这些更改并非易事。直到最近还是a manual process。就个人而言,我只是删除了所有内容,复制了最小的 XML 并添加了包引用,直到我成功构建。即使那样,我也不得不手动添加有关包含/排除/copty-to-output 文件的行。如果我有带有条件等的自定义构建步骤,事情会变得更加困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多