나는 오류 메시지가 일반적 이며이 오류에 대해 많은 질문이 있다는 것을 알고 있지만 지금까지 해결책이 없었으므로 질문하기로 결정했습니다. 대부분의 유사한 질문과 다른 점은 App_Code 디렉토리를 사용한다는 것입니다.
에러 메시지:
CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
assembly that is not referenced. You must add a reference to assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
소스 파일:
c:\inetpub\wwwroot\Test\Website\App_Code\Company\Project\BusinessLogic\Manager.cs
제안에 따라 여기 와 여기에 , 나는 C 내부 Project.Rights.dll의 모든 인스턴스를 삭제 한 : \ 윈도우 \ Microsoft.NET /*.*에 따르면 이 , 내가 확인 문제 .cs 파일은 “컴파일”로 빌드 액션 세트가있는 경우 . 그들이하다. 또한 “Project.Rights.OperationsProvider”유형이 포함 된 .cs 파일이 App_Code 디렉터리에 배포되어 있는지 다시 확인했습니다.
어떤 이유로 애플리케이션이 App_Code 디렉토리에서 유형을 찾지 않습니다. 내가 알고있는 Project.Rights.dll의 모든 인스턴스를 삭제했기 때문에 오류 메시지에 어떤 어셈블리가 언급되어 있는지 모르겠습니다.
답변
이 오류가 발생하면 무슨 일이 일어나고 있는지 항상 분명하지는 않지만 오류가 말했듯이 참조가 누락되었습니다. 다음 코드 줄을 예로 들어 보겠습니다.
MyObjectType a = new MyObjectType("parameter");
간단 해 보이며 “MyObjectType”을 올바르게 참조했을 것입니다. 그러나 “MyObjectType”생성자에 대한 오버로드 중 하나가 참조하지 않은 유형을 취한다고 가정 해 보겠습니다. 예를 들어 다음과 같이 정의 된 과부하가 있습니다.
public MyObjectType(TypeFromOtherAssembly parameter) {
// ... normal constructor code ...
}
이 오류가 발생하는 적어도 한 가지 경우입니다. 따라서 유형을 참조했지만 해당 유형에서 호출되는 함수에 대해 가능한 모든 유형의 속성 또는 메서드 매개 변수가 아닌이 유형의 패턴을 찾으십시오.
바라건대 이것은 적어도 올바른 방향으로 나아가는 데 도움이됩니다!
답변
프로젝트에서 대상 프레임 워크를 확인하십시오.
필자의 경우 “어셈블리에 대한 참조를 추가해야합니다”는 실제로 호출자와 참조 프로젝트에 동일한 대상 프레임 워크가 없다는 것을 의미합니다. 호출자 프로젝트에는 .Net 4.5가 있지만 참조 된 라이브러리에는 대상 4.6.1이 있습니다.
나는 MS 컴파일러가 더 똑똑하고 더 의미있는 오류 메시지를 기록 할 수 있다고 확신합니다. https://github.com/dotnet/roslyn/issues/14756에 제안을 추가했습니다.
답변
NuGet 패키지 업데이트를 수행하는 것은 단지에 DLL 의존성에 대한 참조를 업데이트했기 때문에 내 경우에는이 있었다 일부 하지만 모든되지 버전 충돌의 결과 – 내 솔루션에 프로젝트를. grep 스타일 도구 를 사용 하여 내 솔루션의 * .csproj 파일 내에서 텍스트를 검색하면 업데이트가 필요한 프로젝트를 쉽게 확인할 수있었습니다.
답변
이 오류가 발생하면 사용중인 코드가 어셈블리에있는 형식을 참조하지만 어셈블리가 프로젝트의 일부가 아니므로 사용할 수 없음을 의미합니다.
Project.Rights.dll을 삭제하는 것은 원하는 것과 반대입니다. 프로젝트에서 어셈블리를 참조 할 수 있는지 확인해야합니다. 따라서 전역 어셈블리 캐시 또는 웹 응용 프로그램의 ~ / Bin 디렉터리에 있어야합니다.
편집-어셈블리를 사용하지 않으려면 삭제하는 것도 적절한 해결책이 아닙니다. 대신 코드에서 이에 대한 모든 참조를 제거해야합니다. 어셈블리는 작성한 코드에 의해 직접 필요하지 않고 대신 참조하는 다른 항목에 의해 필요하므로 참조 된 어셈블리를 종속성으로 Project.Rights.dll이없는 것으로 대체해야합니다.
답변
제 경우에는 잘못된 플랫폼 / 구성으로 빌드중인 라이브러리를 참조하고있었습니다 (방금 참조 된 라이브러리를 생성했습니다).
또한 Visual Studio Configuration Manager에서 문제를 해결할 수 없었습니다.이 라이브러리에 대한 새 플랫폼 및 구성을 전환하고 만들 수 없었습니다. 해당 프로젝트 ProjectConfigurationPlatforms
에 대한 .sln
파일 섹션의 항목을 수정하여 수정했습니다 . 모든 순열은 Debug|Any CPU
(내가 어떻게했는지 잘 모르겠습니다) 로 설정되었습니다 . 깨진 프로젝트의 항목을 작업 프로젝트의 항목으로 덮어 쓰고 각 항목의 GUID를 변경했습니다.
작동하는 프로젝트에 대한 항목
{9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.ActiveCfg = Release|x64
{9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.Build.0 = Release|x64
손상된 프로젝트 항목
{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Debug|Any CPU
{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Debug|Any CPU
이제 손상된 항목이 수정되었습니다.
{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Release|x64
{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Release|x64
누군가에게 도움이되기를 바랍니다.
답변
다른 프로젝트가 동일한 dll의 다른 사본을 참조하고 있다는 사실이 나에게 일어났습니다. 모두 디스크에서 동일한 파일을 참조했는지 확인했고 예상대로 오류가 사라졌습니다.
답변
.NET 어셈블리 탭에서 참조를 추가하려고 할 때 작동하지 않았습니다. 그러나 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319에 BROWSE를 사용 하여 참조를 추가하면 작동했습니다 .