Programing

참조되지 않는 어셈블리에 형식이 정의되어 있습니다. 원인을 찾는 방법은 무엇입니까?

lottogame 2020. 11. 17. 07:40
반응형

참조되지 않는 어셈블리에 형식이 정의되어 있습니다. 원인을 찾는 방법은 무엇입니까?


나는 오류 메시지가 일반적 이며이 오류에 대해 많은 질문이 있다는 것을 알고 있지만 지금까지 해결책이 없었으므로 질문하기로 결정했습니다. 대부분의 유사한 질문과 다른 점은 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이없는 것으로 대체해야합니다.


다른 프로젝트가 동일한 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

누군가에게 도움이되기를 바랍니다.


.NET 어셈블리 탭에서 참조를 추가하려고 할 때 작동하지 않았습니다. 그러나 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319에 BROWSE를 사용 하여 참조를 추가하면 작동했습니다 .


주된 이유 중 하나는 당신이 전에 어떤 일을 수행해야합니다 DLL의 속성이 확인 될 수 specific version property있다면 진정한 메이크업이 거짓을

이유 : 빌드 할 때 소스 코드가 다른 (이전) 버전과 결합되었을 수 있지만이 라이브러리는 새 업데이트로 업그레이드되어 이제 Assembly Cash에서 버전이 다르고 응용 프로그램은 새 DLL을 얻을 specific version property수 없으며 비활성화 한 후에 는 applacaten이 무료로 제공됩니다. 새 버전의 DLL 참조를 얻으려면


사용중인 라이브러리 (DLL 파일)에 다른 라이브러리가 필요할 수 있습니다. 제 경우에는 데이터베이스 엔티티 모델이 포함 된 라이브러리를 참조했지만 엔티티 프레임 워크 라이브러리를 참조하는 것을 잊었습니다.


이것은 또한 라이브러리에 정의 된 (공용) 유형을 노출하는 라이브러리를 사용함을 의미 할 수도 있습니다. 라이브러리 (빌드하지 않는 라이브러리)에서 특별히 사용하지 않는 경우에도 마찬가지 입니다.

이것이 막을 수있는 것은 사용할 수없는 클래스 (서명에 참조되지 않은 라이브러리의 유형이 있음)를 사용하는 코드를 작성하는 것입니다.


나에게 오류가 발생한 이유는 오류가보고 된 WebForm이 다른 폴더에서 이동되었지만 코드 파일 클래스의 이름은 변경되지 않고 실제 경로와 일치하지 않기 때문입니다.

초기 상태 :
원래 파일 경로 : /Folder1/Subfolder1/MyWebForm.aspx.cs 원래 코드 파일
클래스 이름 : Folder1_Subfolder1_MyWebForm

After the file was moved:
File path: /Folder1/MyWebForm.aspx.cs
Codefile class name (unchanged, with the error shown): Folder1_Subfolder1_MyWebForm

The solution:
Rename your codefile class Folder1_Subfolder1_MyWebForm
to one corresponding with the new path: Folder1_MyWebForm

All at once - problem solved, no errors reporting..


The type 'Domain.tblUser' is defined in an assembly that is not referenced. You must add a reference to assembly 'Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

**Solved:**
 Add reference of my domain library layer to my web app libary layer

Note: Make sure your references are correct according to you DI container


In my case this was because I used

Implicit Operator

between BLL and DAL classes.when I want to use BLL Layer In Application Layer I got this error. I changed

implicit operator

to

explicit operator

it be OK. Thanks


In my case the version of the dll referenced was actually newer than the one that I had before.

I just needed to roll back to the previous release and that fixed it.


For me, this was caused by the project both directly and indirectly (through another dependency) referencing two different builds of Bouncy Castle that had different assembly names. One of the Bouncy Castle builds was the NuGet package, the other one was a debug build of the source downloaded from GitHub. Both were nominally version 1.8.1, but the project settings of the GitHub code set the assembly name to BouncyCastle whereas the NuGet package had the assembly name BouncyCastle.Crypto. Changing the project settings, thus aligning the assembly names, fixed the problem.


I have a similar problem, and I remove the RuntimeFrameworkVersion, and the problem was fixed.

Try to remove 1.1.1 or


Clean your solution and rebuild worked for me (in Visual Studio, these are options you get when you right click in your solution explorer), the error is gone in my project.

참고URL : https://stackoverflow.com/questions/20660999/the-type-is-defined-in-an-assembly-that-is-not-referenced-how-to-find-the-cause

반응형