내 클래스 라이브러리를 참조 할 수없는 이유는 무엇입니까?


86

Visual Studio 2008에 웹 사이트와 클래스 라이브러리가 포함 된 솔루션이 있습니다.

그런 다음 클래스 라이브러리를 참조해야하는 솔루션 외부에 다른 웹 사이트 프로젝트가 있습니다. Bin 폴더 또는 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택한 다음 클래스 라이브러리 프로젝트를 선택하면 클래스 라이브러리에 필요한 15 개 정도의 DLL이 웹 사이트 bin 폴더에 추가되지만 .cs 파일은 using 문을 인식하지 못합니다.

using MyLibrary.MyFolder;

해결할 수 없다고 말하고 ReSharper는 사용하지 않기 때문에 안전하게 제거 할 수 있다고 말합니다.

ReSharper는 참조가 필요하다는 것을 인식하고 "참조 MyLibrary 및 MyFolder 사용"을 제안합니다. 이미 가지고있는 참조를 추가하도록 제안하는 이유를 잘 모르겠습니다. 제안을 할 때 오류가 발생합니다.

"모듈을 참조하지 못했습니다. 아마도 참조는 프로젝트간에 순환 종속성을 생성 할 것입니다."

웹 사이트 속성 페이지로 이동하여 모든 참조를 제거하고 다시 추가하려고 시도했지만 동일한 오류가 발생합니다. 이것이 작동하지 않는 이유가 무엇입니까?


클래스 라이브러리에서 .NET Framework 버전과 당신이 참조하는 프로젝트 확인
Manideep Innamuri

답변:


164

또한 새 솔루션의 프로젝트가 포함하려는 프로젝트와 호환되는 프레임 워크에 대해 실행되는지 확인합니다. 3.5 프로젝트에 4.0 프로젝트에 대한 참조를 포함하려고했습니다.


3
명성! 내 솔루션을 4.5로 빌드하고 4.0에 연결했습니다. 현재 4.0 요구 사항으로 인해 새 솔루션을 4.0으로 다운 그레이드했으며 이제 다른 프로젝트를 구축하는 데 문제가 없습니다. 내가 제정신을 유지하도록 도와 준 +1!
David Peterson

1
이 프로젝트를 통해 이전의 많은 장애물을 극복했고,이 오류가 발생했을 때 수건을 던지려고했습니다. 저장하셨습니다, 감사합니다!
Tony D

1
이런 식으로 문제가 해결 될 것이라고 예상하지 못했습니다! Cool enuf
Irfaan 2016

1
그런 다음 Microsoft는 이것을 말하고 모두 동일한 버전에 넣는 옵션을 포함해야합니다.
PRMan 2017

