如何确定.net 应用程序是不是是“核心”应用程序?

Posted

技术标签:

【中文标题】如何确定.net 应用程序是不是是“核心”应用程序?【英文标题】:how to determine if a .net app is a "core" app?如何确定.net 应用程序是否是“核心”应用程序? 【发布时间】:2017-03-22 19:29:46 【问题描述】:

我需要更新一个新的 .NET 应用程序,我想有人提到它是 .NET Core。如何检查解决方案属性以确定它是否实际上是“核心”应用?

Web 项目有一个 System.Core 参考,但我用谷歌搜索了这个,似乎 System.Core.dll 至少从 .NET f/w 3.5 开始就是 .NET 框架的一部分。

该应用有一个 package.json 文件,但该文件在 sln 中的存在并不一定保证该应用是一个 .NET 核心应用。我还了解到 .NET 核心应用程序可以在不同的 .NET 框架版本上运行。

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

【问题讨论】:

整个 .net 框架应该是向后兼容的。您的意思是如何确定一个 .net 应用程序是否依赖第三方库 【参考方案1】:

为 .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 版本 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 项目或新的基于 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 兼容核心也是。

话虽如此,ASP.NET Core 是一个 webstack,可以在完整的 .NET Framework(4.5 或更高版本)和 .NET Core 上运行。因此,仅仅拥有一个 ASP.NET Core 应用程序并不能说明它所针对的平台。

【讨论】:

您是否有一些关于删除project.json 的参考资料?只能找到 5 月的东西,它仍然在这里 :) 在 .net core 1.1 公告中,他们只说这是 project.json 的新结构 blogs.msdn.microsoft.com/dotnet/2016/10/25/… @IlyaChernomordik: @IlyaChernomordik: blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap 不知道他们是否改变主意将其推迟到以后,但目标是迁移到与 msbuild 兼容的项目结构(如 csproj)以简化构建管道并成为能够利用现有的建筑基础设施。但它更多地与 Visual Studio 的 .NET Core 工具相关,而不是与框架本身相关。 iirc 的目标是自动转换现有项目。另见blogs.msdn.microsoft.com/dotnet/2016/10/19/… 似乎他们喜欢一直来回改变东西:) 迁移到 msbuild 很久以前就宣布了,甚至在它进入 RTM 并计划用于最终工具版本之前(工具仍处于预览阶段,并计划与 VS 15 一起作为最终版本发布)跨度> 【参考方案2】:

确定 Asp.net 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(对于便携式应用程序,可以是“类型”:“平台”,对于自包含应用程序,可以是“类型”:“平台”) .

Asp.net Core 应用程序是独立于平台的,所以一个 ASP.NET Core 应用程序对平台的表达并不多。

【讨论】:

你的意思是“package.json”而不是“project.json”吗? 没有它的project.json,它包含在所有Asp.net Core项目中

以上是关于如何确定.net 应用程序是不是是“核心”应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 DBContext(实体框架核心)中的 App.config(不是 .net 核心应用程序)读取值

如何确定当前在 ASP.Net 中是不是有任何文件正在上传?

我如何在 asp.net 核心中捕获或抛出异常?

如何在 ASP.NET 核心 MVC 中使用一次性密码 (OTP) 注册手机号码,而不是使用 2FA

如何确定 DLL 是不是需要完整的 .NET 4 或仅需要客户端配置文件

确定 ASP.NET 应用程序是不是在本地运行