Không thể tải tập tin hoặc lắp ráp hoặc một trong các phụ thuộc của nó


238

Tôi có một vấn đề khác "Không thể tải tập tin hoặc lắp ráp hoặc một trong các vấn đề phụ thuộc của nó".

Thông tin bổ sung: Không thể tải tệp hoặc tập hợp 'Microsoft.Practices.Unity, Version = 1.2.0.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040)

Tôi không biết điều gì gây ra điều này hoặc làm thế nào tôi có thể gỡ lỗi nó để tìm ra nguyên nhân.

Tôi đã thực hiện tìm kiếm trong danh mục giải pháp của mình .csproj tệp và mọi nơi tôi có Unity tôi có:

Bao gồm tài liệu tham khảo = "Microsoft.Practices.Unity, Version = 2.0.414.0, Culture = trung tính, PublicKeyToken = 31bf3856ad364e35, bộ xử lýArch architecture = MSIL"

Không thể tìm thấy bất kỳ tài liệu tham khảo nào đi ngược lại 1.2.0.0 trong bất kỳ dự án nào của tôi.

Bất cứ ý tưởng làm thế nào tôi nên đi về giải quyết điều này?

Tôi cũng sẽ đánh giá cao các mẹo về cách gỡ lỗi các vấn đề như thế này nói chung.


1
Bất kỳ hội đồng tham chiếu nào của bạn có thể sử dụng một số nội dung trong Unitythư viện cũ ?
cơn bão

3
Có lẽ ... nhưng làm thế nào tôi có thể tìm thấy hội đồng nào? Tôi có rất nhiều dự án trong giải pháp của mình và rất nhiều nghi phạm tiềm năng ... bản dùng thử và lỗi bruteforce có vẻ hơi vô vọng ...
ronag

3
Đây không phải là tài liệu tham khảo lắp ráp, bạn tham khảo phiên bản 2.0. Nhưng trong thời gian chạy, CLR đang tìm 1.2, một phiên bản cũ. Nếu bạn không thấy DLL cũ đó trong thư mục bản dựng của mình thì hãy sử dụng Fuslogvw.exe để tìm hiểu làm thế nào CLR tìm thấy bản sao cũ này.
Hans Passant

2
Nhìn vào thư mục bin của dự án của bạn và xem liệu dll của dự án của bạn có mâu thuẫn trong tên của nó không. Chỉ cần xóa cái đó và sau đó xây dựng lại giải pháp của bạn. Điều đó làm việc cho tôi.
coggicc

11
"Hoặc một trong những phụ thuộc của nó" là phần thực sự làm tôi khó chịu. Nếu nó không thể tải "một trong các phụ thuộc của nó" thì lỗi sẽ cho biết "một trong các phụ thuộc của nó" không thể được tải. Hình thức hiện tại là vô dụng, cũng có thể nói không thể tải điều gì
Paul McCarthy

Câu trả lời:


116
  1. Kiểm tra xem bạn đang tham khảo một hội đồng mà lần lượt tham chiếu một phiên bản cũ của sự thống nhất. Ví dụ: giả sử bạn có một hội đồng được gọi là ServiceLocator.dllphiên bản cũ của hội đồng Unity, bây giờ khi bạn tham chiếu, ServiceLocatorbạn nên cung cấp cho phiên bản cũ của Unity và điều đó gây ra sự cố.

  2. Có thể là thư mục đầu ra nơi tất cả các dự án xây dựng hội đồng của chúng, có một phiên bản thống nhất cũ.

Bạn có thể sử dụng FusLogVw để tìm ra ai đang tải các hội đồng cũ, chỉ cần xác định đường dẫn cho nhật ký và chạy giải pháp của bạn, sau đó kiểm tra (trong FusLogvw) dòng đầu tiên nơi lắp ráp Unity được tải, nhấp đúp vào nó và xem cuộc gọi lắp ráp, và ở đây bạn đi.


