Как мне использовать «-optimize» с dotnet cli?

#c# #.net-core #compiler-options

#c# #.net-core #параметры компилятора

Вопрос:

До сих пор я использовал csc.exe из .NET Framework для компиляции моих коротких сценариев C #. Ничего особенного, я просто хотел немного изучить иcsc.exe уже было на моем компьютере. Теперь, когда я пытаюсь писать свои проекты, используя .NET Core sdk (который я нашел здесь:https://dotnet.microsoft.com/download/dotnet-core/3.1 ), Я не уверен, как указать эти классические параметры компилятора, такие как «-optimize».

Я знаю, что мне на самом деле не нужна «-optimize», но я все равно хотел бы поэкспериментировать и, возможно, использовать некоторые другие варианты, которые я еще не рассматривал. Единственным решением, которое я придумал, было использование предоставленногоcsc.dll (используя «dotnet <путь>/csc.dll …»), что означало возврат к полному кругуcsc.exe что противоречит цели всего SDK.

Как воспроизвести эту ситуацию:

  • новая папка
  • «новая консоль dotnet»
  • теперь сгенерированы все необходимые файлы («Project.csproj», «Program.cs», «bin/», «obj/…»)
  • «запуск dotnet»
  • что теперь?

Я предполагаю, что мне нужно что-то добавить в файл .csproj, поскольку в нем есть « <AllowUnsafeBlocks>true</AllowUnsafeBlocks> » для «-unsafe», однако я ничего не нашел для «-optimize».

Дополнительная информация: Я использую Visual Studio Code, который, я думаю, не имеет отношения к этой проблеме, но на всякий случай.

Ответ №1:

Компиляция для «release» автоматически включает эту опцию. Чтобы использовать это, перейдите -c Release к dotnet команде.

Например, Release указывает на конфигурацию, которая выглядит примерно так:

 <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <DefineConstants>$(DefineConstants);RELEASE;TRACE</DefineConstants>
    <DebugSymbols>false</DebugSymbols>
    <DebugType>portable</DebugType>
    <Optimize>true</Optimize>
</PropertyGroup>
  

Больше информации здесь.

Комментарии:

1. Боже да, я искал «<Optimize >true </Optimize >» спасибо. Я почему-то не нашел его в документах, поэтому предположил, что его не существует. Я только что попробовал это с помощью быстрого теста производительности (при отладочной сборке), и разница между true и false астрономическая (* для теста, который я сделал).