c# 여기에 - 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.




지정한 지정된 (25)

버전을 신경 쓰지 않고 앱을 실행하려면 참조를 마우스 오른쪽 버튼으로 클릭하고 '특정 버전'을 false로 설정하십시오. 다른 솔루션은 나를 위해 작동하지 않을 것입니다.

C # Windows Forms 응용 프로그램 (Visual Studio 2005)에서 일부 단위 테스트를 실행하려고하는데 다음 오류가 발생합니다.

System.IO.FileLoadException : 파일 또는 어셈블리 '유틸리티, 버전 = 1.2.0.200, 문화 = 중립, PublicKeyToken = 764d581291d764f7'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040) **

x.Foo.FooGO ()에서

Foo.cs에서 x.Foo.Foo2 (String groupName_) : 123 행

FooTests.cs에서 x.Foo.UnitTests.FooTests.TestFoo () : line 98 **

System.IO.FileLoadException : 파일 또는 어셈블리 '유틸리티, 버전 = 1.2.0.203, 문화 = 중립, PublicKeyToken = 764d581291d764f7'또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다. (HRESULT 예외 : 0x80131040)

필자의 참고 문헌을 Utility version 1.2.0.203 대한 참조 만 Utility version 1.2.0.203 (다른 하나는 오래되었습니다).

이 DLL 파일의이 이전 버전을 참조하려고하는 것이 무엇인지 알아내는 방법에 대한 제안 사항은 무엇입니까?

게다가, 나는 내 하드 드라이브에이 오래된 어셈블리가 있다고 생각하지 않는다. 이 오래된 버전이있는 어셈블리를 검색 할 수있는 도구가 있습니까?


이 문제를 해결하는 방법은 다음과 같습니다.

  1. 예외 메시지에서 "문제점"라이브러리의 이름과 "예상 된"버전 번호를 얻으십시오.

  1. 솔루션에서 해당 .dll의 모든 복사본 을 찾아 마우스 오른쪽 단추로 클릭하고 해당 .dll 버전을 확인하십시오.

그래,이 예제에서 내 .dll은 확실히 2.0.5022.0입니다 (예외 버전 번호가 잘못되었습니다).

  1. 솔루션의 모든 .csproj 파일에있는 예외 메시지에 표시된 버전 번호를 검색하십시오. 이 버전 번호를 dll의 실제 번호로 바꿉니다.

그래서,이 예에서, 저는 이것을 대체 할 것입니다 ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

이걸로 ...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

작업 완료!


.NET 어셈블리 로더는 1.2.0.203을 찾을 수 없지만 1.2.0.200을 찾았습니다. 이 어셈블리는 요청한 것과 일치하지 않으므로이 오류가 발생합니다. 간단히 말해서, 참조 된 어셈블리를 찾을 수 없습니다. GAC 또는 적용 경로에 배치하여 올바른 어셈블리를 찾을 수 있는지 확인하십시오. http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx 참조하십시오.


이 솔루션은 출력 디렉토리의 모든 dll을 대체하지 못할 수도 있습니다.

내가 제안 할 것은 "bin"에서 "oldbin"또는 "obj"에서 "oldobj"로 폴더의 이름을 변경하는 것입니다.

그리고 다시 당신의 침전을 건설하십시오.

당신이 새 빌드 "bin"또는 "obj"폴더에 성공적으로 빌드 한 후 복사해야하는 타사 DLL을 사용하는 경우에 사용하십시오.

이것이 당신을 위해 일하기를 바랍니다.


AssemblyInfo.cs 파일의 AssemblyVersion에서 *를 지정하는 대신 고정 된 버전 번호를 사용하십시오. *는 각 컴파일에서 버전 번호를 변경합니다. 제 경우에는 예외였습니다.


내가 작성한 어셈블리와 동일한 이름을 가진 어셈블리를 참조하기 때문에이 오류 메시지가 나타납니다.