6
Tệp nhật ký của FuseLogVw ở đâu
Stiger

1
Để tránh phải tìm tệp nhật ký, bạn có thể chỉ định đường dẫn nhật ký tùy chỉnh: Cài đặt, chọn hộp kiểm Bật đường dẫn nhật ký tùy chỉnh, nhập đường dẫn nhật ký tùy chỉnh, làm mới.
RedGreenCode

82

Mở trình quản lý IIS

Chọn nhóm ứng dụng

sau đó chọn nhóm bạn đang sử dụng

đi tới cài đặt nâng cao (ở bên phải)

Thay đổi cờ của ứng dụng Bật 32 bit thành sai.


IIS -> chọn từng ApplicationPool -> Cài đặt cơ bản -> kiểm tra xem khung mới nhất có được chọn trong danh sách thả xuống "Phiên bản .NET Framework" không
Martin

Bạn cũng có thể nhấp chuột phải vào dự án của bạn trong VS. và xóa dấu kiểm 32 bit ưa thích
eran otzap

Cảm ơn. Nó đã làm việc. Vâng, nó đã đúng trong trường hợp của tôi, chỉ để thử. Tôi đã làm cho nó sai và nó hoạt động.
meekash55

Khi tôi hợp nhất một dự án từ 1 máy chủ này sang máy chủ khác, cờ này thực sự lại sai, cảm ơn vì giải pháp!
Giải pháp Appsum

68

Đối với tôi, không có giải pháp nào khác hoạt động (bao gồm cả chiến lược làm sạch / xây dựng lại). Tôi tìm thấy một giải pháp khắc phục khác là đóng và mở lại Visual Studio .

Tôi đoán điều này buộc Visual Studio phải tải lại giải pháp và tất cả các dự án, kiểm tra lại các phụ thuộc trong quy trình.


33
Nếu bạn không tin rằng nó sẽ hoạt động, ít nhất hãy thử. Tôi không thể tin điều đó cho đến khi tôi làm.
Ben Cull

3
Làm việc cho tôi
Devidas M Das

48

Cố gắng làm sạch các thư mục Gỡ lỗi và Phát hành trong giải pháp của bạn. Sau đó loại bỏ và thêm sự thống nhất một lần nữa.


3
Vấn đề này có thể được gây ra bởi rất nhiều điều ... giải pháp của bạn đã giải quyết vấn đề của tôi và cũng có thể giải quyết những vấn đề khác.
Scott Rippey

1
@ScottRippey Điều này làm việc cho tôi. Trước tiên tôi đã xóa tất cả các tệp .pdb và sau đó tải lại dự án của mình và xây dựng lại nó.
botenvouwer

21

Ở mức 99%, không thể tải tập tin hoặc lắp ráp hoặc một trong những vấn đề phụ thuộc của nó là do phụ thuộc! Tôi đề nghị bạn làm theo các bước này:

  1. Tải xuống Walker Dependency từ http://www.dependencywalker.com/

  2. Khởi chạy Dependency Walker và mở dll (trong trường hợp của tôi NativeInterfaces.dll)

  3. Bạn có thể thấy một hoặc nhiều dll với lỗi màu đỏ Mở tệp ...

  4. Nó có nghĩa là dll này bị thiếu trong hệ thống của bạn; trong trường hợp của tôi tên dll làMSVCR71.DLL

  5. Bạn có thể tải xuống dll từ google và sao chép đúng đường dẫn (trong trường hợp của tôi c:\windows\system32)

  6. Tại thời điểm này, bạn phải đăng ký dll mới trong GAC (Global hội Cache): mở một thiết bị đầu cuối DOS và viết:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. Khởi động lại ứng dụng của bạn!


22
Deperency walker rất tuyệt, nhưng sao chép các DLL ngẫu nhiên từ internet sang Windows thì ... kém tuyệt vời hơn. Tốt hơn hết là cố gắng tìm trình cài đặt cung cấp các dll đó.
RJFalconer

