Nant aspnet_compiler.exe выпуск сборки - PullRequest
2 голосов
/ 11 марта 2011

У меня есть следующая задача 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, и значение отладки изменилось на false, поэтому я предполагаю, что мне не хватает некоторых параметров в аргументах aspnet_compiler.exe, но я не могу найти ничего, что указывает на это в документации.

1 Ответ

2 голосов
/ 11 марта 2011

Компилятор aspnet_compiler может определить разницу между отладкой и «розничной» компиляцией, используя значение web.config, но условные выражения обычно передаются компилятору в качестве аргумента (см. this ) независимо от того, что движет сборка (например, 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.

...