이것은 컴파일되었지만 참조 된 어셈블리를 현재 프로젝트 어셈블리로 덮어 썼습니다. 따라서 오류가 발생했습니다.

이 문제를 해결하기 위해 프로젝트의 이름을 변경하고 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 '속성'을 선택하여 어셈블리 속성을 사용할 수있게되었습니다.


프로젝트의 bin 폴더 내용을 삭제하고 솔루션을 다시 빌드하면 문제가 해결됩니다.


내 것은 Nathan Bedford의 게시물과 매우 비슷한 상황 이었지만 약간의 왜곡이있었습니다. 내 프로젝트도 두 가지 방법으로 변경된 dll을 참조했습니다. 1) 직접 및 2) 변경된 dll에 대한 참조가있는 구성 요소 (클래스 라이브러리)를 참조하여 간접적으로. 이제 구성 요소 (2)에 대한 내 Visual Studio 프로젝트가 변경된 dll의 올바른 버전을 참조했습니다. 그러나 compnent의 버전 번호는 변경되지 않았습니다. 그 결과 새 버전의 프로젝트를 설치하지 못하면 클라이언트 시스템의 해당 구성 요소를 대체하지 못했습니다.

최종 결과 : 직접 참조 (1) 및 간접 참조 (2)가 클라이언트 시스템에서 변경된 dll의 다른 버전을 가리키고 있습니다. 내 dev에 기계 그것은 잘 작동했습니다.

해결 방법 : 응용 프로그램을 제거하십시오. 응용 프로그램 폴더에서 모든 DLL을 삭제하십시오. 다시 설치하십시오. 내 경우처럼.


Team Foundation Server의 빌드 서비스를 빌드하는 동안이 오류가 발생했습니다. NuGet으로 추가 된 동일한 라이브러리의 서로 다른 버전을 사용하여 솔루션에서 여러 프로젝트를 수행 한 것으로 나타났습니다. NuGet을 사용하여 모든 이전 버전을 제거하고 새로운 버전을 모두 참조로 추가했습니다.

Team Foundation Server는 모든 DLL 파일을 하나의 디렉터리에 저장하며 한 번에 특정 이름의 DLL 파일이 하나만있을 수 있습니다.


내 문제는 참조 된 어셈블리를 가져 오지 않고 소스 코드를 새 시스템에 복사하는 것이 었습니다.

내가 오류를 수정 한 것은 없으므로 서둘러 BIN 디렉토리를 삭제했습니다. 내 소스 코드를 다시 작성하면 그때부터 작동합니다.


폴더 위치에서 이전 어셈블리를 수동으로 삭제 한 다음 새 어셈블리에 참조를 추가하면 도움이됩니다.


오늘도 Entity Framework를 변경 한 후에 Add-Migration을 수행하지 못하는 문제가있었습니다.

내 솔루션에는 두 가지 프로젝트가 있었으며,이를 EF 모델과 컨텍스트를 보유한 클래스 라이브러리 프로젝트 인 "클라이언트"와 "데이터"라고합시다. 클라이언트가 데이터 프로젝트를 참조했습니다.

두 프로젝트에 모두 사인을하고 나중에 EF 모델을 변경했습니다. 서명을 제거한 후 마이그레이션을 추가 할 수 있었고 새 프로젝트에 서명 할 수있었습니다.

나는 이것이 누군가를 위해 유용 할 수 있기를 희망하며, 장기간의 좌절감을 덜어 주길 바랍니다.


나에게 "Local.testtesttings"파일의 코드 커버리지 설정은 문제를 야기했다. 거기에서 참조 된 파일을 업데이트하는 것을 잊었습니다.


방금이 오류가 발생하는 또 다른 이유를 찾았습니다. 특정 라이브러리의 모든 버전에서 내 GAC를 지우고 실행 파일과 함께 배포 된 특정 버전을 참조하여 프로젝트를 빌드했습니다. 프로젝트를 실행할 때이 예외 라이브러리의 새 버전을 검색했습니다.

