我的解决方案包括这两个项目:
- 我的命名空间.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 开关。结果相同。
在 Core 而不是 UI 中引用了其他几个 dll,它们在 NAnt 构建后按预期出现在 Bin 中。
我的解决方法是在 UI 项目中引用 Foobar.dll,但这让我有点恶心。知道什么会导致这种情况吗?
(顺便说一句,Foobar.dll 实际上是 NHibernate.ProxyGenerators.CastleDynamicProxy.dll)