Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 通过NAnt vs Visual Studio生成-缺少一个dll_Visual Studio 2008_Dll_Msbuild_Nant_Reference - Fatal编程技术网

Visual studio 2008 通过NAnt vs Visual Studio生成-缺少一个dll

Visual studio 2008 通过NAnt vs Visual Studio生成-缺少一个dll,visual-studio-2008,dll,msbuild,nant,reference,Visual Studio 2008,Dll,Msbuild,Nant,Reference,我的解决方案包括以下两个项目: MyNamespace.Web.UI MyNamespace.Web.Core UI引用了Core,Core引用了Foobar.dll,除了我的库,它不存在任何地方。当我从Visual Studio 2008生成时,Foobar.dll如预期的那样位于UI项目的Bin文件夹中。我已经确定它在建造之前不在那里 但当我从NAnt构建时,它不在那里,这导致运行时异常。以下是NAnt任务的外观: <target name="compile" depends="i

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

  • 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脚本中删除/m开关。同样的结果

还有几个其他DLL在Core中引用,而不是在UI中引用,它们在NAnt构建之后按预期显示在Bin中

我的解决方法是在UI项目中引用Foobar.dll,但这让我有点恶心。你知道这是什么原因吗


(顺便说一句,Foobar.dll实际上是NHibernate.ProxyGenerators.CastleDynamicProxy.dll)

在我所做的一些事情中,我求助于使用NAnt将dll复制到bin目录中,以便项目能够生成。我不知道这是否一定是最佳实践,但它确实有效。

我以前在NantContrib中使用过MSBuild任务,它似乎将库DLL复制到bin文件夹中。诚然,这并不能真正解释为什么你的方法不起作用,但我假设你的目标是让它构建,而不是找出它不构建的原因。你可能在VS中有“复制本地”的选项,也就是隐式地在构建之前在本地复制它。你需要在南特模仿这一点


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

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

在运行任务之前,可以使用任务在nant中执行此操作。那么一切都会好起来的

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


希望能有所帮助。

我也遇到过类似的问题。我通过明确添加

真的

在.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>

假的
..\lib\Microsoft.Web.Infrastructure.1.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
真的