Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. В 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>
Есть некоторые показатели.
Существование project.json
предполагает, что это одна из более новых форм проекта (однако следует помнить, что project.json
исчезнет с .NET Core / .NET Core Tools для 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 или новых консольных приложений на основе 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 - это веб-стек, который может работать как на полной .NET Framework (4.5 или выше), так и на .NET Core. Так что наличие приложения ASP.NET Core мало что говорит о платформе, на которую оно нацелено.
Определить приложение Asp.net Core довольно просто.
Есть некоторые идентификаторы к нему. В проекте есть несколько файлов, которые помогают определить запуск основного проекта
, таких как
Внутри project.json он включает в себя
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
Здесь по dependencies
можно определить тип проекта. Приложение ядра Core ссылается на Microsoft.NETCore. Приложение (либо как «тип»: «платформа» для переносимых приложений, либо без него для автономных приложений).
Базовое приложение Asp.net не зависит от платформы, поэтому в базовом приложении ASP.NET не очень много говорится о платформе.