2012-09-24 8 views
10

Tôi có một dự án ứng dụng web tham chiếu đến một hội đồng của bên thứ ba, sử dụng một số dll gốc mà nó cần tìm trong thời gian chạy. Vì lý do đó, tôi muốn thêm các dll này vào thư mục bin của dự án, để chúng có thể được tìm thấy.Buộc các tệp bên ngoài được sao chép vào thư mục bin khi xuất bản

Tuy nhiên, nếu tôi thêm tệp vào dự án trong/bin /, hãy chọn "sao chép sang đầu ra", các tệp được biên soạn và xuất bản vào/bin/bin. Thêm chúng vào thư mục gốc hoạt động, nhưng khó có thể là giải pháp đúng.

Thêm chúng để xây dựng mục tiêu "AfterBuild" không có tác dụng khi xuất bản (ví dụ "xây dựng gói triển khai")

Nó cũng có để làm việc khi xây dựng các giải pháp qua TFS, nơi mà các mục tiêu _CopyWebApplicationLegacy MSBuild được gọi.

Trả lời

7

Giải pháp là một sự kết hợp của những điều tôi đã cố gắng đã:

  • Bao gồm "Bin" thư mục trong dự án
  • Thêm các tập tin cần thiết (tôi đã thêm chúng như là một liên kết do sự phát triển của chúng tôi cấu trúc)
  • Đặt thuộc tính sau: "Xây dựng Action = Nội dung" và "Sao chép vào Output = Không Sao chép"

các file đang sao chép vào thư mục bin khi xuất bản, ngay cả khi việc tự động hóa các bản dựng trên TFS.

Thành phần cần thiết này là GdPicture, sử dụng một vài tệp DLL gốc trong thời gian chạy.

+0

Giải pháp đơn giản nhất, sạch nhất. – AnthonyVO

+2

Bao gồm thư mục Bin trong điều khiển nguồn sẽ làm cho việc đăng ký không cần thiết – Catherine

+7

Thư mục bin không bao giờ là một phần của giải pháp. Nó chỉ là một thư mục đầu ra. Nếu bạn sử dụng các trường hợp thử nghiệm, TFS, vv thư mục đầu ra sẽ được chuyển hướng. Đặt tùy chọn thành "không sao chép" sẽ dẫn đến việc thiếu các hội đồng. Xin lỗi để nói: "Ý tưởng tồi" – Fried

2

Thông thường có thư mục lib trong giải pháp hoặc không gian làm việc của bạn để đưa các tệp bên thứ ba của bạn vào bên trong. Sau đó, bạn sẽ thêm một tham chiếu đến vị trí này từ dự án của bạn và đảm bảo vị trí này nằm dưới sự kiểm soát nguồn.

Bạn cũng có thể xem sử dụng NuGet để gói gói này cho bạn, sử dụng thư mục gói cấp giải pháp tự động.

+0

cách này giúp tôi với lắp ráp bên ngoài phải tìm những tệp này? –

+0

@Alex nếu bạn có các tệp này được tham chiếu trong dự án của bạn, nó sẽ tìm thấy chúng. Bạn có thể chỉ định những thư viện này là? – dove

+0

Chúng là các dll gốc (C++ tôi đoán), và do đó không thể được thêm làm tham chiếu bình thường. Các hội đồng tham chiếu, GdPicture, truy cập chúng trong thời gian chạy. –

0

Dựa trên bài viết này http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx. Có thể xác định mục tiêu msbuild thành tệp dự án chính (mới nhất để xây dựng giải pháp) sẽ nắm bắt tất cả các tệp của thư mục bin. Như thế này

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

Và đặt nó trước khi đóng phần tử dự án gốc.