Mehdi Gholam Ответов: 1

Построение командной строки 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

Нашел проблему, выложил решение.

1 Ответов

Рейтинг:
8

Mehdi Gholam

Наконец - то обнаружена проблема, в вашем файле решения вы должны настроить ProjectConfigurationPlatforms Раздел для сборки Release и нет Debug когда установлена активная конфигурация.

...
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{32DBA62B-6F46-423F-9A2E-05CF451B0BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{32DBA62B-6F46-423F-9A2E-05CF451B0BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU

		{32DBA62B-6F46-423F-9A2E-05CF451B0BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU  <!-- here -->
		{32DBA62B-6F46-423F-9A2E-05CF451B0BAD}.Release|Any CPU.Build.0 = Release|Any CPU  <!-- here -->
	EndGlobalSection
...