J'ai un projet que le framework cible .NET Framework 4.6.1
, dans le cadre du processus d'intégration continue sur le fichier tfs, nous avons créé une tâche de génération de solution pour nous assurer que le code est compilé correctement.
Le serveur TFS dispose maintenant de la dernière version du .Net Famework 4.6.2
. Sur le registre, valeur de la clé Release du framework.
Sur toutes les autres versions de système d'exploitation: 394806 => .NET Framework 4.6.2
Mais lorsque la compilation est exécutée, cette erreur est générée:
Error CS1056: Unexpected character '$'
Je ne veux pas remplacer l'interpolation de chaîne par le string.Format
pour résoudre ce problème, veuillez fournir une autre solution de contournement pour le résoudre.
Dois-je installer quelque chose d'autre sur le serveur TFS?
Le problème peut être résolu en installant un paquet Nuget Microsoft.Net.Compilers. Vous trouverez ci-dessous le lien de ma réponse en surbrillance: Le projet fonctionne correctement avec Visual Studio mais échoue à partir de la ligne de commande
Cette fonctionnalité est un sucre syntaxique pour C # 6, essayez d’installer la dernière version version du framework 4.6.2 https://www.Microsoft.com/en-us/download/details.aspx?id=53345
Ensuite, allez dans les propriétés de votre projet et modifiez-le dans l’application option sur le cadre cible pour pointer vers la dernière. Vous n'avez pas besoin de modifiez votre code pour remplacer l'interpolation de chaîne par string.Format pour le corriger. Si vous obtenez toujours cette erreur, En effet, le compilateur qui exécute votre construction n’est pas le dernier version de C #, essayez d’ajouter Microsoft.Net.Compilers, de Nuget et compiler à nouveau, cela devrait résoudre le problème. Si vous voulez éviter de Installez ce paquet, essayez d’ouvrir votre .csproj et jetez un coup d’œil sur le fichier ToolsVersion.that devrait pointer vers la version 12, puis changez-la 14, mais assurez-vous d’avoir installé la dernière version du MSBuild de https://www.Microsoft.com/en-us/download/details.aspx?id=48159 ou rendez-vous dans C:\Program Files (x86)\MSBuild\14.0\Bin, voici ce que vous devriez avoir dossier avec le compilateur csc.exe. Si même cela ne résout pas le problème le problème, puis essayez de suivre ces étapes https://msdn.Microsoft.com/en-us/library/bb383985.aspx .
D'après mon expérience, j'ai résolu ce problème de 3 manières différentes:
1- vient de recevoir le paquet de Nuget
2- installation de Microsoft Build Tools 2015 sur le serveur tfs
3- Le sledgehammer et les dernières options, mais pour moi le meilleur car vous n'avez pas besoin de gérer la dépendance à Nuget, installe la version de Visual Studio sur le serveur tfs sur lequel vous exécutez le processus.
J'espère que cela t'aides
Après avoir installé MS Build Tools 2015 dans %ProgramFiles%\MSBuild\14.0\bin
, vous devez remplacer la version de MSBuild pour le serveur de génération avec la nouvelle valeur (14.0
).
Vous devriez lire l'article MSDN (ou cette réponse ), mais TL; DR vos options sont les suivantes:
Remplacez la version à l'aide du commutateur /ToolsVersion
(ou /tv
, en abrégé) lorsque vous générez le projet ou la solution à partir de la ligne de commande:
msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
Remplacez la version en définissant le paramètre ToolsVersion
sur la tâche MSBuild
:
<MSBuild Projects="myProject.proj"
ToolsVersion="14.0"
Targets="go" />
Remplacez la version en définissant la propriété $(Project.ToolsVersion)
sur un projet dans une solution. Cela vous permet de construire un projet dans une solution avec un ToolsetVersion
différent de celui des autres projets:
<Project ToolsVersion="14.0" ... </Project>
L'ordre de priorité, du plus haut au plus bas, utilisé pour déterminer le
ToolsVersion
est le suivant:
- L'attribut
ToolsVersion
de la tâcheMSBuild
utilisée pour générer le projet, le cas échéant.- Le commutateur
/toolsversion
(ou/tv
) utilisé dans la commandemsbuild.exe
, le cas échéant.- Si la variable d'environnement
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
est définie, utilisez leToolsVersion
actuel.- Si la variable d'environnement
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
est définie et queToolsVersion
défini dans le fichier de projet est supérieur à la valeur actuelle deToolsVersion
, utilisez la valeur actuelle deToolsVersion
.- Si la variable d'environnement
MSBUILDLEGACYDEFAULTTOOLSVERSION
est définie ou siToolsVersion
n'est pas défini, les étapes suivantes sont utilisées:
- L'attribut
ToolsVersion
de l'élémentProject
du fichier de projet. Si cet attribut n’existe pas, il est supposé être la version actuelle.- La version par défaut des outils dans le fichier
MSBuild.exe.config
.- La version des outils par défaut dans le registre. Pour plus d'informations, voir Configurations d'outils standard et personnalisées .
- Si la variable d'environnement
MSBUILDLEGACYDEFAULTTOOLSVERSION
n'est pas définie, les étapes suivantes sont utilisées:
- Si la variable d'environnement
MSBUILDDEFAULTTOOLSVERSION
est définie sur unToolsVersion
qui existe, utilisez-la.- Si
DefaultOverrideToolsVersion
est défini dansMSBuild.exe.config
, utilisez-le.- Si
DefaultOverrideToolsVersion
est défini dans le registre, utilisez-le.- Sinon, utilisez le
ToolsVersion
actuel.
Il se peut que vous construisiez avec le mauvais MSbuild.exe; faites la compilation dans Visual Studio (où cela fonctionne) et vérifiez les journaux dans Output. Il devrait y avoir quelque chose comme:
1>Target "GetReferenceAssemblyPaths" in file "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets"
Assurez-vous que vous utilisez MSBuild.exe dans ce répertoire Bin, dans mon cas;
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
Je suppose que vous avez du code avec des interpolations de chaînes et que vous n'avez pas les outils de construction proper .
Microsoft.Net.Compilers n'a pas fonctionné, mais l'installation de DotNetCompilerPlatform de Nuget a fonctionné.
Ma solution était en 2 parties:
1) À l’aide de Visual Studio 2015, sélectionnez votre projet Web, cliquez sur le menu Projet , sélectionnez "Activer C # 6".
2) J'avais besoin d'ajouter ce qui suit à la fin de mon web.config de production, juste avant la balise de fermeture de la configuration. Notez que les numéros de version peuvent changer à l'avenir, mais il est essentiel de rechercher un texte similaire dans votre développement web.config après l'activation à l'étape 1 et de vous assurer qu'il est transféré en production.
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>