그 이유는 게시자 정책 이었습니다. GAC에서 라이브러리 버전을 제거 할 때 퍼블리셔 정책 어셈블리를 제거하는 것을 잊어 버렸습니다. 따라서 로컬로 배포 된 어셈블리를 사용하는 대신 GAC에서 어셈블리 로더가 새 버전을 검색하도록 지시 한 게시자 정책을 발견했습니다.


제 경우에는 C : \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \ 디렉토리에있는 이전 버전의 DLL이었습니다. 이전 버전을 삭제하거나 대체하거나 프로젝트의 DLL에 대한 참조를 제거하고 다시 추가 할 수 있습니다. 기본적으로 어느 쪽이든 임시 ASP.NET 파일에 대한 새 포인터를 만듭니다.


제 경우에는 의자와 키보드 사이에 문제가있었습니다 :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

두 개 이상의 서로 다른 어셈블리가 DotNetOpenAuth 라이브러리의 다른 버전을 사용하려고했는데 문제가되지 않았습니다. 또한 내 로컬 컴퓨터에서 web.config가 NuGet에 의해 자동으로 업데이트되었습니다.

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

그런 다음 새 web.config를 프로덕션 서버에 복사 / 배포하는 것을 잊었습니다. 따라서 web.config를 수동으로 배포하는 방법이 있으면 업데이트되었는지 확인하십시오. 프로덕션 서버용 web.config와 완전히 다른 경우 NuGet을 사용한 후 이러한 dependentAssembly 섹션을 동기화해야합니다.


우리에게는이 문제가 다른 문제로 인해 발생했습니다. DevExpress 구성 요소의 라이센스 파일에는이 컴퓨터에 설치되지 않은 구 버전의 구성 요소에 대한 두 행이 포함됩니다. 라이센스 파일에서 이전 버전을 제거하면 문제가 해결됩니다.

성가신 부분은 오류 메시지가 어떤 원인으로 인해 문제를 일으키는 지 알 수 없다는 것입니다.


나는 같은 오류가있어 ... 내 경우에는 다음과 같이 해결 됐어 :

  • 처음에 응용 프로그램이 설치되었을 때 여기 사람들은 응용 프로그램에서 Microsoft Enterprise Library 4.1을 사용했습니다.
  • 지난 주에 제 컴퓨터가 포맷되었고 그 후에 오늘 제가 그 응용 프로그램을 만들었을 때 엔터프라이즈 라이브러리 어셈블리가 없다는 오류가있었습니다.
  • 그런 다음 Google에서 첫 번째 검색 항목으로 얻은 Microsoft Enterprise Library 5.0을 설치했습니다.
  • 그런 다음 응용 프로그램을 빌드하면 위의 오류가 발생했습니다. 즉, 위치한 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.
  • 검색 작업 및 분석을 많이 한 후 응용 프로그램이 4.1.0.0을 참조하고 bin 폴더의 DLL이 5.0.0.0 버전임을 확인했습니다.
  • 내가 한 것은 Microsoft Enterprise Library 4.1을 설치 한 것입니다.
  • 이전 참조 (5.0)를 제거하고 4.0 참조를 추가했습니다.
  • 응용 프로그램을 작성하고 실은 ... 작동했습니다.

필자의 경우이 오류는 ASP.NET 응용 프로그램을 실행하는 동안 발생했습니다. 해결 방법은 다음과 같습니다.

  1. 프로젝트 폴더에서 objbin 폴더 삭제

Clean은 작동하지 않았고, 재 작성은 작동하지 않았으며, 모든 참조는 괜찮 았지만 라이브러리 중 하나를 작성하지 않았습니다. 이러한 디렉토리를 삭제하면 모든 것이 완벽하게 작동합니다.


