Tại sao tôi không thể tham khảo thư viện lớp của mình?


86

Tôi có một giải pháp chứa trang web và thư viện lớp trong Visual Studio 2008.

Sau đó, tôi có một dự án trang web khác bên ngoài giải pháp cần tham chiếu thư viện lớp. Tôi nhấp chuột phải vào thư mục Bin hoặc Dự án và chọn Thêm Tham chiếu, sau đó chọn Dự án Thư viện Lớp của tôi, nó thêm 15 hoặc lâu hơn các tệp DLL mà thư viện lớp cần vào thư mục bin của trang web, nhưng không tệp .cs nào nhận ra câu lệnh using.

using MyLibrary.MyFolder;

Nó nói rằng nó không thể giải quyết nó và ReSharper chỉ nói rằng nó có thể được gỡ bỏ một cách an toàn vì nó không được sử dụng.

ReSharper có thể nhận ra rằng nó cần tham chiếu và gợi ý rằng nó "Tham khảo MyLibrary và sử dụng MyFolder". Tôi không chắc tại sao nó lại đề xuất tôi thêm một tài liệu tham khảo mà tôi đã có. Khi tôi thực hiện với đề xuất, tôi gặp lỗi

"Không thể tham chiếu mô-đun. Có thể, tham chiếu sẽ tạo ra sự phụ thuộc vòng giữa các dự án."

Tôi đã thử truy cập các trang thuộc tính của trang web và xóa tất cả các tham chiếu và thêm lại chúng, nhưng nó vẫn cho lỗi tương tự. Bất kỳ ý tưởng tại sao điều này không hoạt động?


Kiểm tra phiên bản .NET Framework trong thư viện lớp và dự án bạn đang tham chiếu trong
Manideep Innamuri

Câu trả lời:


164

Ngoài ra, hãy kiểm tra xem các dự án của giải pháp mới có chạy trên một khuôn khổ tương thích với dự án mà bạn đang cố gắng đưa vào hay không. Tôi đã cố gắng bao gồm một tham chiếu đến một dự án 4.0 trong một dự án 3.5.


3
Thanh danh! Tôi đang xây dựng giải pháp của mình dưới dạng 4.5 và đang liên kết nó với 4.0. Do yêu cầu 4.0 hiện tại của chúng tôi, tôi đã hạ cấp giải pháp mới xuống 4.0 và hiện tại dự án khác của tôi không gặp vấn đề gì khi xây dựng giải pháp chống lại nó. +1 để giúp tôi giữ sức khỏe!
David Peterson

1
Tôi đã vượt qua rất nhiều trở ngại trước đây với dự án này, và tôi đã chuẩn bị đầu hàng khi mắc phải lỗi này. Bạn đã lưu nó, cảm ơn!
Tony D

1
Tôi không mong đợi cách này vấn đề sẽ được giải quyết! Cool enuf
Irfaan

1
Sau đó, Microsoft nên nói điều này và bao gồm một tùy chọn để đặt tất cả chúng ở cùng một phiên bản.
PRMan

