2

У меня проблема с установкой VS-SP1 и Async CTP V3 на моей машине. По какой-то причине это приводит к сбою любого приложения .NET, которое я запускаю на этой машине. (хорошо, что я использую виртуальную машину, и я могу откатиться).Использование Async V3 без его установки

Я скопировал файл csc.exe обновления в каталог .NET framework 4 в каталоге Windows.

Когда я строю свой проект с msbuild из командной строки, все строит и отлично работает.

Когда я скомпилировал тот же проект из VS2010, я получаю ошибку времени компиляции, что ключевое слово async неизвестно.

Мне все равно, что VS не выделяет синтаксис async и ждет, но меня беспокоит, что мне нужно построить проект из командной строки.

  1. Как работает командная строка csc, но при использовании VS это не так?

  2. Как изменить VS для правильной сборки асинхронного кода (без установки самого Async CTP)?

Спасибо,

Идо.

+0

Почему бы вам не использовать VS2012? – svick

+1

Мое предположение для вопроса 1 состоит в том, что VS не имеет оболочки для вызова 'csc', но программным путем вызывает компилятор из своих собственных DLL. – millimoose

+0

VS использует MSBuild, который должен использовать csc. Я также включил уровень журнала для диагностики, и он показывает, что он использует правильный csc.exe –

ответ

3

VS2012 и асинхронным нацеливание пакет является лучшим вариантом, по следующим причинам:

  1. Синтаксис такой же, как и в C# 5, что делает обновление до C# 5 легче. Async CTP имеет достаточно различий (TaskEx вместо классов Task, TaskAsync вместо суффиксов Task, параметров токена и т. Д.), Что делает обновление неприятным. Не сложно, просто неприятность
  2. Поведение Await/async намного лучше и ближе к C# 5. В Async CTP исключение, которое происходит внутри цикла, приведет к полному отказу всего цикла. См. Retry a task для сценария, на который это влияет.
  3. Нет проблем с установкой. Async CTP и VS 2010 SP1 должны были быть установлены в определенном порядке, чтобы избежать проблем.
  4. Вы можете рассчитывать на какую-то поддержку со стороны MS для пакета таргетинга, в то время как для пакета Async вы можете ничего не ожидать.

Небольшой нюанс является то, что установка VS2012 на машине с VS2010 + асинхронным CTP ломает Async CTP. Вы не сможете использовать версию VS2010 для компиляции кода Async.

В качестве примера, когда поведение асинхронно важно, рассмотрите следующий очень простой способ повторной задачи. В то время как функция компилируется с асинхронным CTP, он терпит неудачу беззвучно (как в прекращении применения беззвучно), если происходит исключение:

private static async Task<T> Retry<T>(Func<T> func, int retryCount) 
{ 
    while (true) 
    { 
     try 
     { 
      var result = await Task.Run(func); 
      return result; 
     } 
     catch 
     { 
      if (retryCount == 0) 
       throw; 
      retryCount--; 
     } 
    } 
} 

Это сказало, я использую Async CTP для более года и единственной проблемой был установочный заказ после добавления Visual Studio 2010 SP1. Если вы получите неправильный порядок, Asycn CTP не будет установлен, и вам придется удалить SP1 и переустановить все в правильном порядке.

Тем не менее, я бы переехал в 2012 году и в таргетинг-пакет, как только это станет практичным (т. Е. Вся команда готова к переключению), чтобы избежать нескольких версий кода и раздражающего поведения исключений.

+0

спасибо за подробный ответ. Думаю, я сейчас перееду на VS2012 –

Смежные вопросы