2013-06-04 33 views
41

tôi đã tự hỏi tại sao NuGet thêm đoạn mã sau vào ứng dụng của tôi app.config tập tin, sau khi cài đặt Microsoft.Bcl.Async:Tại sao một "bindingRedirect" được thêm vào tệp app.config sau khi thêm gói Microsoft.Bcl.Async?

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

Nếu tôi loại bỏ điều này XML-yếu tố từ cấu hình, ứng dụng sẽ không hoạt động đúng. Theo như tôi hiểu, chúng tôi có thể sử dụng bindingRedirect để làm cho ứng dụng tải phiên bản mới hơn hoặc cũ hơn của một hội đồng trong trường hợp phiên bản chúng tôi đang sử dụng khi biên dịch EXE đã biến mất.
Tuy nhiên tôi đang sử dụng chính xác phiên bản 2.5.19.0, tại sao tôi cần chuyển hướng?

the version of my dll

Tại sao Tôi cần bindingRedirect này?

Trả lời

36

Các hội đồng Microsoft.Threading.TasksMicrosoft.Threading.Tasks.Extensions vẫn đang tham chiếu v1.5.11.0 của System.RuntimeSystem.Threading.Tasks.

Nếu không có bindingRedirect, hội đồng Microsoft.* sẽ cố gắng tải phiên bản cũ của cụm System.*, điều này sẽ không thành công.

+1

Tôi có tình huống tương tự, nơi hội đồng được chuyển hướng không được sử dụng ở nơi nào khác, nhưng vẫn còn cần sự ràng buộc ràng buộc? - hoặc tôi có thể khẳng định rằng nếu phiên bản cũ của hội đồng không được tham chiếu ở bất cứ nơi nào thì không cần phải có sự ràng buộc ràng buộc. – zinking

4

Bạn chỉ đơn giản là đang nói đến bất cứ khi nào có phiên bản cũ đó là giữa 0.0.0.0 để 2.5.19.0, hãy thay thế phiên bản đó với phiên bản mới đó là 2.5.19.0

Hãy nói rằng bạn không có phiên bản cũ hơn trong dự án của bạn và bạn đang cố gắng truy cập vào nó, sau đó bạn sẽ gặp lỗi như "System.IO.FileLoadException: 'Không thể tải tệp hoặc lắp ráp"

Vì vậy, khi dự án đang tìm kiếm một phiên bản cũ hơn của DLL đó, nó sẽ chỉ thay thế thứ mới có sẵn

Các vấn đề liên quan