2012-09-24 145 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> 

並將它放在關閉根項目元素之前。

相關問題