2015-10-01 15 views
6

** Đây là một vấn đề trong Visual Studio 2013.Không thể biên dịch dự án do lỗi Fody. Không có gì với Fody (hoặc bất kỳ mã khác) đã được thay đổi

Các lỗi tôi nhận được là lớn và chủ yếu là vô dụng, nhưng mấu chốt của nó là

Error 130 Fody: Could not load 'ModuleWeaver' from 'PropertyChanged.Fody, Version=1.50.3.0, Culture=neutral, PublicKeyToken=null' due to ReflectionTypeLoadException. 
It is possible you need to update the package. 
exception.LoaderExceptions: 
System.IO.FileLoadException: Could not load file or assembly 'Mono.Cecil,  Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its  dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
File name: 'Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' 

Một lần nữa vì không có thay đổi, tôi không biết vấn đề của nó là gì. Các DLL nó đang tìm kiếm đang ngồi trong cùng một vị trí nó đã luôn luôn được ngồi.

Edit: rõ ràng vào thời điểm này nó đã mệt mỏi của phun ra lỗi đó để nó bịa đặt một cái mới

Error 42 The "Fody.WeavingTask" task failed unexpectedly. 
System.IO.FileNotFoundException: Could not load file or assembly 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. The system cannot find the file specified. 
File name: 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' 
    at ExceptionExtensions.LogException(ILogger logger, Exception exception) 
    at Processor.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\Processor.cs:line 56 
    at Fody.WeavingTask.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\WeavingTask.cs:line 44 
    at  Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() 

Chỉnh sửa 2:

Ngoài ra, lỗi là bị đang diễn ra bên trong "Fody. mục tiêu" trên dòng 50 đó là

<Fody.WeavingTask 
     AssemblyPath="@(IntermediateAssembly)" 
     IntermediateDir="$(IntermediateDir)" 
     KeyFilePath="$(FodyKeyFilePath)" 
     ProjectDirectory="$(ProjectDir)" 
     SolutionDir="$(FodySolutionDir)" 
     References="@(ReferencePath)" 
     SignAssembly="$(FodySignAssembly)" 
     ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)" 
     DefineConstants="$(DefineConstants)" 
    /> 

Sửa 3:

tôi đã xóa tất cả các tệp được liên kết với Fody và Nuget đã tải xuống chúng trong quá trình xây dựng. Các lỗi sau đó cũng giống như các lỗi 2:

"Error 42 The "Fody.WeavingTask" task failed unexpectedly." 

Sửa 4:

tôi thực sự hy vọng dev của Fody thấy điều này bởi vì chúng ta đang ở một bế tắc tuyệt đối cho đến khi điều này được cố định. Chúng tôi không thể "hoàn nguyên" trở lại khi nó hoạt động vì IS cấu hình hiện tại khi nó hoạt động.

+0

bạn có thể kiểm tra phiên bản của Mono.Cecil.dll, kích chuột phải vào thám hiểm, và đi qua các thuộc tính, bạn sẽ tìm số phiên bản. Kiểm tra xem đó là 0.9.6.0, nếu không bạn có thể cần chuyển hướng. – Jim

+0

Nó đang trỏ đến phiên bản chính xác. 0.9.6.0. – Justin

+0

Tôi thấy rằng tôi gặp vấn đề "Mono.Cecil" mà bạn đã đề cập ở trên nếu một trong các dự án của tôi trong giải pháp tham chiếu phiên bản cũ hơn của Fody và một dự án khác đã tham chiếu một Fody mới phụ thuộc vào phiên bản Mono.Cecil khác. Tôi đã xóa thông tin này bằng cách cập nhật tất cả các dự án sử dụng Fody lên phiên bản mới nhất từ ​​nuget và các vấn đề về xây dựng của tôi đã bị xóa. –

Trả lời

1

Để gỡ lỗi các vấn đề như vậy, bạn có thể sử dụng SysInternals Process Monitor.

Cách tiếp cận chung là:

  1. chạy Process Monitor
  2. áp dụng một bộ lọc để theo dõi bạn ứng dụng duy nhất
  3. mô phỏng vấn đề
  4. nhìn cho thiếu DLL. Phần này là một chút khó khăn, vì

    1. một vài lần DLL có thể không được tìm thấy ("không tìm thấy con đường")
    2. nhưng cuối cùng được tìm thấy ("Thành công")
    3. nó có thể không phải là DLL bạn đang tìm kiếm nhưng một sự phụ thuộc của DLL đó

    Vì vậy, bạn cần tìm một tệp DLL là không bao giờ tìm thấy. Và bạn không muốn các tệp DLL không tìm thấy nhưng sau đó được tìm thấy trong lần thử tiếp theo.

Vâng, quá trình đó có thể mất nhiều thời gian, vì vậy tôi đã phát triển công cụ Process Monitor Log Analyzer. Với nó, bạn sẽ có thể tìm ra thủ phạm trong thời gian ít hơn.

  1. Process chạy Monitor
  2. áp dụng một bộ lọc để theo dõi ứng dụng của bạn chỉ
  3. tạo lại lỗi
  4. lưu kết quả như XML (giữ tất cả các mặt hàng, "Con đường không tìm thấy" và "thành công")
  5. mở XML trong Trình phân tích nhật ký
  6. từ trên xuống dưới, kiểm tra sự hiện diện của các tệp DLL. Công cụ này sẽ chỉ hiển thị các tệp DLL không bao giờ được tìm thấy.

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của công cụ miễn phí đó, nếu điều đó không rõ ràng từ văn bản.

