Nant aspnet_compiler.exe выпуск сборки

У меня есть следующая задача nant:

<!--Compiles the possible release candidate to be used for further testing and possible release -->
<target name="createReleaseCandidateJob">
  <xmlpoke file="${nant.project.basedir}/${webApplicationProjectName}/Web.config"
   xpath="/configuration/system.web/compilation/@debug"
   value="false" />
  <exec basedir="." program="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe"
        commandline="-p ${webApplicationProjectName} -v / ${releaseCandidateOutputDir}"
        workingdir="."
        failonerror="true"
      />
  <echo>Completed Compile RC Job</echo>
</target>

У меня также есть следующая строка кода, включенная в мой проект:

myVersion = "2.0b";
#if DEBUG
     myVersion = Guid.NewId().ToString();
#endif

это используется при загрузке определенных ресурсов (swf-файлов) путем добавления их в качестве параметра строки запроса и гарантирует, что при отладке кэшированная версия не будет получена, но будет управляемой после освобождения.

Тем не менее, после того, что, как я полагал, должно быть скомпилировано сборкой с повтором, версия все еще устанавливается как Guid, что указывает на то, что я еще не достигаю сборки выпуска. Я проверил web.config, и значение debug изменилось на false, поэтому я предполагаю, что мне не хватает некоторых параметров в аргументах aspnet_compiler.exe, но я не могу найти ничего, что указывает на это, в документации.

1 ответ

Решение

Компилятор aspnet_compiler может определить разницу между отладочной и розничной компиляцией, используя значение web.config, но условные выражения обычно передаются компилятору в качестве аргумента (см. Это) независимо от того, что управляет сборкой (например, Visual Studio, NAnt или без разницы). У компилятора ASP этого нет, поэтому вам нужно включить их в codedom раздел файла web.config:

<system.codedom>
  <compilers>
    <compiler
      language="c#;cs;csharp" 
      extension=".cs"
      warningLevel="4"
      compilerOptions="/d:DEBUG"
      type="Microsoft.CSharp.CSharpCodeProvider, 
        System, Version=2.0.0.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089" />
    </compilers>
</system.codedom>

Здесь compilerOptions предоставляет определение #DEBUG, которое вам нужно. Это будет обнаружено самим компилятором при вызове aspnet_compiler и должно быть отражено в блоках #conditional в вашем коде. Поэтому не забудьте изменить это, когда вы переключаете другой флаг отладки в вашем файле web.config.

Другие вопросы по тегам