Silverlight 4, RIA Services & TFS 2010 Build Server - PullRequest
7 голосов
/ 17 марта 2011

У меня есть файл решения Visual Studio 2010 с несколькими проектами. Существует множество проектов Silverlight (выступающих в качестве модулей), проекта Silverlight Shell и ряда служб RIA.

При использовании TFS 2010 для выполнения сборки всегда происходит сбой, поскольку прокси-классы, созданные службами RIA, не были созданы в первую очередь. Единственное решение, которое я видел до сих пор, - это вручную изменить порядок сборки в моем файле .sln. Нет, спасибо, есть множество проектов.

Вместо того, чтобы разбивать решение на стороне клиента и на стороне сервера, я бы хотел найти лучшее решение.

Очевидно, MSBuild 4 игнорирует порядок сборки в файле .sln.

У кого-нибудь есть идеи / предложения?

Спасибо,

Ответы [ 3 ]

9 голосов
/ 26 сентября 2011

Самый простой способ, который я нашел, - это явное объявление зависимости между проектом Silverlight и проектом, на котором размещается служба RIA.

Вам необходимо открыть в текстовом редакторе файл проекта Silverlight и добавить фрагментк нему:

<ItemGroup>
  <ProjectReference Include="..\Path\Your.Hosting.Project\Your.Hosting.Project.csproj">
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  </ProjectReference>
</ItemGroup>

Это сообщит msbuild о создании веб-службы перед созданием приложения Silverlight.И это будет работать только при сборке с помощью msbuild, VS выдаст ошибку.

Чтобы встроить ее также в Visual Studio, вам нужно обернуть этот фрагмент в Target и добавить его в InitialTargets в узле Project:

<Target Name="MySpecialReferences">
  <ItemGroup>
    <ProjectReference Include="..\Path\Your.Hosting.Project\Your.Hosting.Project.csproj">
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
  </ItemGroup>
</Target>

<Project ... InitialTargets="MySpecialReferences" ... >

Visual Studio 2010 пропустит эту цель сейчас, но msbuild будет использовать для изменения порядка сборки проектов.

1 голос
/ 26 мая 2011

Ниже приведен пример скрипта MS Build, который мы используем в нашем проекте. По сути, мы обозначили наш веб-проект (содержащий службы RIA) как приоритетный проект и создаем его первым.

Обратите внимание, что первый тег XML должен находиться где-то на этапе настройки среды.

<ItemGroup>
    <!-- use this collection to control project build order, projects listed in this array are removed from the current build queue and pushed in the front before compilation-->
    <InitialBuildProjects Include="MyProject.Web.RiaServices" />
</ItemGroup>

<ItemGroup>
        <PriorityProjects               Include="$(ProjectRootDirPath)\Sources\%(InitialBuildProjects.Identity)\%(InitialBuildProjects.Identity).csproj" />
        <RemainingSourceProjects        Include="$(ProjectRootDirPath)\Sources\**\*.csproj"
                                        Exclude="@(PriorityProjects)" />
        <SLTestProjects                 Include="$(ProjectRootDirPath)\Tests\*.Web\*.Web.csproj" />
        <BuildQueue             Include="@(PriorityProjects);@(RemainingSourceProjects);@(SLTestProjects)" />
    </ItemGroup>

Работает для нас в частных сборках + на нашем сервере TeamCity.

Помогает ли это?

1 голос
/ 25 мая 2011

Это определенно не является «правильным» решением, но как промежуточный вариант, как насчет проверки сгенерированных файлов Generated_Code\*.g.cs для ваших служб RIA, присутствующих в ваших проектах Silverlight? Если люди проверяют актуальную версию вместе с соответствующими обновлениями для своих DomainService классов, все должны собираться как положено.

...