+0

Cảm ơn bạn đã trả lời. Tôi chỉ là một chút bối rối những gì bạn có nghĩa là chính xác bằng cách theo dõi ứng dụng của tôi. Bạn đang đề cập đến trình biên dịch của tôi? (VS 2013). Tôi không thể biên dịch ứng dụng của tôi nữa vì Fody. – Justin

+0

@Justin. Có, nếu nó là VS2013 mà không thể tìm thấy DLL, theo dõi VS2013 (devenv.exe). Tuy nhiên, VS 2013 có thể sử dụng một exe riêng biệt như trình biên dịch, sau đó theo dõi nó. Nếu bạn không biết, chỉ cần theo dõi mọi thứ và lọc sau. –

+0

Được rồi tôi sẽ phải chụp ảnh đó vào ngày mai vì tôi sẽ sớm đi làm. Cảm ơn một lần nữa. – Justin

11

Dường như lỗi của bạn thực sự đang tìm kiếm một lớp có tên là ModuleWeaver. Lớp này là một phần của gói Fody.

Chỉ cần cập nhật các gói trong nuget quản lý gói với:

update-package Fody -reinstall 

lẽ sẽ sửa chữa nó.

Nếu không, hãy đảm bảo rằng tệp app.config của bạn không có chuyển hướng không chính xác. Xóa phần này, xóa tất cả các chuyển hướng. Visual studio thường sẽ thêm những cái cần thiết trở lại.

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 

Hãy thử lại, nếu không thành công, hãy thử tìm cụm phụ thuộc nào bị lỗi. Bạn có thể viết ứng dụng dòng lệnh một dòng hoặc sử dụng LinqPad.

Bạn có thể thử LinqPad, nếu bạn chưa sử dụng, hãy dán mã này.

Assembly.LoadFile("path to Fody"); 
Assembly.LoadFile("path to Mono.Cecil"); 

Bạn sẽ nhận được ngoại lệ liệt kê chi tiết thư viện còn thiếu.

+0

Tôi đã không may bây giờ đã thử tất cả điều này và khi tải các hội đồng trong LinqPad tôi nhận được không có đầu ra ở tất cả (vì vậy tôi giả sử LinqPad là ít nhất là tải các hội đồng đúng). Tâm trí bạn, bây giờ các lỗi đã thay đổi để không thể tìm thấy "FodyIsolated" – Justin

+0

Nếu không có nhiều bối cảnh nó sẽ được khôn lanh. Lỗi của bạn dường như được tải mono.cecil nếu nó tải đúng trong linqpad từ cùng một thư mục thì vấn đề có thể sâu hơn. Nếu bạn đang sử dụng kiểm soát phiên bản, tôi sẽ thử kiểm tra một thư mục sạch và thử lại. Có một sự lắp ráp không khớp ở đâu đó. Tất cả chúng tôi đã ở đó, tôi sẽ rất muốn biết độ phân giải là gì. Tôi sẽ cố gắng và cung cấp thêm một số lời khuyên nếu tôi có thể nghĩ ra một thứ khác để thử. – Jim

+0

Thật không may khi cố gắng xây dựng trước đó đã không giúp đỡ. Tôi có thể thử nó từ một thư mục sạch sau này. Như bạn nói, một cái gì đó đã thực sự không đồng bộ, hoặc không khớp, trên cài đặt Windows/VS cài đặt của tôi. Tôi hiện đang "Sửa chữa" VS cài đặt của tôi, và có thể cố gắng để khôi phục lại Windows đến một hoặc hai ngày trước, để xem nếu điều đó đặt các hội đồng trở lại cách họ nên được. Tôi chắc chắn sẽ đăng giải pháp là gì. Cảm ơn sự giúp đỡ của bạn trong thời gian chờ đợi. – Justin

1

Một số bạn nhận được lỗi tương tự có thể được hưởng lợi từ thông tin này, trong đó nêu rằng dự án với các phiên bản Fody khác nhau không thể sử dụng cùng một thư mục gói NuGet (nếu tôi hiểu đúng): Installing multiple versions of PropertyChanged breaks compilation

Cài đặt lại gói Fody trong tất cả các dự án cũng giải quyết được vấn đề, nhưng việc thay đổi tất cả sang cùng một phiên bản có thể dễ dàng hơn.

1

Sau khi thử tất cả các giải pháp tôi có thể tìm trên internet, sau đây làm việc cho tôi:

  1. Đóng Visual Studio.
  2. Xóa các thư mục DebugRelease trong dự án PCL của bạn và dự án {platform} của bạn. Đối với tôi, chúng được đặt ở một số thứ như MyPCLProjectName\bin\iOS\bin\iPhoneSimulator\.
  3. Sửa PCL của bạn và {platform} .csproj tập tin và loại bỏ tất cả <Import> thẻ, trừ cho một trong đó bắt đầu <Import Project="$(MSBuildExtensionsPath32)\...
  4. Mở lại Visual Studio.
  5. Khôi phục gói (bước này có thể được thực hiện tự động khi bạn mở lại Visual Studio) - Solution Explorer > right-click solution > Restore NuGet Packages.
1

Nếu bạn đang sử dụng git, chạy này từ dòng lệnh:

git clean -xdf 
Các vấn đề liên quan