2012-09-24 217 views
10

我有一个引用第三方程序集的Web应用程序项目,该程序又使用它需要在运行时查找的一些本机dll。 因此,我想将这些DLL添加到项目的bin文件夹中,以便它们一定可以找到。强制将外部文件复制到bin文件夹发布时

但是,如果我将文件添加到/ bin /中的项目中,选择“复制到输出”,这些文件将被编译并发布到/ bin/bin中。将它们添加到根文件夹可行,但几乎不可能是正确的解决方案。

它们添加到构建目标“AfterBuild”发布时没有效果(例如,“构建部署包”)

它还具有通过TFS,其中所述的MSBuild目标_CopyWebApplicationLegacy被调用构建解决方案时工作。

回答

7

的解决方案是的东西相结合,我已经试过:

  • 包括“斌”文件夹中的项目
  • 添加所需的文件,(我加他们为纽带,因为我们的发展结构)
  • 设置以下属性:“建设行动=内容”和“复制到输出=不要复制”

发布时,甚至当自动化的文件正在被复制到bin文件夹在TFS上构建。

需要它的组件是GdPicture,它在运行时使用了一对本机DLL。

+0

最干净,最简单的解决方案。 – AnthonyVO

+2

在源代码控制下包含Bin文件夹会导致不必要的检入 – Catherine

+7

bin文件夹不应该是解决方案的一部分。这只是一个输出文件夹。如果你使用测试用例,TFS等输出文件夹将被重定向。将选项设置为“不要复制”将导致缺少组件。对不起,说:“非常糟糕的想法” – Fried

2

通常在您的解决方案或工作区中有一个lib文件夹来放置第三方dll。然后,您会从项目中添加对此位置的引用,并确保此位置受源代码控制。

您也可以查看使用NuGet为您打包,它会自动使用解决方案级包文件夹。

+0

这是如何帮助我与外部程序集必须找到这些文件? –

+0

@Alex如果您的项目中引用了这些文件,它会找到它们。你能指定这些库是哪些? – dove

+0

它们是本机dll(我假设C++),因此不能作为正常参考添加。引用的程序集GdPicture在运行时访问它们。 –

0

基于这篇文章http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx。可以将msbuild目标定义为main(最新按照解决方案的构建顺序)项目文件,该文件将捕获bin文件夹的所有文件。像这样

<Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="$(OutDir)\**\*" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 
    </PropertyGroup> 

并将它放在关闭根项目元素之前。

相关问题