VS 2012
프로젝트 유형을 사용 WP 8.0
하여 컴파일 하면 디버거가 연결되지 않으면 다음 코드가 실패합니다.
어떻게 든 디버거가 연결되지 않은 경우 컴파일러 최적화로 인해 내부 코드가 손상됩니다. 코드의 Crash()
주석을 참조하십시오.
Lumia 1520 (8.1) 및 Lumia 630 (8.0) 에서 테스트되었습니다 .
왜 이런 일이 발생하는지 아이디어가 있습니까?
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
Button.Tap += (sender, args) => new A<B, string>(new B(), "string").Crash();
}
}
public class B
{
public void Foo<T>(T val) { }
}
public class A<T1, T2> where T1 : B
{
private T1 _t1;
private T2 _t2;
public A(T1 t1, T2 t2)
{
_t2 = t2;
_t1 = t1;
}
public void Crash()
{
var obs = Observable.Return(_t2);
obs.Subscribe(result =>
{
//CLR is expecting T2 to be System.String here,
//but somehow, after passing through Observable
//T2 here is not a string, it's A<T1, T2>
new List<T2>().Add(result);
});
//Will run normally if commented
_t1.Foo(new object());
}
}
6
Rx 버그가 아닌 컴파일러 버그처럼 보입니다. 생성 된 IL을 검사하기 위해 ILSpy 또는 .NET Reflector를 사용해 보셨습니까?
—
Brandon
Observable.Return<T2>(_t2);
여기서 유형을 결정하기 위해 컴파일러에게 맡기지 않고 사용하려고 합니다. 버그가있을 수 있습니다. 물론, 그것은 긴 기회입니다.
Windows Phone에서 Rx에 많은 문제가 있습니다. 나를 위해 컴파일하고
—
Matthew Haugen
MethodNotFoundException
실제로 포함하는 클래스를 호출하려고 할 때 발생합니다. 나를 위해 VS Update 2의 릴리스 버전으로 업그레이드하는 것이 효과적이었습니다. 실제로 무엇이 잘못되었는지는 아직 모르겠지만 모든 것에 최신 업데이트를 사용하고 있는지 확인하십시오. 분명히 우리의 문제는 약간 다르지만 지침을 제공하는 데 도움이 될 수 있습니다.
질문은 무엇입니까- '어떤 아이디어?' -충돌을 멈추는 방법을 알고 싶습니까?
—
Tim Lovell-Smith
_t1.Foo <missing type here> (그리고 여기에도);
—
akbar ali