2010-11-27 10 views
9

Cette pile question de trop-plein:Microsoft Code des marchés sans Visual Studio

Microsoft Code Contracts and CI build server

demande comment obtenir des contrats de travail de code sur un serveur de build sans installer Visual Studio 2010. Nous essayons de faire la même chose. Nous avons suivi les étapes décrites dans la réponse acceptée, mais nous n'avons pas réussi à le faire fonctionner. CodeContracts ne s'installe pas sur le serveur de génération, sauf si Visual Studio est présent. Ainsi, suite à l'idée que nous avons fait ce qui suit:

  1. Nous avons copié le contenu de %programfiles%\Microsoft\Contracts\Bin à partir d'une machine de développement avec Visual Studio 2010 Ultimate et code des marchés haut de gamme installé sur le serveur de build.
  2. Nous avons également copié le dossier MSBuild\v4.0 qui contient Microsoft.CodeContracts.targets et Microsoft.CodeContractAnalysis.targets.

Selon la documentation CodeContracts,

En utilisant msbuild sur un projet ou d'une solution qui utilise des contrats activés via l'interface utilisateur VS effectuer les mêmes actions que la construction correspondante sous VS.

Ceci est notre cas d'utilisation, nous appelons simplement MSBuild sur notre fichier de solution comme ci-dessous. Le fichier de solution est créé via Visual Studio avec toutes les options de contrat de code attendues configurées pour la réécriture.

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

Mais le réécriteur n'est pas appelé.

Est-ce que quelqu'un a une suggestion pour ce qui nous manque et/ou suggère des étapes de dépannage?

Répondre

10

J'ai eu le même problème avec la dernière version de Contrats de code. J'avais installé l'édition Premium sur mon PC de développement et l'édition standard sur le serveur de construction et obtenais l'erreur suivante parce que le graveur ne fonctionnait pas.

doit utiliser le rewriter lors de l'utilisation Contract.Requires <TException>

Il semble que l'édition standard manque un fichier clé de contact (CodeContractsAfter.targets) qui est nécessaire pour MSBuild pour appeler ReWriter .

La solution pour moi était de copier les CodeContractsAfter.targets de C: \ Program Files (x86) \ MSBuild \ 4.0 \ Microsoft.Common.targets \ ImportAfter sur mon PC de développement dans le dossier correspondant sur la construire le serveur.

Remarque: Les chemins d'accès n'étaient pas identiques car mon PC de développement exécute Windows 7 64 bits et le serveur de génération exécute Windows Server 2003 32 bits. Vous aurez donc besoin de trouver les chemins exacts pour votre environnement.

Si vous n'utilisez pas l'édition Premium, le contenu du fichier de CodeContractsAfter.targets est:

<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> 

Il suffit de coller ci-dessus dans un fichier dans le dossier mentionné dossier ImportAfter.

+0

Cela m'a aidé à faire le travail de construction sur un serveur Jenkins construire où VS n'est pas installé, seulement 12,0 MSBuild – bvamos

3

Voici mes solution. Il est basé sur issue #368 et stackoverflow:Microsoft Code Contracts without Visual Studio

  1. Ajouter DotNet.Contracts de NuGet;
  2. Ajouter le code ci-dessous pour votre fichier de projet:
<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"/> 
Questions connexes