Tôi đã API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLLtìm thấy một vài tệp ( ) và dẫn tôi đến câu hỏi stackoverflow này . Về cơ bản, hãy nhớ rằng có thể đang nhìn vào dương tính giả cho một số tệp, liên kết cung cấp chi tiết hơn.
cheriejw

16

Thư viện Microsoft Enterprise (được tham chiếu bởi .NetTiers) là vấn đề của chúng tôi, đến lượt nó tham chiếu một phiên bản cũ hơn của Unity. Để giải quyết vấn đề, chúng tôi đã sử dụng chuyển hướng ràng buộc sau trong web.config:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Ngoài ra, bạn có thể muốn cập nhật Thư viện doanh nghiệp lên phiên bản mới nhất.


16

Sau đây làm việc cho tôi.

  • Xóa các tệp tạm thời C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Các tệp ASP.NET tạm thời
  • Đóng VSTS và mở lại
  • Xóa và thêm các DLL giống nhau (Lưu ý: bạn thêm các phiên bản phù hợp)

15

Kiểm tra tệp Web.config / App.config trong dự án của bạn. Xem các số phiên bản là chính xác.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

Điều này làm việc cho tôi.


2
Điều này làm việc cho tôi mặc dù đó là web.config, không phải app.config
samneric

15

Mặc dù câu hỏi ban đầu được đăng năm năm trước, vấn đề vẫn tồn tại và khá khó chịu.

Giải pháp chung là phân tích kỹ lưỡng tất cả các hội đồng tham chiếu để hiểu những gì đang xảy ra. Để thực hiện công việc này dễ dàng hơn, tôi đã tạo một công cụ (tiện ích mở rộng Visual Studio) cho phép chọn cụm .NET ( tệp .dllhoặc .exetệp) để lấy biểu đồ của tất cả các cụm được tham chiếu trong khi làm nổi bật các tham chiếu bị xung đột hoặc thiếu.

Công cụ có sẵn trong Visual Studio Gallery: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

Ví dụ về đầu ra: nhập mô tả hình ảnh ở đây


Không hoạt động với các phiên bản Cộng đồng của Visual Studio
Draex_

Tôi tin rằng nên có một vấn đề khác, không liên quan đến phiên bản Visual Studio. Tôi đã thử nghiệm tiện ích mở rộng trên phiên bản Cộng đồng VS 2017 và VS 2015. Trên thực tế, nó được phát triển bởi phiên bản Cộng đồng VS 2017.
marss19

Aha. Bạn có cài đặt tiện ích mở rộng nào khác không? Trang này nói rằng DGML không được hỗ trợ trong Cộng đồng VS: msdn.microsoft.com/en-us/l
Library / hh871439.aspx#VersionSupport

1
Không có công cụ kiến ​​trúc nào trong phiên bản Cộng đồng nhưng bản thân trình soạn thảo DGML có sẵn. Bạn có thể cài đặt nó bằng cách chọn "Cài đặt trình soạn thảo DGML" trong "Các thành phần riêng lẻ" -> "Công cụ mã" thông qua Trình cài đặt Visual Studio -> Sửa đổi
marss19

11

ảnh chụp màn hìnhTrong trình khám phá giải pháp, nhấp chuột phải vào dự án (không phải giải pháp), trong tab xây dựng, chọn mục tiêu Nền tảng: "Bất kỳ CPU".


Sau khi kiểm tra nhóm ứng dụng, "Kích hoạt ứng dụng 32 bit" được đặt thành Sai, nhưng mục tiêu nền tảng của tôi là x86. Thay đổi nó thành bất kỳ CPU HOẶC x64 đã khắc phục sự cố của tôi.
Keith Ketterer

11

Câu trả lời của Juntos là đúng nhưng bạn cũng nên xem xét:

Cho sự hiệp nhất v2.1.505.2 khác nhau AssemblyVersionAssemblyFileVersion thuộc tính được quy định:

