В 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 мало что говорит о платформе, на которую оно нацелено.
Взгляните в утилите split (1)
, входящей в состав GNU Coreutils.
вместо того, чтобы перенаправлять его в файл, вы можете направить его в программу, которая автоматически поворачивает файл, закрывая его, перемещая и открывая новый каждый раз, когда он становится слишком большим.
Проверяли ли вы поведение каких-либо сигналов, таких как SIGHUP, для стороннего продукта, чтобы узнать, начнет ли он регистрировать свежий файл? Сначала вы переместите старый файл на постоянное имя.
kill -HUP [идентификатор-процесса]
А затем он снова начнет записывать.
В качестве альтернативы (как предложил Билли), возможно, перенаправить вывод из приложение к программе регистрации, такой как multilog, или той, которая обычно используется с Apache, известная как cronolog. Тогда у вас будет более точный контроль того, где все идет, до того, как оно будет записано в этот начальный файловый дескриптор (файл), а это действительно все.
В Linux (на самом деле все унициклы) файлы создаются, когда они открываются, и удаляются, когда на них ничего не ссылается. В этом случае программа, открывшая его, и каталог, в котором он был открыт, содержат ссылки на файл. Когда программа cp хочет записать в файл, она получает ссылку на него из каталога, записывает нулевую длину в метаданные, хранящиеся в каталоге (это небольшое упрощение), и отказывается от дескриптора. Затем исходная программа, по-прежнему удерживая исходный дескриптор файла, записывает в файл еще несколько данных и сохраняет ту длину, которая, по ее мнению, должна быть.
даже если вы удалите файл из каталога, программа продолжит записывать в него данные (и использовать дисковое пространство), даже если никакая другая программа не сможет ссылаться на него.
Короче говоря, если у программы есть ссылка (дескриптор) на файл, ничто из того, что вы делаете, не изменит этого.
Теоретически существуют способы изменения поведения программ путем установки LD_LIBRARY_PATH для включения программы, которая перехватывает все системные вызовы доступа к файлам. Я помню, что где-то видел что-то подобное, но не могу вспомнить название.
Попробуйте > файл
.
Обновите комментарии: у меня он отлично работает:
robert@rm:~> echo "content" > test-file
robert@rm:~> cat test-file
content
robert@rm:~> > test-file
robert@rm:~> cat test-file
Интересная особенность этих восстановленных файлов заключается в том, что первые 128 КБ или около того будут содержать все нули после того, как вы усечете файл, скопировав поверх него / dev / null
. Это происходит из-за того, что файл усечен до нулевой длины, но дескриптор файла в приложении по-прежнему указывает сразу после его последней записи. При повторной записи файловая система обрабатывает начало файла как все нулевые байты - без фактической записи нулей на диск.
В идеале, вам следует попросить поставщика приложения открыть файл журнала с Флаг O_APPEND
. Это означает, что после усечения файла следующая запись будет неявно искать до конца файла (то есть вернуться к нулевому смещению), а затем запишет новую информацию.
во время использования файла, если вы попытаетесь обнулить его или что-то в этом роде, иногда это может «сбить с толку» приложение, которое записывает в файл журнала, и после этого оно может ничего не записывать.
Что я бы попробовал сделать, так это настроить своего рода прокси / фильтр для этого журнала, вместо перенаправления в файл, перенаправления на процесс или что-то еще, что будет получать ввод и записывать в текущий файл.
Возможно, это можно сделать с помощью сценария, иначе вы могли бы написать для этого простое приложение (java или что-то еще). Влияние на производительность приложения должно быть довольно небольшим, но вам придется провести несколько тестов.
Кстати, ваше приложение является автономным веб-приложением, ... ? Может быть, есть другие варианты, которые нужно изучить.
Изменить: есть также Оператор перенаправления добавления >> , который я лично никогда не использовал, но он может не блокировать файл.
Начиная с coreutils 7.0, появилась команда truncate
.