私のソリューションには、次の 2 つのプロジェクトが含まれます。
- MyNamespace.Web.UI
- MyNamespace.Web.Core
UI は Core を参照し、Core は私のライブラリ以外には存在しない Foobar.dll を参照します。Visual Studio 2008 からビルドすると、予想どおり Foobar.dll が UI プロジェクトの Bin フォルダーにあります。ビルド前に存在しないことを確認しました。
しかし、NAnt からビルドするとそこにないため、ランタイム例外が発生します。NAnt タスクは次のようになります。
<target name="compile" depends="init">
<exec program="${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe"
commandline="${solution.file} /m /t:Clean /p:Configuration=${project.config} /v:q" workingdir="." />
<exec program="${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe"
commandline="${solution.file} /m /t:Rebuild /p:Configuration=${project.config} /v:q" workingdir="." />
</target>
VSでは、リリースモードとデバッグモードなどですべてをビルド、再構築、再構築しようとしましたが、常に同じです。Foobar.dll は Bin フォルダーにあります。NAnt ではそうではありません。また、NAnt スクリプトから /m スイッチを削除しようとしました。同じ結果です。
UI ではなく Core で参照される他の dll がいくつかあり、NAnt ビルド後に予想どおり Bin に表示されます。
私の回避策は、UI プロジェクトで Foobar.dll を参照することですが、それでは少しうんざりします。何がこれを引き起こす可能性がありますか?
(ちなみに、Foobar.dll は実際には NHibernate.ProxyGenerators.CastleDynamicProxy.dll です)