nhập mô tả hình ảnh ở đây

Hội đồngFileVersion được NuGet sử dụng nhưng CLR không quan tâm đến nó! CLR sẽ chỉ sử dụng AssociationVersion !

Vì vậy, các chuyển hướng của bạn nên được áp dụng cho một phiên bản được chỉ định trong thuộc tính Lắp ráp . Vì vậy, nên sử dụng 2.1.505.0

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

Xem thêm: Sự khác biệt giữa Hội đồngVersion, Hội đồng hội thảo và Hội nghị Thông tin là gì?


6

Tôi cũng gặp phải lỗi khủng khiếp này và tìm ra giải pháp cho việc này ...

  1. Nhấp chuột phải vào tên Giải pháp
  2. Nhấp vào Giải pháp sạch
  3. Khởi động lại Visual Studio
  4. Thuộc tính dự án Goto >> Xây dựng
  5. Thay đổi cấu hình để phát hành
  6. Bắt đầu gỡ lỗi (F5)

1), 2)

Nhấp chuột phải vào tên Giải pháp

4), 5)

Thay đổi cấu hình để phát hành

Hy vọng điều này sẽ giúp bạn cũng.


5
  • Goto: Giải pháp -> Gói
  • Nhấp vào Tab Nâng cao (Tìm bên dưới trang)
  • Thêm dll của bạn vào các hội đồng bổ sung (theo cách này chúng ta có thể thêm các dll bên ngoài trong sharepoint).

7
Tôi không có "Giải pháp -> Gói" trong dự án VS2010 của mình
Muflix

5

Không chắc chắn nếu điều này có thể giúp đỡ.

Kiểm tra xem tên hội và không gian tên mặc định trong các phần phù hợp trong asemblies của bạn có khớp không. Điều này giải quyết vấn đề của tôi dẫn đến lỗi tương tự.


Thông minh! Tên tệp dll của tôi và không gian tên là khác nhau, tôi đã sao chép không gian tên và đổi tên thành dll của tôi.
Khan bất thường

5

Trong trường hợp của tôi trong thư mục bin là một dll không tham chiếu có tên là Unity.MVC3, tôi đã cố gắng tìm kiếm bất kỳ tham chiếu nào trong phần này trong studio trực quan, vì vậy giải pháp của tôi rất dễ dàng như xóa dll đó khỏi thư mục bin.


4

Cảm ơn Riddhi M. Sau đây đã làm việc cho tôi.

Xóa các tệp tạm thời C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Các tệp ASP.NET tạm thời Đóng VSTS và mở lại Xóa và thêm cùng một DLL (Lưu ý: bạn thêm các phiên bản phù hợp)


Đã dành quá lâu cho điều này và tôi không thể tin rằng đây là câu trả lời. Đó thường là giải pháp tốt khi bạn thấy một số hành vi kỳ quặc trong VS. Cảm ơn bạn.
Bonez024

3

Bạn nói rằng bạn có rất nhiều dự án trong giải pháp của mình ... tốt, hãy bắt đầu với một dự án gần đầu của lệnh xây dựng. Lấy cái đó để xây dựng và một khi bạn tìm ra nó, bạn có thể áp dụng cùng một bản sửa lỗi cho phần còn lại của chúng.

Thành thật mà nói, có lẽ bạn chỉ cần làm mới tài liệu tham khảo của bạn. Có vẻ như bạn đã cập nhật phiên bản của mình và không cập nhật các tài liệu tham khảo hoặc đó là sự cố đường dẫn tương đối nếu bạn giữ giải pháp của mình trong kiểm soát nguồn. Chỉ cần xác minh các giả định của bạn và thêm lại tài liệu tham khảo.


3

Sau đây làm việc cho tôi.

  • Xóa các tệp tạm thời C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Các tệp ASP.NET tạm thời
    • sau đó nhấp chuột phải vào Tệp Asp.net tạm thời> thuộc tính> bảo mật và cấp quyền truy cập toàn quyền vào IIS và cho tất cả người dùng đang chạy dự án của tôi


