Мое решение включает в себя следующие два проекта:
- MyNamespace.Web.UI
- MyNamespace.Web.Core
Пользовательский интерфейс ссылается на Core, а Core ссылается на Foobar.dll, который существует нигде, кроме моей библиотеки. При сборке из Visual Studio 2008 Foobar.dll находится в папке 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. Я также попытался удалить ключ / m из сценария NAnt. Тот же результат.
Есть несколько других dll, на которые ссылаются в Core, а не в UI, и они появляются в Bin, как и ожидалось после сборки NAnt.
Мой обходной путь - ссылаться на Foobar.dll в проекте пользовательского интерфейса, но меня это немного тошнит. Есть идеи, что может вызвать это?
(Между прочим, Foobar.dll на самом деле является NHibernate.ProxyGenerators.CastleDynamicProxy.dll)