1
내 하루를 구했습니다! VisualStudio는 그것에 대해 나에게 상기시키는 경고도 내지 않을 것입니다 :(
Reuel Ribeiro

86

이 문제를 해결하는 방법을 찾았습니다 (적어도 나를 위해). 왜 효과가 있었는지 모르겠지만 효과가있었습니다. (같은 문제가있는 두 번째 웹 사이트에 대해 방금 시도했으며 다음 솔루션도 효과가있었습니다).

나는 프로젝트를 정상적으로 정리하고 다시 빌드하고 모든 Visual Studio 인스턴스를 종료하고 다시 시작하고 컴퓨터를 다시 시작하려고 시도했습니다.

실제로 작동 한 것은 Visual Studio에서 프로젝트를 열고 열려있는 모든 탭을 닫은 다음 종료하는 것입니다.

나는 그것이 중요하다고 생각하지 않았기 때문에 탭을 열어 놓기 전에 (그리고 내가 사용하는 탭을 거의 닫지 않았습니다).


VS를 다시 시작하는 것만으로도 효과적이었습니다. 이 문제의 원인은 R #에서 버그를 유발하는 프로젝트 / 네임 스페이스 이름 변경 리팩토링이었습니다.
mbx 2010-04-10

그것은 나에게도 효과적이었습니다. 말씀하신대로 모든 탭을 닫은 다음 IDE와 짜잔을 다시 시작했습니다. 이제 클래스 라이브러리를 참조 할 수 있습니다. 감사합니다.
yuva

31

한 가지 가능성은 클래스 라이브러리의 대상 .NET Framework 버전이 프로젝트의 버전보다 높다는 것입니다.


8

비슷한 문제가 발생했습니다. 모든 참조가 Resharper에 의해 버그가 발생합니까?-저에게 도움이 된 해결책은 Resharper 캐시를 지우고 VS를 다시 시작하는 것입니다.

tools-> options-> resharper-> options-> general-> 캐시 지우기 버튼을 클릭하고 VS를 다시 시작하십시오.


4

VS가 때때로 빌드하고 때로는 그렇지 않은 비슷한 문제가있었습니다. 몇 번의 검색과 시도 후에 다른 라이브러리 ( 'FileManager')에서 동일한 이름을 가진 클래스에 대한 모호한 참조가 있음을 발견했습니다. 빌드하지 않을 프로젝트는 솔루션의 모든 모듈을 참조하는 단위 테스트였습니다. 특정 모듈에 대한 참조를 적용하면 문제가 해결되었습니다.

내 요점은 ReSharper 또는 VS를 비난하는 것보다 실제로 어떤 종류의 순환 참조가 없는지 다시 확인하는 것이 좋습니다. 종종 다른 모듈에서 동일한 이름을 가진 클래스는 혼동을 일으킬 수 있으며 종종 잘못된 디자인의 증상입니다 (제 경우와 같이).


필자의 경우 +1 네임 스페이스가 다른 두 프로젝트가 동일한 이름 (Visual Studio의 응용 프로그램 탭에있는 어셈블리 이름)을 가진 .exe로 컴파일되었습니다. 마이그레이션 프로젝트 때문에 이것은 (일부) 의미가 있습니다. 명령 줄에서 MSBuild는 우리에게 한동안 궁금해하는별로 도움이되지 않는 단서를 제공했습니다 The type or namespace name 'A' does not exist in the namespace 'B'. 참고 아무런 경고는이를 위해 올 것을 ...
조노

3

ReSharper와 비슷한 문제인 것 같습니다.

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

빌드를 강제하는 스레드의 한 사용자에 따르면 첫 번째 빌드 후 문제 (CTRL + Shift + B)를 수정합니다.

ReSharper의 경우 특히 문제가있는 것 같습니다. 경고 및 가능한 잘못된 오류에 관계없이 빌드를 시도해 보셨습니까?


나는 그것을 일찍 발견했습니다. 그리고 그것을 구축하여 문제가 "수정"되었는지 확실하지 않습니다. 컴파일을하지만 여전히 인식되지 않는 것으로 명령문, 클래스 등을 사용하여 클래스를 표시합니다. 그러나 일부 메서드 호출을 의도적으로 중단하면 Visual Studio가 매개 변수 목록을 표시하지 않더라도 오류를 인식하는 것 같습니다. ReSharpers의 잘못이라고 생각합니다.
Brandon

3

둘 다 동일한 솔루션에 있기 때문에 DLL에 대한 참조를 추가하는 대신 클래스 라이브러리 프로젝트 자체에 대한 참조를 추가하십시오 (참조 추가 대화 상자에는 이에 대한 탭이 있습니다).

아, 다른 솔루션입니다. 그것을 놓쳤다. 프로젝트에 대한 참조를 추가하는 대신 클래스 라이브러리의 컴파일 된 DLL에 대한 참조를 추가해보십시오. 참조 추가 대화 상자에는이를 수행하는 찾아보기 탭이 있습니다.


1
이것은 나를 위해 일했으며 다른 솔루션은 참조 추가를 제안했지만 어떤 이유로 솔루션 탐색기에서 기본 프로젝트를 마우스 오른쪽 단추로 클릭 할 때까지 찾지 못했습니다.
Ralpharama 2017 년

3

동일한 버전의 asp.net이 사용되고 있는지 확인한 후. 프로젝트를 제거했습니다. 솔루션을 정리하고 프로젝트를 다시 추가했습니다. 이것이 나를 위해 일한 것입니다.


나는 똑같은 문제가 있었고 이것이 도움이되는 것 같았습니다. 꽤 이상합니다.
inexcitus

2

동일한 솔루션에있는 프로젝트에 대한 어셈블리를 참조하는 경우 \ bin \ Debug (또는 \ bin \ Release) 폴더에서 dll을 검색하는 대신 ( "Projects"탭 사용) 프로젝트 참조를 추가합니다 ( "찾아보기"탭). 아래 스크린 샷을 참조하십시오. 외부 어셈블리로 간주되는 경우에만 어셈블리 / dll 파일을 찾습니다.

여기에 이미지 설명 입력


2

내 프로젝트의 * .csproj.user (resharper 파일)를 삭제 한 다음 모든 탭을 닫고 다시 엽니 다. 그 후 내 프로젝트를 컴파일 할 수 있었고 resharper 경고가 없었습니다.


이 작업을 수행하고 어셈블리 정보를 다시 표시하는 인텔리 센스를 얻었지만 재 컴파일을 시도하자마자 해당 어셈블리에 대한 인텔리 센스 정보가 지워지고 빌드가 실패했습니다. 이것은 하나의 이상한 오류입니다!
David Peterson

또한 내 프로젝트를 처음부터 다시 만들어야했습니다 ... 비교적 새로운 프로젝트에서 NuGet에서 몇 번 또는 여러 번 제거 / 설치했다고 생각합니다.
Adam Nofsinger

참조를 삭제하고 다시 만드는 것이 저에게 효과적이었습니다. 전체 프로젝트 파일 삭제가 과도 할 수 있습니다.
danjuggler 2011

2

나는이 문제가 있었다. 알아내는 데 몇 년이 걸렸습니다. 제 어깨 너머로 도와 줄 사람들이있었습니다. 우리는 Visual Studio를 다시 빌드하고 정리하고 다시 시작했지만 문제가 해결되지 않았습니다. 참조를 제거하고 다시 추가했습니다 ...

아무 소용이 없습니다 ....까지!

내 문제에 대한 해결책은 내 클래스 선언의 철자가 잘못 되었다는 것입니다.

나를 가혹하게 판단하기 전에 왜 그것이 어리석지 않았는지, 그리고 가장 똑똑한 프로그래머조차도이 실수를 저지를 수 있었던 이유를 설명하도록하겠습니다.

실수는 이름의 초기에 있었기 때문에 입력을 시작했을 때 intellisense 클래스 목록에 나타나지 않았습니다.

클래스 이름 : Message.cs

선언:

public class Massage
{
    //code here

}

한 눈에 작은 글꼴로 Massage는 Message와 동일하게 보입니다.

M을 입력하면 너무 많은 클래스가 나열되었으므로 잘못 입력 된 버전에는 나타나지 않는 e를 입력했습니다. 이로 인해 컴파일러가 해당 클래스를 선택하지 않는다는 인상을 받았습니다.


그래서 본질적으로 오타가 있습니다. 다른 사람들에게는 그다지 유용하지 않습니다.
TylerH

0

MVC 2 응용 프로그램에 대한 테스트 프로젝트를 만들 때 VS 2010에서 비슷한 문제가 발생했습니다. 증상은 동일했습니다.

ReSharper의 메시지는 다소 오해의 소지가 있습니다. 잠시 동안 저는 ReSharper를 완전히 무시하고 "수동 VS 방식"으로 수행했습니다.

  1. 나는 용액을 청소했다.
  2. MVC 프로젝트에 대한 참조를 수동으로 추가했습니다.
  3. using 지시문을 수동으로 추가했습니다.
  4. Ctrl-Shift-B

이 단계에서 컴파일 오류가 발생했습니다. System.Web.Mvc테스트 프로젝트에서 어셈블리를 참조해야 했습니다 (한숨). 이 참조를 추가하면 프로젝트가 컴파일됩니다. ReSharper 문제는 남아 있지만 ReSharper 테스트 실행기는 작동합니다.

VS를 다시 시작하면 ReSharper 오류도 사라집니다. 다시 시작해야하는지 잘 모르겠습니다. .cs 파일을 닫는 것만으로도 충분할 수 있습니다.

이제부터 ReSharper 메시지가 표시되면

모듈을 참조하지 못했습니다. 아마도 참조는 프로젝트간에 순환 종속성을 생성합니다.

나는 읽을 것이다

모듈을 참조하지 못했습니다. 아마도 참조는 프로젝트간에 순환 종속성을 생성하거나 참조 종속성의 종속성에 대한 일부 참조가 누락되었습니다.


0

나를 위해 일한 또 다른 가능한 수정 사항 :

비 프로젝트 (외부) 어셈블리 X를 참조하는 어셈블리 B를 참조하는 어셈블리 A가 있고 어셈블리 B의 코드가 X를 참조했음을 인식하지 못하는 경우 다음 단계를 순서대로 시도하십시오.

  • A와 B 모두에서 X에 대한 참조 삭제
  • B에서 X에 대한 참조 다시 만들기
  • A에서 X에 대한 참조 재생성

분명히 VS는 이미 외부를 참조하는 다른 프로젝트의 종속성 인 프로젝트의 외부 어셈블리에 대한 참조를 인식하지 않습니다. 참조를 처음부터 다시 설정하면이를 극복 할 수 있습니다. 아주 이상합니다.


흥미롭지 만 VS2015에서는 사실입니다. 감사!
Scott Nimrod

0

저는이 문제에 직면했고, Visual Studio를 닫고, Visual Studio를 다시 열고, 솔루션을 정리하고 다시 빌드하여 해결했습니다. 이것은 나를 위해 일했습니다.


0

TFS를 사용하는 경우 최신 가져 오기 (재귀)를 수행하는 것이 항상 작동하는 것은 아닙니다. 대신 소스 제어 => 특정 버전 가져 오기를 클릭 한 다음 두 상자를 모두 클릭하여 최신 버전을 가져옵니다. 이것은 작동하는 경향이 있습니다.

여기에 이미지 설명 입력

그래도 작동하지 않으면 suo 파일 (일반적으로 솔루션과 같은 위치에 있음)을 삭제하면 Visual Studio가 소스에서 모든 파일을 가져 와서 suo 파일을 다시 빌드합니다.

그래도 작동하지 않으면 열려있는 모든 파일을 닫고 Visual Studio를 닫으십시오. 다음에 Visual Studio를 열면 수정되어야합니다. 이 방법으로 해결 된 resharper 버그가 있습니다.


0

나는 최근에 비슷한 문제를 발견했습니다. Resharper Ultimate 2016.1.2를 사용하여 Visual Studio 2015에서 작업하고 있습니다. 다른 어셈블리의 클래스를 참조하는 동안 코드베이스에 새 클래스를 추가하려고했지만 Resharper가 해당 패키지에 대해 오류를 발생시킵니다.

동료의 도움을 받아 참조 된 클래스가 전역 네임 스페이스에 존재하고 현재 네임 스페이스에 존재하는 동일한 이름의 다른 엔터티에 의해 숨겨 졌기 때문에 새 클래스에서 액세스 할 수 없다는 것을 알아 냈습니다.

필요한 네임 스페이스 앞에 'global ::'키워드를 추가하면 실제로 찾고 있던 클래스를 참조하는 데 도움이되었습니다. 이에 대한 자세한 내용은 아래 나열된 페이지에서 찾을 수 있습니다.

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


0

두 프로젝트가 동일한 솔루션에 포함 된 경우 컴파일 된 dll이 아닌 필요한 프로젝트에 대한 참조를 추가하면 더 적합합니다.

여기에 이미지 설명 입력


-1

불행히도 나를 위해 일한 유일한 일은 클래스 라이브러리 프로젝트를 다른 곳에 임시로 복사 한 후 클래스 라이브러리 프로젝트를 완전히 삭제하고 다시 만드는 것입니다. 그래야만 ASP.Net 웹 프로젝트 using가 클래스 라이브러리 프로젝트를 참조 하는 문을 인식합니다 . 이것은 ReSharper를 사용하지 않고 Visual Studio 2010에서 발생했습니다.


-1

비슷한 문제가있었습니다. 나를 위해 일한 것은 Visual Studio에서 잘못된 클래스 라이브러리를 추가했다는 것 입니다 . Visual Studio의 검색 기능을 사용하여 추가했습니다.

내가해야 할 일은 Add New Project> Visual C #> Class Library 입니다. 그리고이 새로 추가 된 클래스 라이브러리가 올바른 것이며 이제 모든 프로젝트에 대한 참조로 추가 할 수 있습니다.


-4

가져 오는 데 필요한 클래스 라이브러리 에 대한 참조추가하는 것을 잊을 수 있습니다 .

가져 오려는 클래스 라이브러리 (여러 개의 가져온 클래스 라이브러리 포함)를 마우스 오른쪽 버튼으로 클릭하고,-> 추가-> 참조 (프로젝트 선택-> 솔루션-> 가져올 클래스 라이브러리 선택-> 확인)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.