Построение командной строки dotnet
У меня есть следующий файл проекта :
... <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <DefineConstants>TRACE;DEBUG;NETSTANDARD2_0; NET4;</DefineConstants> <OutputPath>..\output\</OutputPath> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> <Optimize>false</Optimize> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <DefineConstants>NETSTANDARD2_0; NET4;</DefineConstants> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> <Optimize>true</Optimize> <OutputPath>..\output\</OutputPath> </PropertyGroup> ...
При выполнении следующей команды :
dotnet build -c Release proj.sln
То
optimize
свойство не используется и является как бы Debug
используется конфигурация.Что я уже пробовал:
Единственный способ-это установить
<Optimize>true</Optimize>
в отладочной конфигурации, что противоречит ее назначению.
CHill60
Я не понимаю вас - как вы определяете, что это "как будто используется конфигурация отладки" и единственный способ установить optimize true в конфигурации отладки - конечно, это вообще ничего не делает с конфигурацией выпуска?? Есть ли у вас такая же проблема с публикацией dotnet?
Mehdi Gholam
Размеры выходных файлов различаются (меньше) при включенной оптимизации.
PIEBALDconsult
Необязательно. Возможно, он также включает в себя отладочную информацию?
Вы можете иметь как оптимизированную, так и полную отладочную информацию, они не являются взаимоисключающими.
Mehdi Gholam
Выполнение также происходит медленнее.
PIEBALDconsult
Тогда, возможно, у вас есть другие проблемы.
PIEBALDconsult
Может быть, он не использует ни то, ни другое, а использует только значения по умолчанию?
Mehdi Gholam
Тогда почему же, когда вы устанавливаете конфигурацию отладки, она работает?
Mehdi Gholam
dotnet build -c Release fastJSONCore.sln -v n
Microsoft (R) Build Engine version 16.8.0+126527ff1 for .NET Copyright (C) Microsoft Corporation. All rights reserved. Build started 2020-11-11 1>Project "xxxxxxxxxxxxx\fastJSONCore.sln" on node 1 (Restore target(s)). 1>ValidateSolutionConfiguration: Building solution configuration "Release|Any CPU". _GetAllRestoreProjectPathItems: Determining projects to restore... Restore: Committing restore... Assets file has not changed. Skipping assets file writing. Path: xxxxxxxxxxxxx\fastJSONcore\obj\project.assets.json Restored xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj (in 30 ms). NuGet Config files used: C:\Users\mgholam\AppData\Roaming\NuGet\NuGet.Config C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config Feeds used: https://api.nuget.org/v3/index.json C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\ All projects are up-to-date for restore. 1>Done Building Project "xxxxxxxxxxxxx\fastJSONCore.sln" (Restore target(s)). 1:2>Project "xxxxxxxxxxxxx\fastJSONCore.sln" on node 1 (default targets). 1>ValidateSolutionConfiguration: Building solution configuration "Release|Any CPU". 1:2>Project "xxxxxxxxxxxxx\fastJSONCore.sln" (1:2) is building "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:18) on node 1 (default targets). 2:18>Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:18) is building "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:19) on node 3 (Build target(s)). 2>GenerateTargetFrameworkMonikerAttribute: Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files. 2:18>Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:18) is building "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:20) on node 2 (Build target(s)). 2>GenerateTargetFrameworkMonikerAttribute: Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files. CoreCompile: Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files. CopyFilesToOutputDirectory: fastJSON -> xxxxxxxxxxxxx\output\net4\fastJSON.dll 2>Done Building Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (Build target(s)). 2>CoreCompile: Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files. GenerateBuildDependencyFile: Skipping target "GenerateBuildDependencyFile" because all output files are up-to-date with respect to the input files. CopyFilesToOutputDirectory: fastJSON -> xxxxxxxxxxxxx\output\net5.0\fastJSON.dll 2>Done Building Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (Build target(s)). 2:18>Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:18) is building "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (2:21) on node 1 (Build target(s)). 2>GenerateTargetFrameworkMonikerAttribute: Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files. CoreCompile: Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files. GenerateBuildDependencyFile: Skipping target "GenerateBuildDependencyFile" because all output files are up-to-date with respect to the input files. CopyFilesToOutputDirectory: fastJSON -> xxxxxxxxxxxxx\output\netstandard2.0\fastJSON.dll 2>Done Building Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj" (Build target(s)). 2>Done Building Project "xxxxxxxxxxxxx\fastJSONcore\fastJSON.csproj"
Richard MacCutchan
Попробуйте добавить NDEBUG
к DefineConstants
раздел настроек релиза. Никакой гарантии, но я знаю, что это используется в некоторых настройках проекта.
Mehdi Gholam
нет, все то же самое.
Richard MacCutchan
Да, это был большой риск.
Mehdi Gholam
Вчера я отправил вопрос MS на github, ожидая ответа.
Richard MacCutchan
Просматривая результаты выше, я не вижу никаких фактических компиляций. Большинство элементов, по-видимому, пропущены, так как все файлы обновлены. Попробуйте изменить некоторые файлы или очистить все целевые объекты.
Mehdi Gholam
Использование файла проекта
dotnet build -c Release fastJSONCore.csprojработает!
Richard MacCutchan
Ну, теперь ты эксперт. :)
Mehdi Gholam
Нашел проблему, выложил решение.