c# tfs msbuild tfs2012 roslyn

Construir c#6.0 en TFS 2012



msbuild tfs2012 (4)

Intenta usar cualquiera

/p:VisualStudioVersion=14.0

o

/tv:14

En tus argumentos de construcción

¿Cómo puedo crear una solución de Visual Studio 2015 utilizando las características de C # 6.0 en un TFS 2012 sin instalar Visual Studio 2015 en un agente de compilación (utilizando Microsoft Build Tools 2015 RC)?

Ya instalé MSBuild Tools pero todavía tengo excepciones. Cómo puedo indicarle a mi plantilla de compilación que use MSBuild 14 (solo para un proyecto)

¿Y por qué mi TFS 2012 compila async y espera (c # 5.0) sin ningún problema mientras el BuildAgent solo tiene instalado Visual Studio 2012?

Intenté cambiar la ruta de herramientas de mi BuildProcessTemplate a MSBuild / 14.0 / pero me aparece un error de compilación:

C: / Windows / Microsoft.NET / Framework64 / v4.0.30319 / Microsoft.CSharp.targets (316): "csc2.exe" salió con el código -532462766.

La instalación de los compiladores Microsoft.Net.Compilers 1.0.0-rc2 genera el mismo error.

Si compilo el proyecto utilizando la línea de comandos, obtengo exactamente el mismo error / aunque no hay ningún error en mi máquina de desarrollo al usar la línea de comandos con los mismos argumentos exactos.

Esta es la excepción que obtengo en la línea de comando:

C:/Program Files (x86)/MSBuild/14.0/bin/csc2.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentro..... Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program. at System.Collections.Immutable.SecurePooledObject`1.Use[TCaller](TCaller& caller) at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator.PushLeft(SortedInt32KeyNode`1 node) at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator..ctor(SortedInt32KeyNode`1 root) at System.Collections.Immutable.ImmutableDictionary`2.Enumerator..ctor(SortedInt32KeyNode`1 root, Builder builder) at Microsoft.CodeAnalysis.RuleSet.GetDiagnosticOptionsFromRulesetFile(Dictionary`2 diagnosticOptions, String resolvedPath, IList`1 diagnosticsOpt, CommonMessageProvider messageProviderOpt) at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.Parse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths) at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.CommonParse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths) at Microsoft.CodeAnalysis.CommonCompiler..ctor(CommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths) at Microsoft.CodeAnalysis.CSharp.CSharpCompiler..ctor(CSharpCommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths) at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc..ctor(String responseFile, String baseDirectory, String[] args) at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args) at Microsoft.CodeAnalysis.BuildTasks.BuildClient.RunWithConsoleOutput(String[] args, RequestLanguage language, Func`2 fallbackCompiler) at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args) at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc2.Main(String[] args)


La respuesta de Jiří Zídek es correcta, pero faltaba un detalle crucial. Tuve que hacer lo siguiente para que las cosas funcionaran en la Actualización 2 de TFS 2012:

  1. instala Visual Studio 2015 en el servidor de compilación
  2. establezca los MSBuild Arguments en la definición de /p:VisualStudioVersion=14.0 en /p:VisualStudioVersion=14.0 (es decir, en el modo Visual Studio 2015)
  3. en cada proyecto que use la sintaxis C # 6, instale el paquete NuGet Microsoft.Net.Compilers install-package Microsoft.Net.Compilers

Fue el # 3 que hizo la diferencia para mí.



Usé TFS2013 U5, pero será igual:

  • instalado VS2015 RTM en la máquina BuildServer
  • poner esto en los argumentos de MSBuild en la parte de proceso de BuildTemplate

/tv:14.0 / p: GenerateBuildInfoConfigFile = false /p:VisualStudioVersion=14.0

Las pruebas de compilación y de unidad VS ahora se ejecutan bien.