2

我的解决方案包括这两个项目:

  • 我的命名空间.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)

4

5 回答 5

2

您可能在 VS 中可以选择“复制本地”,这是隐含的,嗯,在构建之前将其复制到本地。您需要在 NAnt 中进行模拟。

类似于您可以从 Visual Studio 为 Web 项目执行“发布”的原因,但对于命令行,您必须构建然后将输出复制到您要去的任何地方。

于 2008-11-12T18:40:52.783 回答
1

我之前在 NantContrib 中使用过 MSBuild 任务,它似乎将库 dll 复制到 bin 文件夹中。当然,这并不能真正解释为什么你的方法不起作用,但我假设你的目标是让它构建,而不是弄清楚为什么它不会构建

于 2008-11-12T18:35:39.173 回答
0

在我从事的一些工作中,我求助于使用 NAnt 的复制任务将 DLL 复制到 bin 目录中,以便构建项目。我不知道这是否一定是最佳实践,但它确实有效。

于 2008-11-06T22:03:24.840 回答
0

我同意科里的观点。由于您正在使用 msbuild,因此您需要确保将任何第 3 方(您的或其他方的)dll 复制到您的 bin 或输出文件夹中。

在运行任务之前,您可以使用任务在 nant 中执行此操作。那么一切都应该没问题。

唯一的问题是您必须知道在 msbuild 任务运行之前将其放在哪里,因此您可能必须首先创建文件夹结构并希望 msbuild 不会将其清除。

希望有帮助。

于 2009-02-12T22:22:03.980 回答
0

我有一个类似的问题。我通过明确添加解决了这个问题

<私人>真实</私人>

在 .csproj 文件中的引用中,它应该强制复制本地。

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\lib\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>
于 2015-12-02T18:15:35.673 回答