11

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

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

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

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

4

3 回答 3

10

解决方案是我已经尝试过的东西的组合:

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

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

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

于 2012-09-24T12:48:08.743 回答
3

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

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

于 2012-09-24T10:10:55.827 回答
0

基于这篇文章http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx。可以将 msbuild 目标定义到主项目文件中(按解决方案的构建顺序最新),该项目文件将捕获 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>

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

于 2017-07-13T13:29:13.143 回答