3

Tôi đã có cùng một vấn đề tôi đã giải quyết nó thông qua các hướng dẫn dưới đây:

  1. mở menu công cụ và chọn tùy chọn
  2. trong tùy chọn, cửa sổ đi đến Dự án và Giải pháp / Dự án web
  3. kiểm tra use the 64bit version of IIS ...

nhập mô tả hình ảnh ở đây


2

Bạn phải xóa tệp appname.dll khỏi thư mục đầu ra của bạn. Dọn dẹp thư mục gỡ lỗi và phát hành. Xây dựng lại và sao chép vào thư mục đầu ra tái tạo tập tin dll.


2

Tôi "Đặt làm Dự án khởi động" thư viện / dự án chưa tải / chưa hoàn thành.

Sau đó triển khai nó.

Nó đã làm việc!

Tôi nghĩ rằng nó không thể tìm thấy lúc đầu vì nó không có trong hội đồng.


2

Một nguyên nhân có thể khác: đảm bảo rằng bạn đã vô tình đặt cho cả hai dự án cùng tên lắp ráp trong thuộc tính dự án.


Điều này khiến tôi mất hàng giờ để tìm ra .... Tôi vô tình đặt tên cho dự án thử nghiệm đơn vị của mình cùng tên với dự án chính, vì vậy, dự án thử nghiệm đơn vị phải ghi đè lên dll dự án
Iannazzi

2

Giải pháp của tôi cho .NET 4.0, sử dụng Enterprise Library 5, là thêm một tham chiếu đến:

Microsoft.Practices.Unity.Interception.dll


2

Xem ra cho các tài liệu tham khảo xung đột. Ngay cả sau khi làm sạch và xây dựng lại, các tài liệu tham khảo mâu thuẫn vẫn sẽ gây ra vấn đề. Vấn đề của tôi là giữa AForge và Accord. Tôi đã xóa cả hai tài liệu tham khảo và thêm lại các tài liệu tham khảo chọn lại tài liệu tham khảo cụ thể (cụ thể cho trường hợp của tôi, chỉ Accord).


2

Đối với tôi, việc xây dựng lại trò chơi đoàn kết mà không có Unity C # Proects Checkmark hoạt động.


2

Trong trường hợp của tôi, không có câu trả lời đề xuất nào làm việc.

Đây là những gì làm việc cho tôi:

  1. Xóa tham chiếu
  2. Đổi tên DLL
  3. Nhập lại tài liệu tham khảo

Bước thứ hai rõ ràng là quan trọng vì nó không hoạt động mà không có nó.


2

Hãy thử kiểm tra xem thuộc tính "Sao chép vào cục bộ" cho tham chiếu có được đặt thành đúng không và phiên bản cụ thể được đặt thành đúng. Điều này có liên quan đến các ứng dụng trong Visual Studio.


2

Tôi đã có điều này ngày hôm nay, và trong trường hợp của tôi, vấn đề rất kỳ lạ:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

Lưu ý các ký tự đi lạc ở cuối XML - bằng cách nào đó, các ký tự đã được chuyển từ số phiên bản sang cuối khối XML này!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

Thay đổi ở trên và thì đấy! Mọi thứ hoạt động trở lại.


1

nếu bạn nhận được thông báo lỗi này bằng cách mở một ứng dụng trên windows xp, điều đó có nghĩa là trước tiên bạn đã cài đặt ứng dụng đó do ứng dụng không hoạt động mà không có khung mạng 4 và gói dịch vụ 3. bạn đã cài đặt cả hai lần nữa và bạn đang gặp phải lỗi này, vì vậy bạn nên cài đặt lại ứng dụng đó nhưng trước tiên hãy gỡ cài đặt từ thêm và xóa

Nếu nó không hoạt động xin đừng lạm dụng tôi. tôi cũng là đàn em

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.