Gói Microsoft.Bcl.Build NuGet làm được gì?


82

Tôi không thể tìm thấy bất kỳ tài liệu nào về vấn đề này - các liên kết từ trang Microsoft.Bcl.Build Nuget không cung cấp nhiều trợ giúp:

Gói này cung cấp các thành phần cơ sở hạ tầng xây dựng để các dự án tham chiếu đến các gói cụ thể của Microsoft có thể xây dựng thành công.

Không tham chiếu trực tiếp các gói này trừ khi bạn nhận được cảnh báo xây dựng hướng dẫn bạn thêm tham chiếu.

Khi nhìn vào Microsoft.Bcl.Build.targetstệp, có vẻ như nó quản lý các chuyển hướng ràng buộc và tham chiếu gói. Có vẻ như một số chức năng này chỉ được sử dụng khi chạy trong Visual Studio.

Bất cứ ai có thể cung cấp thêm bất kỳ thông tin về những gì gói này làm? Đó là một khó khăn trong môi trường máy chủ xây dựng của chúng tôi , có thể bỏ qua nó khi xây dựng hoàn toàn từ mã nguồn (ví dụ: xây dựng môi trường máy chủ)?

Câu trả lời:


26

Nhìn vào Microsoft.Bcl.Build.targets, nó có một loạt các mục tiêu cấu hình dự án, ví dụ:

  • EnsureBindingRedirects - Xác định tham chiếu nào được chọn tham gia cho chuyển hướng ràng buộc và cập nhật app.config với chúng
  • BclBuildValidateNugetPackageReferences - Mục tiêu này xác nhận rằng bất kỳ gói Nuget nào được cài đặt trong dự án hiện tại cũng có các phụ thuộc của chúng (phụ thuộc bắc cầu) được cài đặt trong dự án hiện tại.

Vì vậy, dựa trên đánh giá này, tôi quyết định rằng chức năng này chỉ cần thiết trong môi trường nhà phát triển, khi thêm / xóa / cập nhật các phụ thuộc NuGet; và nó có thể bị bỏ qua trong môi trường CI, nơi nó gây ra sự cố.

Vì vậy, tôi muốn giữ sự phụ thuộc trong các tệp * .csproj của mình, nhưng bỏ qua nó khi chạy bản dựng CI. Tôi đã làm điều đó bằng cách thêm nhập có điều kiện vào tệp mục tiêu môi trường xây dựng (ví dụ: builder.targets), bao gồm khối này:

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. -->
<PropertyGroup>
  <BclBuildImported>Ignore</BclBuildImported>
</PropertyGroup>

Điều này có tác dụng thực sự là bỏ qua các mục tiêu trong môi trường CI, nhưng kích hoạt chúng trong môi trường phát triển. Tôi đã chạy nó trong hơn một tuần và không có vấn đề gì cho đến nay ...

Tôi vẫn muốn biết nếu có ai có thông tin tốt hơn về gói này cho biết rằng làm điều này là một ý tưởng tồi. Cho đến nay, tôi cho rằng đó là một ý kiến ​​hay.

Chỉnh sửa 2018-02-01:

Lưu ý rằng tham số bỏ qua cũng có thể được truyền trên dòng lệnh, để bỏ qua Microsoft.Bcl.Build.targetslogic:

msbuild (targets, etc) /p:BclBuildImported=Ignore

Tôi chưa hiểu rõ lắm So I want to keep the dependency in my *.csproj files, but ignore it. I did that by adding a conditional import on a build environment targets file (eg builder.targets), bạn có thể nói rõ hơn được không?
JobaDiniz

Tôi cần giữ tham chiếu dự án tới Microsoft.Bcl.Build để nó có thể được sử dụng trong quá trình phát triển / trong Visual Studio. Logic chạy trong quá trình cập nhật phụ thuộc. Nhưng tôi muốn vô hiệu hóa nó trong quá trình xây dựng máy chủ do sự cố khi chạy nó trên máy chủ xây dựng.
crimbo

1
Để được rõ ràng hơn về cách kiểm tra này, sau đây là một ví dụ về những gì tôi thêm vào <Target> và <Import> mục: Đối với <Target>: Condition="$(BclBuildImported) != 'Ignore'"và cho <Import>:Condition="$(BclBuildImported) != 'Ignore' And Exists('$(SolutionDir)\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')"
Auri Rahimzadeh

Tôi cũng thấy đây là một điều ngớ ngẩn còn sót lại từ mã kế thừa của tôi yêu cầu .nuget \ something.targets
Auri Rahimzadeh

15

Về cơ bản nó là một cách để các gói cũ nhắm mục tiêu .Net cũ hơn để xây dựng và biên dịch mà không gặp vấn đề gì trên .Net mới

Nếu bạn truy cập http://blogs.msdn.com/b/bclteam/p/bclbuild.aspx, bạn sẽ thấy hai thông báo liên kết đến https://devblogs.microsoft.com/dotnet/pcl-and-net-nuget- thư viện-are-now-enable-for-xamarin /https://devblogs.microsoft.com/dotnet/improved-package-restore/ sẽ giải thích điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.