web-dev-qa-db-de.com

Fehler CS1056: Unerwartetes Zeichen '$' zur Ausführung von msbuild in einem kontinuierlichen tfs-Integrationsprozess

Ich habe ein Projekt, auf das das Framework auf .NET Framework 4.6.1 abzielt. Als Teil des kontinuierlichen Integrationsprozesses für die tfs haben wir eine Build Solution-Task erstellt, um sicherzustellen, dass der Code korrekt kompiliert wird.
Der TFS-Server verfügt jetzt über die neueste Version von .Net Famework 4.6.2. Im Register ist dies der Wert für den Freigabeschlüssel des Frameworks

Bei allen anderen Betriebssystemversionen: 394806 => .NET Framework 4.6.2

Wenn der Build jedoch ausgeführt wird, kommt dieser Fehler:

Error CS1056: Unexpected character '$'

Ich möchte die Zeichenfolgeninterpolation nicht durch string.Format ersetzen, um dieses Problem zu lösen. Bitte geben Sie eine andere Problemumgehung an, um das Problem zu lösen.

Muss ich noch etwas auf dem TFS-Server installieren?

23
Heinrich

Das Problem kann behoben werden, wenn ein Nuget-Paket Microsoft.Net.Compilers installiert wird. Nachfolgend finden Sie den Link meiner hervorgehobenen Antwort: Project kann mit Visual Studio erstellt werden, schlägt jedoch über die Befehlszeile aus

Diese Funktion ist ein syntaktischer Zucker für C # 6. Versuchen Sie, das neueste .__ zu installieren. Version des Frameworks 4.6.2 https://www.Microsoft.com/de-de/download/details.aspx?id=53345

Gehen Sie dann zu Ihren Projekteigenschaften und ändern Sie in der Anwendung Option auf Target Framework, um auf das neueste zu zeigen. Sie müssen nicht Ändern Sie Ihren Code, um die String-Interpolation durch .__ zu ersetzen. string.Format-Methode, um das Problem zu beheben. Wenn Sie diesen Fehler immer noch erhalten, wird Der Compiler, auf dem Ihr Build ausgeführt wird, ist nicht der neueste Version von C #, versuchen Sie, die Microsoft.Net.Compilers von Nuget und .__ hinzuzufügen. erneut kompilieren, das sollte das Problem beheben. Wenn Sie vermeiden möchten, __. Installieren Sie dieses Paket, versuchen Sie, Ihre .csproj zu öffnen, und werfen Sie einen Blick auf die ToolsVersion.Dies sollte auf die Version 12 zeigen und diese dann ändern bis 14, aber stellen Sie sicher, dass Sie die neueste Version von .__ installiert haben. MSBuild von https://www.Microsoft.com/de-de/download/details.aspx?id=48159 oder go in C:\Programme (x86)\MSBuild\14.0\Bin, dort sollten Sie diese .__ haben. Ordner mit dem Compiler csc.exe. Wenn auch dann das nicht aufgelöst wird versuchen Sie dann, diese Schritte auszuführen https://msdn.Microsoft.com/de-de/library/bb383985.aspx .

Nach meiner Erfahrung habe ich dieses Problem auf 3 verschiedene Arten gelöst:

1- Nur das Paket von Nuget bekommen

2- Installieren von Microsoft Build Tools 2015 auf dem tfs-Server

3- Der Vorschlaghammer und die letzten Optionen, aber für mich die beste, weil Sie sich nicht mit der Abhängigkeit von Nuget beschäftigen müssen, ist die Installation der Visual Studio-Version auf dem TFS-Server, auf dem Sie den Prozess ausführen.

Hoffe das hilft

19
Zinov

Nach der Installation der MS Build-Tools 2015 in %ProgramFiles%\MSBuild\14.0\bin müssen Sie die MSBuild-Version für Build Server mit dem neuen Wert (14.0) überschreiben.

