如何确定一个.NET应用程序是否是“core”应用程序?

39

我需要更新一个新的.NET应用程序,而且我认为它被提到过是.NET Core。如何检查解决方案属性以确定它是否确实是一个“核心”应用程序?

Web项目有一个System.Core引用,但我搜索了一下发现自至少.NET框架3.5起,System.Core.dll一直是.NET框架的一部分。

该应用程序具有一个package.json文件,但在sln中存在此文件并不一定保证该应用程序是.NET Core应用程序。我也读过,.NET Core应用程序可以运行在不同的.NET框架版本上。

那么,我如何确定.NET应用程序确实是一个“Core”应用程序?换句话说,什么让Core应用程序成为Core应用程序?


整个 .Net Framework 应该是向后兼容的。你是否意味着 如何确定一个 .net 应用程序是否依赖于第三方库 - Lei Yang
2个回答

11

已更新,支持 .NET Core >= 2.x 和/或 VS2017

在 VS2017 中,.NET Core 项目再次使用 .csproj 结构。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreappx.y</TargetFramework>
  </PropertyGroup>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandardx.y</TargetFramework>
  </PropertyGroup>

.NET Core 1.x和VS2015的旧版答案

有一些指标可以判断。

存在project.json表明它是较新的项目形式之一(注意,project.json将在.NET Core/.NET Core Tools for VS Version 1.1中被取消)。

在里面,你会有一个框架部分,例如:

"frameworks": {
  "net45": {
    "frameworkAssemblies": {
      "System.Runtime.Serialization": "4.0.0.0"
    }
  },
  "netstandard1.0": {
    "imports": [ "dnxcore50", "portable-net45+win8" ],
    "dependencies": {
    }
  },
  "netstandard1.3": {
    "imports": [ "dnxcore50", "portable-net45+win8" ],
    "dependencies": {
      "System.Runtime.Serialization.Formatters": "4.0.0-rc3-24212-01"
    }
  }
}

对于应用程序(ASP.NET Core Web项目或基于new project.json的控制台应用程序),netstandard1.x将被命名为netcoreapp1.0

如果有多个条目,则应用程序或库将针对多个平台(并将在单独的文件夹中构建多个二进制文件)。

更新

当然,我忘记了另一个指示器。 .NET Core应用程序引用Microsoft.NETCore.App(对于便携式应用程序,可以将其作为"type": "platform"引用,对于独立应用程序则不需要)。netstandard1.x(类库)引用NETStandard.Library

.NET Core应用程序基于System.Runtime,它是.NET Framework 4.5及更高版本的一部分,并用于Windows(和Windows Phone)8.0 / 8.1 / 10应用程序,因此portable-net45+win81包也与.NET Core兼容。

话虽如此,ASP.NET Core是一个Web堆栈,可以在完整的.NET Framework(4.5或更高版本)和.NET Core上运行。因此,仅拥有ASP.NET Core应用程序不能告诉我们太多关于它所针对的平台。


你有没有关于删除 project.json 的参考资料?我只能找到五月份的内容,但它仍然存在 :) 在 .net core 1.1 的公告中,他们只说了这是一个新的项目结构 https://blogs.msdn.microsoft.com/dotnet/2016/10/25/announcing-net-core-1-1-preview-1/ - Ilya Chernomordik
@IlyaChernomordik:https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ 不知道他们是否改变了计划以将其推迟到稍后时间,但目标是向msbuild兼容的项目结构(如csproj)转移,以简化构建流程并能够使用现有的构建基础设施。但它更与Visual Studio的.NET Core工具相关,而不是框架本身。如果我没记错的话,目标是自动将现有项目转换。也可以参见https://blogs.msdn.microsoft.com/dotnet/2016/10/19/net-core-tooling-in-visual-studio-15/。 - Tseng
似乎他们喜欢一直来回更改东西 :) - Ilya Chernomordik
早在 MSBuild 正式发布之前,就已经宣布要将其移植。现在的工具版本仍处于预览阶段,并计划与 VS 15 一起发布最终版本。 - Tseng

2

确定Asp.net Core应用程序非常容易。

有一些标识符可以帮助确定它。项目中有一些文件可以帮助确定Core项目。

像这样的文件:

  • project.json
  • appsetting.json
  • startup.cs

在project.json中,它包括:

"dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
"frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

通过dependencies,我们可以确定项目的类型。.NET Core应用程序引用Microsoft.NETCore.App(对于可移植应用程序,它是"type": "platform",对于自包含应用程序则不需要)。

Asp.net Core应用程序是跨平台的,所以ASP.NET Core应用程序并不表达太多关于平台的信息。


你的意思是 "package.json" 而不是 "project.json" 吗? - user7066345
不是它的project.json,这个文件包含在所有Asp.net Core项目中。 - Jani Devang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接