Различия между сборкой на машине с установленным VS2010 и на машине с установленным 7.1 SDK
Мы пытаемся обновить нашу кодовую базу для использования Visual Studio 2010, но у нас возникают проблемы с сортировкой всего на наших серверах сборки. Мы не хотим устанавливать Visual Studio 2010 на наших серверах сборки, поэтому установили только.Net 4 framework и SDK (v7.1).
Мы по-прежнему хотим ориентироваться на платформу.Net 3.5 (в будущем мы перейдем на.Net 4, но пока не хотим).
Нам удалось получить код для компиляции, но теперь мы сталкиваемся с ошибками во время выполнения, такими как следующие.
Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Проблема в том, что среда выполнения пытается десериализовать встроенный ресурс, и если я смотрю на ресурсы в отражателе, я вижу, что все они являются объектами.Net 4.0. Например, значок нашего приложения для Windows имеет тип System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
,
Таким образом, похоже, что MSBuild неправильно компилирует ресурсы (используя другое время выполнения для цели)? Я подтвердил это, посмотрев diff-файлы dll, построенные на моей машине dev и построенные на сервере сборки - ясно, что ресурсы одной dll используют версию 2.0.0.0, а другая (с сервера сборки) использует 4.0.0.0. Ссылки на проект в обоих случаях относятся к dll v2.0.0.0 (как и следовало ожидать).
Кто-нибудь имеет представление о том, почему MSBuild компилирует ресурсы как объекты 4.0?
Заранее спасибо.
Крис
2 ответа
Когда вы обновили свое решение до VS2010, вы изменили целевую среду? Вы можете найти его, просмотрев файлы csproj в текстовом редакторе. У вас есть фреймворк 7.0a на вашем сервере сборки?
РЕДАКТИРОВАТЬ:
Я столкнулся с той же проблемой некоторое время назад, и это связано с тем, что ключ реестра не установлен. Посмотрите здесь: http://connect.microsoft.com/VisualStudio/feedback/details/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-resources
Я думаю, вам нужно вручную добавить раздел реестра HKLM\Software\Microsoft\MsBuild\ToolsVersions\SDK35ToolsPath
Я не уверен, что это помогает, но вижу эту ссылку относительно Требует Framework35SP1 Assembly Task