强制外部文件在发布时复制到bin文件夹

时间:2012-09-24 10:01:32

标签: asp.net .net msbuild web-application-project

我有一个引用第三方程序集的Web应用程序项目,后者又使用了一些在运行时需要查找的本机dll。 因此,我想将这些dll添加到项目的bin文件夹中,这样就可以找到它们。

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

将它们添加到构建目标“AfterBuild”在发布时无效(例如“构建部署包”)

在通过TFS构建解决方案时,它也必须工作,其中调用了MSBuild目标_CopyWebApplicationLegacy。

3 个答案:

答案 0 :(得分:9)

解决方案是我已经尝试过的事情的组合:

  • 在项目中包含“Bin”文件夹
  • 添加所需的文件(由于我们的开发结构,我将它们添加为链接)
  • 设置以下属性:“构建操作=内容”和“复制到输出=不复制”

现在,文件会在发布时复制到bin文件夹,即使在TFS上自动构建时也是如此。

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

答案 1 :(得分:3)

在您的解决方案或工作区中都有一个 lib 文件夹,可以将您的第三方dll放入其中。然后,您将从项目中添加对此位置的引用,并确保此位置受源代码管理。

您还可以使用NuGet为您打包,它会自动使用解决方案级别的包文件夹。

答案 2 :(得分: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>

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