리플렉션을 사용하여 늦게 바인드하려고하면 바인딩하려는 어셈블리의 이름이 강하거나 공개 키 토큰이 변경된 경우 똑같은 오류가 발생합니다. 실제로 지정된 공용 키 토큰으로 발견 된 어셈블리가 없더라도 오류는 동일합니다.

오류를 해결하려면 올바른 공용 키 토큰을 추가해야합니다 (dll에서 sn -T를 사용하여 가져올 수 있음). 희망이 도움이됩니다.


나는 누군가를 내 전단 어리 석음으로 누리게 할 것이다. 필자는 완전히 별개의 응용 프로그램에 대한 종속성을 가지고 있습니다 (이 App1을 호출합시다). 해당 App1의 dll은 새 응용 프로그램 (App2)으로 가져옵니다. APP1에서 업데이트 할 때마다 새 DLL을 만들어 App2에 복사해야합니다. 잘. . . 나는 두 개의 서로 다른 App1 버전 사이에서 복사하고 붙여 넣는 것에 질려있어 dll에 'NEW_'라는 접두어를 추가했다.

잘. . . 빌드 프로세스가 / bin 폴더를 스캔하고, 잘못 일치하는 부분이있을 때 위와 같은 오류 메시지가 표시됩니다. 내 "new_"버전을 삭제하고 그냥 멋쟁이를 만들었습니다.


다음은 모든 어셈블리 버전을 버전 3.1.0.0으로 리디렉션합니다. App.config에서이 참조를 항상 업데이트하는 스크립트가 있으므로이 문제를 다시 처리 할 필요가 없습니다.

리플렉션을 통해 어셈블리 publicKeyToken을 가져 와서 .dll 파일 자체에서이 블록을 생성 할 수 있습니다.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

XML 네임 스페이스 속성 (xmlns)이 없으면 작동하지 않습니다.


Visual Studio를 사용하는 경우 "솔루션 정리"를 시도한 다음 프로젝트를 다시 작성하십시오.


내부 패키지 저장소를 사용하는 중에이 문제가 발생했습니다. 메인 패키지를 내부 리포지토리에 추가했지만 패키지의 종속성은 추가하지 않았습니다. 의존성, 의존성 의존성, 반복성 등을 내부 리포지토리에 추가해야합니다.


이 주제를 요약하면이 AsyncObservableCollection 은 .NET 4 및 .NET 4.5 WPF 응용 프로그램에서 작동합니다.

using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Windows.Data;
using System.Windows.Threading;

namespace WpfAsyncCollection
{
    public class AsyncObservableCollection<T> : ObservableCollection<T>
    {
        public override event NotifyCollectionChangedEventHandler CollectionChanged;
        private static object _syncLock = new object();

        public AsyncObservableCollection()
        {
            enableCollectionSynchronization(this, _syncLock);
        }

        protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        {
            using (BlockReentrancy())
            {
                var eh = CollectionChanged;
                if (eh == null) return;

                var dispatcher = (from NotifyCollectionChangedEventHandler nh in eh.GetInvocationList()
                                  let dpo = nh.Target as DispatcherObject
                                  where dpo != null
                                  select dpo.Dispatcher).FirstOrDefault();

                if (dispatcher != null && dispatcher.CheckAccess() == false)
                {
                    dispatcher.Invoke(DispatcherPriority.DataBind, (Action)(() => OnCollectionChanged(e)));
                }
                else
                {
                    foreach (NotifyCollectionChangedEventHandler nh in eh.GetInvocationList())
                        nh.Invoke(this, e);
                }
            }
        }

        private static void enableCollectionSynchronization(IEnumerable collection, object lockObject)
        {
            var method = typeof(BindingOperations).GetMethod("EnableCollectionSynchronization", 
                                    new Type[] { typeof(IEnumerable), typeof(object) });
            if (method != null)
            {
                // It's .NET 4.5
                method.Invoke(null, new object[] { collection, lockObject });
            }
        }
    }
}




c# reference compiler-errors dependencies version