VS2008에서 프로젝트를 빌드 할 때 정말 이상한 문제가 있습니다. 완전히 관련없는 변경 사항을 적용한 결과 빌드 오류가 발생하기 시작했습니다. 기본적으로 컴파일러는 잘못된 확장 메서드를 선택합니다.C# VS2008 컴파일러가 잘못 선택되었습니다.
Assembly1 : 참조 Assembly4.
[DebuggerHidden]
public static List<T> ToList<T>(this IEnumerable<T> source)
{}
[System.Runtime.InteropServices.ComVisible(false), CLSCompliant(false)]
public static List<T> ToList<T>(this IConcreteCollection collection)
{}
Assembly3
: 만 Assembly1를 참조합니다. CustomClass는 IConcreteCollection을 구현하지 않습니다.List<CustomClass> list = new CustomClass[].ToList();
Assembly4 : IConcreteCollection를 정의했다.
오류 메시지 :
유형 'Assembly4.Namespace.IConcreteCollection는' 는 참조되지 않은 어셈블리에 정의되어 있습니다. 어셈블리 'Assembly4.Namespace, Version = ...'에 참조를 추가해야합니다. 당신이 볼 수 있듯이
는 Assembly3 잘못 유형이 일치하지 않는다는 사실에도 불구하고, Assembly1에서 잘못된 확장을 사용하려고했다.
그러나 VS2008 goto 정의는 올바르게 작동하지만 Assembly1의 올바른 방법을 가리 킵니다.
다른 사람이이 문제를 경험했거나 문제가 무엇인지 알면 누구나 가능합니까?
IConcreteCollection은 어디에 정의되어 있습니까? 세 가지 어셈블리 모두에서 유형에 대한 전체 * 예제를 제공 할 수 있다면 도움이됩니다. –
@Jon : 사과. IConcreteCollection은 다른 어셈블리 (예 : Assembly4)에 정의되며이 예제에서는 Assembly2에서만 참조됩니다. – Ian
* 아무 것도 * Assembly2에 대한 참조가 있습니까? 이것은 매우 이상하게 들리지만 완전한 예제가 실제로 도움이 될 것입니다. 완전히 깨끗한 빌드를하면 문제가 해결됩니까? –