Сборка с помощью msbuild и динамически устанавливаемые ссылки на проекты - PullRequest
8 голосов
/ 13 мая 2009

У меня есть несколько проектов, которые ссылаются на сборки SQL Server. В SQL Server 2005 и SQL Server 2008 я в настоящее время поддерживаю 2 файла проекта, которые указывают на одни и те же исходные файлы, и единственным отличием являются ссылки на сборки SQL Server.

Есть ли способ, которым я могу поддерживать только один проект и динамически указывать ссылки в моем скрипте сборки?

Ответы [ 2 ]

17 голосов
/ 03 декабря 2009

В поисках решения той же проблемы, что и у вас, я пришел к предлагаемому решению о наличии условия в ItemGroup. Но это имело побочный эффект, потому что в ссылках Visual Studio я мог видеть обе ссылки, что также повлияло на ReSharper.

Я, наконец, использую «Выбрать, когда в противном случае», и у меня больше нет проблем с ReSharper и Visual Studio, показывающими две ссылки.

<Choose>
  <When Condition=" '$(Configuration)' == 'client1DeployClickOnce' ">
    <ItemGroup>
        <ProjectReferenceInclude="..\client1\app.Controls\app.Controls.csproj">
        <Project>{A7714633-66D7-4099-A255-5A911DB7BED8}</Project>
        <Name>app.Controls %28Sources\client1\app.Controls%29</Name>
      </ProjectReference>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <ProjectReference Include="..\app.Controls\app.Controls.csproj">
        <Project>{2E6D4065-E042-44B9-A569-FA1C36F1BDCE}</Project>
        <Name>app.Controls %28Sources\app.Controls%29</Name>
      </ProjectReference>
    </ItemGroup>
  </Otherwise>
</Choose>

Вы можете прочитать больше об этом в моем блоге: Ссылка на проект с условием в вашем файле проекта MSBuild

5 голосов
/ 14 мая 2009

Каждый элемент MSBuild ( ok почти каждый ) может иметь Условие , связанное с ним. Я хотел бы предложить вам отредактировать файл проекта (который сам является файлом MSBuild) и поместить все ссылки на SQL-сервер в ItemGroup, для которой есть условие, например:

  <ItemGroup Condition="'$(SqlServerTargetEdition)'=='2005'">
    <!-- SQL Server 2005 References here -->
    <Reference Include="..."/>
  </ItemGroup>

И еще одна ItemGroup для Sql server 2008:

  <ItemGroup Condition="'$(SqlServerTargetEdition)'=='2008'">
    <!-- SQL Server 2008 References here -->
    <Reference Include="..."/>
  </ItemGroup>

Вы должны предоставить значение по умолчанию для свойства SqlServerTargetEdition, прежде чем эти элементы будут объявлены. Затем в командной строке вы можете переопределить это значение с помощью ключа / p при вызове msbuild.exe .

Сайед Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...