2
votes

MSBuild échoue à compiler mais transmet Visual Studios 2017

Mon projet se construit avec succès dans VS2017 mais échoue sur Jenkins en utilisant un ancien MSBuild (v14.0 C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe). Le journal des erreurs montre qu'il manquait des caractères tels que des points-virgules et des accolades. J'ai examiné les fichiers où ils échouaient et la plupart des "erreurs" faisaient référence à cet appel de méthode ci-dessous.

public TProxy GetOrCreateProxy<TProxy, TModel>(TModel navModel, Func<TModel, ProxyCache, TProxy> proxyConstructor)
            where TProxy : ModelProxyBase<TModel>
            where TModel : IDatabaseEntity
        {
            TProxy navProxy = null;

            // Set the navigation property if it already exists in the cache by model
            if (this.TryGetProxyByModel<TProxy, TModel>(navModel, out var existingProxy))
                navProxy = existingProxy;
            else if (navModel != null)
            {
                // Else try loading by id
                if (this.TryGetProxyById<TProxy, TModel>(navModel.Id, out existingProxy))
                    navProxy = existingProxy;
                // Else create a
                else
                    navProxy = proxyConstructor(navModel, this);
            }

            return navProxy;
        }
if (cache.TryGetProxyById<ResultTagTypeProxy, ResultTagType>(this.ResultTagTypeId, out var existingTagType))
                this.ResultTagType = existingTagType;

Je pense que le problème vient du fait que MSBuild ne prend pas en charge les nouvelles fonctionnalités C # 7 et j'aurais besoin de télécharger un nouveau MSBuild. J'ai utilisé chocolatey pour installer mes packages et j'ai installé 'microsoft-build-tools'.

Utilisation du nouveau MSBuild dans le chemin des outils de construction (C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ MSbuild.exe), j'ai découvert qu'il y avait différentes erreurs de compilation. La première erreur était qu'un de mes projets avait besoin d'un référencé à netstandard 2.0. Après avoir corrigé cette référence, plus de références n'ont pas pu être trouvées dans mon projet Functional Tests.

Je me demandais si ce changement (passage de MSBuild 14.0 à MSBuild 15.0) était attendu. Tout jusqu'au projet de test fonctionnel se compile avec succès ...


3 commentaires

On dirait que vous utilisez les fonctionnalités C # 7 avec out var existingTagType . Pour autant que je sache, vous devrez passer à MSBuild 15.0 pour prendre en charge cela.


Voir aussi: stackoverflow.com/questions/43258130/...


Bonjour ami, avez-vous une mise à jour pour ce problème? Il vous suffit de vérifier si les réponses fournies vous ont été utiles. Veuillez nous faire savoir si vous souhaitez une assistance supplémentaire.


3 Réponses :


1
votes

Vous devez utiliser la version VS 2017 (outils de construction) de msbuild.exe qui se trouve dans le dossier d'installation de VS 2017 et non dans C: \ Program Files (x86) \ MSBuild. Je suggère d'utiliser vswhere pour localiser le chemin vers msbuild.exe.

Vous pouvez également utiliser le package NuGet Microsoft.Net.Compilers dans votre projet pour obtenir le dernier compilateur C # pour remplacer ceux par défaut utilisés par MSBuild / Visual Studio, mais il remplacera également le ensemble d'outils pendant le développement, ralentissant un peu la compilation et provoquant différents diagnostics et comportements de construction.


0 commentaires

1
votes

Je me demandais si ce changement (passage de MSBuild 14.0 à MSBuild 15,0) est attendu. Tout jusqu'au projet de test fonctionnel se compile avec succès ...

1.Nous recommandons toujours d'utiliser des outils msbuild dont la version correspond à la version vs.

Puisque votre projet vient de VS2017 et s'y intègre bien. Lorsque vous avez besoin de le construire en dehors de VS IDE, le paquet Build tools for VS2017 (Msbuild 15.0) devrait être le bon choix.

ps: VS2015 <=> MSBuild14.0, VS2017 <=> MSBuild15.0

Chemin par défaut pour msbuild.exe dans le package build tools for vs2017 : C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin

2. De plus, comme décrit dans le commentaire de Jonathon, pour prendre en charge les fonctionnalités C # 7, nous devons utiliser la version Msbuild15.0.

En supposant que vous ayez deux projets (A et B, A utilise C # 7 et B non). Dans votre serveur CI, vous pouvez utiliser msbuild14.0 pour construire B mais pas A, si vous avez msbuild15.0, vous pouvez utiliser il pour construire A et B et etc.

Je pense donc que passer de 14.0 à 15.0 est un choix attendu.

En plus:

Créez un nouveau projet C # dans vs, et faites un clic droit sur Projet => Propriétés => Build => Avancé, vous pouvez trouver la liste des versions linguistiques.

Première photo pour vs2015 et msbuild14.0 et deuxième pour vs2017 et msbuild15.0:

 entrez la description de l'image ici  entrez la description de l'image ici


0 commentaires

1
votes

Vous msbuild14 est Visual Studio 2015 Vous devez utiliser msbuild15.


0 commentaires