如何确定.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 核心 MVC 中使用一次性密码 (OTP) 注册手机号码,而不是使用 2FA