1
Đã lưu ngày của tôi! VisualStudio thậm chí sẽ không đưa ra một cảnh báo nhắc nhở tôi về điều đó :(
Reuel Ribeiro

86

Tôi đã tìm thấy cách khắc phục sự cố này (ít nhất là đối với tôi). Tại sao nó hoạt động, tôi không chắc, nhưng nó đã làm. (Tôi vừa thử với một trang web thứ hai đang gặp sự cố tương tự và giải pháp sau đây cũng hoạt động được).

Tôi đã thử làm sạch bình thường các dự án và xây dựng lại, tắt tất cả các phiên bản Visual Studio của tôi và khởi động lại chúng, thậm chí đã thử khởi động lại máy tính của mình.

Những gì thực sự hoạt động là mở dự án trong Visual Studio, đóng tất cả các tab đang mở rồi tắt nó.

Trước đây, tôi để mở các tab vì tôi không nghĩ nó quan trọng (và tôi hầu như không bao giờ đóng các tab đang sử dụng).


Đơn giản chỉ cần khởi động lại VS đã làm việc cho tôi. Nguyên nhân của vấn đề đó là việc tái cấu trúc lại tên vùng dự án / không gian tên gây ra lỗi trong R #.
mbx

Điều đó cũng làm việc cho tôi. Tôi đã đóng tất cả các tab như bạn nói và sau đó khởi động lại IDE của mình và thì đấy, tôi có thể tham khảo thư viện lớp của mình ngay bây giờ. Cảm ơn bạn.
yuva

31

Một khả năng là phiên bản .NET Framework đích của thư viện lớp cao hơn phiên bản của dự án.


8

Tôi đã gặp sự cố tương tự, liệu tất cả các tham chiếu của tôi có được sửa lỗi bởi Resharper không - Giải pháp phù hợp với tôi là xóa Resharper Cache và sau đó khởi động lại VS

tools-> options-> resharper-> options-> general-> nhấp vào nút clear caches và khởi động lại VS


4

Tôi đã gặp vấn đề tương tự trong đó VS đôi khi xây dựng và đôi khi không. Sau một số lần tìm kiếm và cố gắng, tôi phát hiện ra rằng tôi có một tham chiếu không rõ ràng đến một lớp có cùng tên trong các thư viện khác nhau ('FileManager'). Dự án sẽ không xây dựng là Bài kiểm tra đơn vị của tôi tham chiếu đến tất cả các mô-đun trong giải pháp của tôi. Bắt buộc tham chiếu đến một mô-đun cụ thể đã sắp xếp mọi thứ cho tôi.

Quan điểm của tôi là: Thay vì đổ lỗi cho ReSharper hoặc VS, bạn nên kiểm tra kỹ xem có thực sự không có một loại tham chiếu vòng tròn nào đó không. Thông thường, các lớp có cùng tên trong các mô-đun khác nhau có thể gây nhầm lẫn và thường là một triệu chứng của thiết kế xấu (như trong trường hợp của tôi).


+1 trong trường hợp của tôi, hai dự án có không gian tên khác nhau đã được biên dịch thành .exe có cùng tên (Tên hợp ngữ trong tab Ứng dụng trong Visual Studio) - vì dự án di chuyển điều này có ý nghĩa (một số); MSBuild từ dòng lệnh đã cho chúng tôi một đầu mối không quá hữu ích duy nhất mà lại cho chúng ta tự hỏi trong một thời gian: The type or namespace name 'A' does not exist in the namespace 'B'. Lưu ý rằng không có cảnh báo nào đưa ra cho điều này ...
Jonno

3

Điều này có vẻ như một vấn đề tương tự với ReSharper:

http://www.jetbrains.net/devnet/thread/275827

Theo một người dùng trong luồng buộc một bản dựng sẽ khắc phục sự cố (CTRL + Shift + B) sau bản dựng đầu tiên ..

Có vẻ như một vấn đề với ReSharper cụ thể trong trường hợp của họ .. Bạn đã thử xây dựng bất kể các cảnh báo và lỗi sai có thể xảy ra chưa?


Tôi đã xem qua điều đó trước đó. Và tôi không chắc liệu việc xây dựng nó có "khắc phục" được sự cố hay không. Nó thực hiện biên dịch, nhưng nó vẫn hiển thị các lớp, sử dụng các câu lệnh, lớp, v.v. như không được nhận dạng. Tuy nhiên, nếu tôi cố tình phá vỡ một số lệnh gọi phương thức, Visual Studio dường như nhận ra lỗi, ngay cả khi nó sẽ không hiển thị cho tôi danh sách tham số. Tôi đoán đó là lỗi của ReSharpers.
Brandon

3

Vì cả hai đều nằm trong cùng một giải pháp, thay vì thêm một tham chiếu vào DLL, hãy thêm một tham chiếu vào chính dự án thư viện lớp (hộp thoại Thêm Tham chiếu sẽ có một tab cho việc này).

Ahh, đó là một giải pháp khác. Bỏ lỡ điều đó. Bạn thử thay vì thêm tham chiếu vào dự án thì sao, hãy thêm tham chiếu vào DLL đã biên dịch của thư viện lớp của bạn. Hộp thoại Thêm Tham chiếu có tab Duyệt qua để thực hiện việc này.


1
Điều này đã hiệu quả với tôi, các giải pháp khác đề xuất thêm tham chiếu nhưng vì một số lý do tôi không tìm thấy nó cho đến khi tôi nhấp chuột phải vào dự án chính trong trình khám phá giải pháp.
Ralpharama, 25/09/17

3

Sau khi xác nhận cùng một phiên bản của asp.net đã được sử dụng. Tôi đã xóa dự án. đã làm sạch dung dịch và thêm lại dự án. Đây là những gì làm việc cho tôi.


Tôi đã gặp vấn đề tương tự và điều này có vẻ hữu ích. Khá lạ.
unscitus

2

Nếu bạn đang tham chiếu các tập hợp cho các dự án trong cùng một giải pháp, hãy thêm tham chiếu Dự án (sử dụng tab "Dự án") thay vì duyệt tìm dll trong thư mục \ bin \ Debug (hoặc \ bin \ Release) (sử dụng Tab "Duyệt qua"). Xem ảnh chụp màn hình bên dưới. Chỉ duyệt tập tin assembly / dll nếu nó được coi là một tập hợp bên ngoài.

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


2

Tôi đã xóa * .csproj.user (tệp resharper) trong dự án của mình, sau đó, đóng tất cả các tab và mở lại. Sau đó, tôi đã có thể biên dịch dự án của mình và không có cảnh báo về trình cài đặt lại.


Tôi đã làm điều này và nhận được trí tuệ của tôi hiển thị lại thông tin lắp ráp, nhưng ngay sau khi tôi cố gắng biên dịch lại, thông tin trí tuệ của tôi cho cụm đó đã bị xóa và quá trình xây dựng không thành công. Đây là một trong những lỗi lạ!
David Peterson

Tôi cũng đã phải tạo lại dự án của mình từ đầu ... nghĩ rằng tôi đã thực hiện một vài lần gỡ / cài đặt trong NuGet trên một dự án tương đối mới.
Adam Nofsinger

Việc xóa và tạo lại các tham chiếu có hiệu quả với tôi, việc xóa toàn bộ tệp dự án có thể quá mức cần thiết.
danjuggler

2

Tôi đã có vấn đề này. Tôi đã mất nhiều thời gian để tìm ra. Tôi đã có người trên vai để giúp đỡ. Chúng tôi đã xây dựng lại, làm sạch và khởi động lại Visual studio và điều này không khắc phục được. Chúng tôi đã xóa và thêm lại các tham chiếu ...

Tất cả đều vô ích .... Cho đến khi!

Giải pháp cho vấn đề của tôi là khai báo lớp học của tôi bị viết sai chính tả.

Trước khi bạn bắt đầu phán xét tôi một cách gay gắt, hãy cho phép tôi giải thích tại sao điều đó không phải là ngu ngốc, và tại sao sai lầm này có thể được thực hiện bởi ngay cả những lập trình viên thông minh nhất.

Vì lỗi đã sớm nằm ở tên nên nó đã không xuất hiện trong danh sách lớp intellisense khi tôi bắt đầu nhập.

ví dụ

Tên lớp: Message.cs

Tờ khai:

public class Massage
{
    //code here

}

Nhìn thoáng qua và ở một phông chữ nhỏ, Massage trông giống hệt với Message.

Việc nhập M liệt kê quá nhiều lớp, vì vậy tôi đã nhập e, lớp này không xuất hiện trong phiên bản gõ nhầm, điều này tạo cảm giác rằng lớp không được trình biên dịch chọn.


Vì vậy, về cơ bản bạn đã có một lỗi đánh máy. Điều đó không thực sự hữu ích cho người khác.
TylerH

0

Tôi đã gặp sự cố tương tự trong VS 2010, khi tạo một dự án thử nghiệm cho ứng dụng MVC 2. Các triệu chứng giống hệt nhau.

Thông điệp từ ReSharper có phần gây hiểu lầm. Trong một khoảnh khắc, tôi hoàn toàn bỏ qua ReSharper và làm theo "cách VS thủ công":

  1. Tôi đã làm sạch dung dịch.
  2. Tôi đã thêm tham chiếu vào dự án MVC theo cách thủ công.
  3. Tôi đã thêm thủ công các chỉ thị sử dụng.
  4. ctrl-shift-b

Ở giai đoạn này, tôi gặp lỗi biên dịch: Tôi lẽ ra phải tham chiếu đến System.Web.Mvcassembly trong dự án thử nghiệm của mình (thở dài). Thêm tham chiếu này khiến dự án biên dịch. Các vấn đề của ReSharper vẫn còn, nhưng trình chạy thử nghiệm ReSharper hoạt động.

Khi tôi khởi động lại VS, lỗi ReSharper cũng biến mất. Tôi không chắc liệu có cần phải khởi động lại hay không - chỉ cần đóng tệp .cs là đủ.

Từ bây giờ, khi tôi thấy thông báo ReSharper

Không thể tham chiếu mô-đun. Có thể, tham chiếu sẽ tạo ra sự phụ thuộc vòng giữa các dự án.

tôi sẽ đọc

Không thể tham chiếu mô-đun. Có thể, tham chiếu sẽ tạo ra các phụ thuộc vòng giữa các dự án, hoặc bạn đang thiếu một số tham chiếu đến các phụ thuộc của các phụ thuộc của tham chiếu.


0

Một bản sửa lỗi khả thi khác vừa hiệu quả với tôi:

Nếu bạn có Assembly A, tham chiếu đến Assembly B, cả hai đều tham chiếu đến một assembly X không phải là dự án (bên ngoài) và mã của Assembly B sẽ không nhận ra rằng bạn đã tham chiếu đến X, thì hãy thử các bước sau theo thứ tự:

  • Bỏ tham chiếu đến X từ CẢ A và B
  • Tạo lại tham chiếu đến X trong B
  • Tạo lại tham chiếu đến X trong A

Rõ ràng, VS sẽ không nhận ra một tham chiếu đến lắp ráp bên ngoài trong một dự án mà là một phần phụ thuộc của một dự án khác đã tham chiếu bên ngoài. Bằng cách thiết lập lại các tham chiếu từ đầu, bạn khắc phục được điều này. Nó chỉ rất kỳ quặc.


Thú vị nhưng có thật trên VS2015. Cảm ơn!
Scott Nimrod

0

Tôi đã đối mặt với vấn đề này và tôi đã giải quyết nó bằng cách đóng cửa studio trực quan, mở lại studio trực quan, dọn dẹp và xây dựng lại giải pháp. Điều này đã làm việc cho tôi.


0

Nếu sử dụng TFS, việc thực hiện Lấy mới nhất (đệ quy) không phải lúc nào cũng hoạt động. Thay vào đó, tôi buộc cập nhật phiên bản mới nhất bằng cách nhấp vào Kiểm soát nguồn => Nhận phiên bản cụ thể rồi nhấp vào cả hai hộp. Điều này có xu hướng hoạt động.

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

Nếu nó vẫn không hoạt động thì việc xóa tệp suo (thường được tìm thấy ở cùng nơi với giải pháp) buộc visual studio lấy tất cả các tệp từ nguồn (và sau đó xây dựng lại tệp suo).

Nếu điều đó không hiệu quả thì hãy thử đóng tất cả các tệp đang mở của bạn và đóng Visual studio. Khi bạn mở Visual studio tiếp theo, nó sẽ được sửa. Có một lỗi trình sạc lại được giải quyết theo cách này.


0

Tôi đã tình cờ gặp một vấn đề tương tự gần đây. Tôi đang làm việc trong Visual Studio 2015 với Resharper Ultimate 2016.1.2. Tôi đã cố gắng thêm một lớp mới vào cơ sở mã của mình trong khi cố gắng tham chiếu một lớp từ một assembly khác nhưng Resharper sẽ báo lỗi cho gói đó.

Với sự trợ giúp của một đồng nghiệp, tôi đã phát hiện ra rằng lớp được tham chiếu tồn tại trong không gian tên chung và không thể truy cập được từ lớp mới vì nó bị ẩn bởi một thực thể khác cùng tên tồn tại trong không gian tên hiện tại.

Thêm từ khóa 'global ::' trước vùng tên bắt buộc đã giúp tôi tham chiếu đến lớp mà tôi thực sự đang tìm kiếm. Bạn có thể tìm thấy thêm chi tiết về điều này trên trang được liệt kê dưới đây:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

Nếu cả hai dự án được chứa trong cùng một giải pháp, sẽ phức tạp hơn nếu bạn thêm tham chiếu cho dự án bạn cần chứ không phải dll đã biên dịch của nó.

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


-1

Thật không may, điều duy nhất hiệu quả với tôi là xóa hoàn toàn và tạo lại dự án thư viện lớp, sau khi đã tạm thời sao chép các tệp lớp trong đó ở nơi khác. Chỉ khi đó, dự án web ASP.Net mới nhận ra các usingcâu lệnh tham chiếu đến dự án thư viện lớp. Đây là với Visual Studio 2010, không sử dụng ReSharper.


-1

Tôi đã có vấn đề tương tự. Điều hiệu quả với tôi là tôi đã thêm nhầm Thư viện lớp từ studio trực quan . Tôi đã thêm bằng cách sử dụng tính năng tìm kiếm của studio trực quan.

Những gì tôi cần làm là Thêm dự án mới> Visual C #> Thư viện lớp . Và thư viện lớp mới được thêm vào này là thư viện phù hợp và hiện có thể được thêm làm tham chiếu cho bất kỳ dự án nào.


-4

Bạn có thể quên thêm tham chiếu thư viện lớp mà bạn cần nhập.

Nhấp chuột phải vào thư viện lớp mà bạn muốn nhập vào (chứa nhiều thư viện lớp đã nhập), -> Thêm-> Tham chiếu (Chọn Dự án-> Giải pháp-> chọn thư viện lớp mà bạn muốn nhập-> OK)

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.