Сбой сборки Team City после обновления до VS 2010

У меня есть проект, который в настоящее время успешно компилируется на моей машине разработки с использованием VS 2010 (предположительно с использованием MSBUILD v4.0), но он не работает под MSBUILD v3.5 в Team City (работает на виртуальной машине на базе сервера Win 2003 с .NET 2). , 3.5 и 4 установлены). Этот проект был недавно обновлен до версии 2010, и теперь его сборка CI не работает. Я гуглил это и пробовал все очевидное (плюс несколько вещей, которые не имели смысла), и ничего не повлияло на результат.

Проект завершается с ошибкой, подобной этой:

error CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)

В решении есть множество других проектов, использующих System.Core, System.Data.Linq и System.Xml.Linq, и все они компилируются без проблем. Рассматриваемый проект является веб-приложением и имеет следующие настройки в разделе конфигурации/system.web/compilation/assemblies:

    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Плюс следующее в том же файле:

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
      <providerOption name="CompilerVersion" value="v3.5"/>
      <providerOption name="WarnAsError" value="false"/>
    </compiler>
  </compilers>
</system.codedom>

Рассматриваемый проект, IIRC, единственный проект в моем решении, который одновременно является веб-приложением и подвергается постобработке с помощью PostSharp (v1.5). PostSharp настроен в .csproj следующим образом:

<PropertyGroup>
  <DontImportPostSharp>True</DontImportPostSharp>
  <PostSharpUseCommandLine>True</PostSharpUseCommandLine>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(POSTSHARP15)\PostSharp-1.5.targets" />

Не знаю, как это может быть связано, но на всякий случай.

Любые идеи о том, что вызывает эту ошибку или о том, как обойти эту проблему?

ТИА


person Andrew Matthews    schedule 21.06.2010    source источник


Ответы (2)


Решено:

Добавлять ссылки в файл web.config бессмысленно, потому что PostSharp вступает в игру до того, как ASP.NET выполнит какую-либо собственную компиляцию, поэтому отсутствие ссылки на ссылку System.Core приводит к сбою системы (я не понятно почему).

Решение состоит в том, чтобы вручную отредактировать файл csproj для неудачного проекта и вручную добавить в проект ссылку на System.Core. Вы не можете сделать это из обозревателя решений, потому что он запрещает добавлять ссылки, которые должны добавляться MSBUILD автоматически.

До сих пор не уверен, почему это не удалось, но, по крайней мере, теперь он снова компилируется и проходит тесты.

person Andrew Matthews    schedule 21.06.2010

Вы переключили MSbuild на v4.0 в teamcity? Я не думаю, что вы можете создать проект 2010 года с .Net 4.0, используя MSbuild 3.5 в teamcity.

person MBU    schedule 21.06.2010
comment
Привет, Майк, на самом деле я решил оставить фреймворк версии 3.5 и могу создавать файлы с набором инструментов = 4.0, как если бы они были с набором инструментов = 3.5 (фреймворк адаптируется соответственно) - person Andrew Matthews; 21.06.2010