2012-03-07 32 views
6

Chúng tôi đã cài đặt Visual Studio 2010 SP1 và Async CTP (SP1 làm mới).MSBuild không tìm thấy tài liệu tham khảo bắt buộc không đồng bộ

Giải pháp với các dự án sử dụng các từ khóa async/await xây dựng OK khi xây dựng từ VS IDE. Ngoài ra khi được xây dựng với devenv /build "Debug" solution.sln mọi thứ đều OK.

Tuy nhiên msbuild @commands.rsp solution.sln báo cáo:

File.xaml.cs(123): error CS1993: Cannot find all types required by the 'async' modifier. Are you targeting the wrong framework version, or missing a reference to an assembly? 

commands.rsp trông như thế này:

/nologo 
/p:Configuration=Debug 
/m:3 
/fileLogger 

Bất kỳ manh mối?

+0

Bạn có thể đăng lệnh.rsp không? – KMoraz

Trả lời

4

hãy, hãy tham khảo các cuộc thảo luận ở đây: http://social.msdn.microsoft.com/Forums/uk-UA/async/thread/3d491cb0-a19f-4faf-80a6-5fd05e4e06db

Có 2 điểm phải được làm rõ để hiểu rõ hơn về vấn đề của bạn:

  • Môi trường: bạn đã cài đặt VS11 side-by-side với VS 2010 + Async CTP?
  • Dự án của bạn: bạn có XAML với các điều khiển người dùng và "không gian tên clr" trong dự án của bạn không?

Tôi sẽ trích dẫn kết luận sơ bộ của SERware từ các cuộc thảo luận trên diễn đàn MS:

tôi nghĩ rằng nó đã làm với thứ tự mà các XAML dự án lập hội khi đề cập đến các lớp học của chính thư viện. Trong trường hợp này, Trình tải XAML cố gắng biên dịch các lớp này trước khi có tham chiếu vào thư viện Async CTP. Vì vậy, từ khóa "async" không được nhận dạng là .

Cá nhân tôi sẽ xem liệu nó có thể chia lắp ráp để giải quyết theo thứ tự của việc biên soạn các phụ thuộc trong XAML

vào sau khi điều tra thêm: Như tôi đã phát hiện ra, giải thích thậm chí còn đáng thất vọng hơn: .NET 4.5 (Beta) thay thế .NET 4.0. Bên cạnh đó, chữ ký của các loại liên quan đến async/wait đã được thay đổi nội bộ. Do đó không có cách nào cho đến nay để sử dụng đồng thời VS 2010 + AsyncATP và VS11 Beta. - Yuri S. 2 phút trước

+0

Điểm đầu tiên, Có Tôi đã cài đặt VS11. Tuy nhiên, người bạn của tôi thì không, và anh ta có lỗi tương tự. Ở điểm thứ hai, tất cả các cuộc gọi async/await trong trường hợp của chúng ta đều ở trong ViewModel, vì vậy chúng không có một đối tác xaml (ví dụ lỗi của tôi có gây hiểu lầm bởi vì tôi không có chúng ta trong scrollback anyways và đó là giống như mô tả và mã lỗi) –

+0

Như tôi đã tìm ra, giải thích là đáng thất vọng hơn nữa: .NET 4.5 (Beta) thay thế .NET 4.0 Bên cạnh đó, chữ ký của các loại liên quan không đồng bộ/chờ đã được thay đổi nội bộ . Do đó không có cách nào cho đến nay để sử dụng đồng thời VS 2010 + AsyncATP và VS2011 Beta. –

0

Tôi đã bị ảnh hưởng bởi bản thân mình và vì nhiều lý do tôi không thể nâng cấp các dự án lên .NET 4.5 nên tôi phải phát triển cách giải quyết.

Vì đây chỉ là vấn đề đối với các dự án XAML có khai báo xmlns trỏ đến chính tôi, tôi có thể sử dụng async trên tất cả các dự án khác được tham chiếu. Điều này có nghĩa là kiến ​​trúc của tôi vẫn đang sử dụng async/await và được chuẩn bị để chuyển sang .NET 4.5 sau này.

Nhưng trong các dự án XAML bị ảnh hưởng, tôi chỉ thực hiện thủ công (kém) những thứ chờ đợi khác được thực hiện bởi trình biên dịch.

Vì vậy, mã đó là này sạch trước:

try 
{  
    var foo = GetFoo(); 
    foo.DoStuff(); 
    var data = await foo.GetDataAsync(); 
    bar.WorkOnData(data); 
} 
catch (Exception ex) 
{ 
    // Logging, throw up a popup, whatever... 
    HandleError("Failed to get data", ex); 
} 

Bây giờ trở này:

var foo = GetFoo(); 
foo.DoStuff(); 
var getDataTask = foo.GetDataAsync(); 
getDataTask.ContinueWith(t => 
    { 
     if (t.IsFaulted) 
     { 
      // Logging, throw up a popup, whatever... 
      HandleError("Failed to get data", t.Exception); 
      return; 
     } 
     if (t.Status == TaskStatus.RanToCompletion) 
     { 
      bar.WorkOnData(t.Result); 
     } 
    }); 

Không lý tưởng tất nhiên, và đây là điều chính xác mà async/await được tạo ra để giải quyết. Nhưng nó hoạt động như một giải pháp ngắn hạn ít nhất cho việc sử dụng đơn giản là await.

Các vấn đề liên quan