Контракты Microsoft Code без Visual Studio - PullRequest
9 голосов
/ 27 ноября 2010

Этот вопрос переполнения стека:

Microsoft Code Contracts и CI build server

спрашивает, как заставить контракты кода работать на сервере сборки без установки Visual Studio 2010. Мы пытаемся сделать то же самое. Мы выполнили шаги, изложенные в принятом ответе, но не смогли заставить его работать.

CodeContracts не будет установлен на сервере сборки, если Visual Studio не присутствует. Итак, следуя предложению, мы сделали следующее:

  1. Мы скопировали содержимое %programfiles%\Microsoft\Contracts\Bin с машины для разработки с установленной Visual Studio 2010 Ultimate и Code Contracts Premium на сервер сборки.
  2. Мы также скопировали папку MSBuild\v4.0, которая содержит Microsoft.CodeContracts.targets и Microsoft.CodeContractAnalysis.targets.

Согласно документации CodeContracts,

Использование msbuild для проекта или решения, использующего контракты, включенные через пользовательский интерфейс VS, будет выполнять те же действия, что и соответствующая сборка в VS.

Это наш вариант использования, мы просто вызываем MSBuild для нашего файла решения, как показано ниже. Файл решения создается в Visual Studio со всеми ожидаемыми параметрами контракта кода, настроенными для перезаписи.

<Target Name="Release">
  <MSBuild Projects = "Cofamilies\WebApplication\CofamiliesWeb.sln" Properties="Configuration=Release" />
</Target>

Но переписчик не вызывается.

У кого-нибудь есть предложения о том, что нам не хватает, и / или предлагаемые шаги по устранению неполадок?

Ответы [ 2 ]

10 голосов
/ 07 января 2011

У меня была такая же проблема с последней версией контрактов кода. Я установил Premium Edition на свой компьютер для разработки и Standard Edition на сервер сборки и получал следующую ошибку из-за того, что Rewriter не работал.

Должен использовать переписчик при использовании Contract.Requires

Похоже, что в стандартной версии отсутствует файл ключа (CodeContractsAfter.targets), который необходим MSBuild для вызова Rewriter.

Решением для меня было скопировать CodeContractsAfter.targets из C: \ Program Files (x86) \ MSBuild \ 4.0 \ Microsoft.Common.Targets \ ImportAfter на мою разработку ПК в соответствующую папку на сервере сборки.

Примечание : Пути были не идентичны, так как мой компьютер для разработки работает под управлением Windows 7 64-битной, а сервер сборки работает под управлением Windows Server 2003 32-битной. Так что вам нужно выяснить точные пути для вашей среды.

Если вы не используете Premium Edition, содержимое файла CodeContractsAfter.targets :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Begin CodeTools: CodeContracts: After -->
  <PropertyGroup>
    <CodeContractsInstallDir Condition="'$(CodeContractsInstallDir)'==''">C:\Program Files (x86)\Microsoft\Contracts\</CodeContractsInstallDir>
  </PropertyGroup>
  <Import Condition="'$(CodeContractsImported)' != 'true' AND '$(DontImportCodeContracts)' != 'true'" Project="$(CodeContractsInstallDir)MsBuild\v4.0\Microsoft.CodeContracts.targets" />

  <!-- End CodeTools: CodeContracts: After -->
</Project>

Просто вставьте вышеперечисленное в файл в указанной папке ImportAfter folder.

3 голосов
/ 15 июня 2016

Вот мое решение . Он основан на выпусках # 368 и stackoverflow: контракты кода Microsoft без Visual Studio

  1. Добавить DotNet.Contracts из nuget;
  2. Добавьте приведенный ниже код в файл вашего проекта:
<PropertyGroup>
  <CodeContractsInstallDir Condition="'$(CodeContractsInstallDir)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\packages\DotNet.Contracts.1.10.20606.1\'))</CodeContractsInstallDir>`
</PropertyGroup>
<Import Condition="'$(CodeContractsImported)' != 'true' AND '$(DontImportCodeContracts)' != 'true'" Project="$(CodeContractsInstallDir)\MsBuild\v$(VisualStudioVersion)\Microsoft.CodeContracts.targets"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...