2

私は次のナントタスクを持っています:

<!--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 の引数に設定が不足していると思いますが、ドキュメントでそのようなことを示すものを見つけることができません。

4

1 に答える 1

2

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 で他のデバッグ フラグを切り替えるときに、それも変更することを忘れないでください。

于 2011-03-11T16:51:38.197 に答える