Sie sollten den MSDN-Artikel lesen (oder diese Antwort ), aber TL; DR Ihre Optionen sind:

  • Überschreiben Sie die Version mithilfe des Befehls /ToolsVersion (oder kurz /tv), wenn Sie das Projekt oder die Projektmappe von der Befehlszeile aus erstellen: 

    msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
    
  • Überschreiben Sie die Version, indem Sie den Parameter ToolsVersion für die Task MSBuild festlegen: 

    <MSBuild Projects="myProject.proj"  
        ToolsVersion="14.0"  
        Targets="go" />
    
  • Überschreiben Sie die Version, indem Sie die Eigenschaft $(Project.ToolsVersion) für ein Projekt in einer Lösung festlegen. Dadurch können Sie ein Projekt in einer Lösung mit einem ToolsetVersion erstellen, das sich von dem der anderen Projekte unterscheidet:

    <Project ToolsVersion="14.0" ... </Project>  
    

Die Prioritätsreihenfolge (vom höchsten zum niedrigsten), die zur Bestimmung von ToolsVersion verwendet wird, lautet: 

  1. Das ToolsVersion-Attribut der MSBuild-Task, die zum Erstellen des Projekts verwendet wird, sofern vorhanden.
  2. Der /toolsversion (oder /tv) Schalter, der im Befehl msbuild.exe verwendet wird, sofern vorhanden.
  3. Wenn die Umgebungsvariable MSBUILDTREATALLTOOLSVERSIONSASCURRENT gesetzt ist, verwenden Sie die aktuelle ToolsVersion.
  4. Wenn die Umgebungsvariable MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT gesetzt ist und die in der Projektdatei definierte ToolsVersion größer als die aktuelle ToolsVersion ist, verwenden Sie die aktuelle ToolsVersion.
  5. Wenn die Umgebungsvariable MSBUILDLEGACYDEFAULTTOOLSVERSION gesetzt ist oder wenn ToolsVersion nicht festgelegt ist, werden die folgenden Schritte verwendet:
    • Das ToolsVersion-Attribut des Project - Elements der Projektdatei. Wenn dieses Attribut nicht vorhanden ist, wird davon ausgegangen, dass es sich um die aktuelle Version handelt.
    • Die Standardwerkzeugversion in der MSBuild.exe.config-Datei.
    • Die Standardwerkzeugversion in der Registrierung. Weitere Informationen finden Sie unter Standard- und benutzerdefinierte Toolset-Konfigurationen .
  6. Wenn die Umgebungsvariable MSBUILDLEGACYDEFAULTTOOLSVERSION nicht festgelegt ist, werden die folgenden Schritte verwendet:
    • Wenn die Umgebungsvariable MSBUILDDEFAULTTOOLSVERSION auf einen vorhandenen ToolsVersion gesetzt ist, verwenden Sie sie.
    • Wenn DefaultOverrideToolsVersion in MSBuild.exe.config eingestellt ist, verwenden Sie es.
    • Wenn DefaultOverrideToolsVersion in der Registrierung festgelegt ist, verwenden Sie es.
    • Andernfalls verwenden Sie die aktuelle ToolsVersion.
11
VMAtm

Es besteht die Möglichkeit, dass Sie mit der falschen MSbuild.exe arbeiten. Kompilieren Sie in Visual Studio (wo es funktioniert) und überprüfen Sie die Protokolle in Ausgabe. Es sollte so etwas geben:

1>Target "GetReferenceAssemblyPaths" in file "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets" 

Stellen Sie in meinem Fall sicher, dass Sie MSBuild.exe in diesem Bin-Verzeichnis verwenden. 

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
5
CharlesS

Sie müssen msbuild Version 15 verwenden.

1
motodiver

Ich vermute nur, dass Sie Code mit String-Interpolationen haben und nicht die richtigen Build-Tools haben.

0
Paulo Morgado

Microsoft.Net.Compilers funktionierte nicht, aber die Installation von DotNetCompilerPlatform von Nuget erfolgte.

0
Mike Flynn

Meine Lösung bestand aus 2 Teilen:

1) Wählen Sie in Visual Studio 2015 Ihr Webprojekt aus, klicken Sie auf das Menü Project , wählen Sie "Enable C # 6".

2) Ich musste am Ende meiner Produktion web.config, kurz vor dem Tag zum Schließen der Konfiguration, Folgendes hinzufügen. Beachten Sie, dass sich die Versionsnummern in der Zukunft ändern können. Der Schlüssel besteht jedoch darin, nach der Aktivierung in Schritt 1 nach ähnlichem Text in Ihrer Entwicklungsdatei web.config zu suchen und sicherzustellen, dass er in die Produktion übernommen wird.

  <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=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
0
Tyler Forsythe