Błąd CS1056: nieoczekiwany znak ' $ ' uruchamiający msbuild w procesie ciągłej integracji tfs

Mam projekt, którego celem jest framework .NET Framework 4.6.1, w ramach procesu ciągłej integracji na tfs stworzyliśmy zadanie Build Solution, aby upewnić się, że kod kompiluje się poprawnie.
Teraz serwer TFS ma najnowszą wersję .Net Famework 4.6.2. W rejestrze jest to wartość klucza Wydania frameworka

Na wszystkich innych wersjach systemu operacyjnego: 394806 =>. NET Framework 4.6.2

Ale kiedy build działa to przychodzi z tym błąd:

Error CS1056: Unexpected character '$'

Nie chcę zastępować interpolacji ciągu znaków string.Format aby rozwiązać ten problem, proszę podać inne obejście, aby go rozwiązać.

Czy muszę zainstalować coś innego na serwerze TFS?

Author: VMAtm, 2017-03-21

7 answers

Problem można rozwiązać instalując pakiet Nuget Microsoft.Net. Kompilatory. poniżej link mojej podświetlonej odpowiedzi: projekt buduje się dobrze z Visual Studio, ale nie działa z linii poleceń

Ta funkcja jest cukrem składniowym dla C # 6, spróbuj zainstalować najnowszą wersja frameworka 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345

Następnie przejdź do właściwości projektu i zmień w aplikacji opcja na Ramy docelowe, aby wskazać najnowsze. Nie musisz Zmień swój kod, aby zastąpić interpolację ciągu znaków sznurek.Metoda formatowania, aby to naprawić. Jeśli nadal otrzymujesz ten błąd, ponieważ kompilator, który uruchamia kompilację, nie jest najnowszym wersji C#, spróbuj dodać Kompilatory Microsoft. Net. z Nuget i skompiluj ponownie, co powinno rozwiązać problem. Jeśli chcesz uniknąć zainstaluj ten pakiet, spróbuj otworzyć swój .csproj i zajrzyj na ToolsVersion.że powinien wskazywać na wersję 12, a następnie zmienić do 14, ale upewnij się, że zainstalowałeś najnowszą wersję MSBuild od https://www.microsoft.com/en-us/download/details.aspx?id=48159 or go na C:\Program Files (x86) \ MSBuild \ 14.0 \ Bin, tam powinieneś mieć to folder z csc.kompilator exe. Jeśli nawet wtedy to nie rozwiąże problem, a następnie spróbuj wykonać następujące kroki https://msdn.microsoft.com/en-us/library/bb383985.aspx .

In my doświadczenie rozwiązałem ten problem na 3 różne sposoby:

1-właśnie otrzymuję paczkę z Nuget

2-Instalacja Microsoft Build Tools 2015 na serwerze tfs

3-sledgehammer i ostatnie opcje, ale dla mnie najlepsze, bo nie musisz radzić sobie z zależnością od nugeta, to instalacja wersji visual studio na serwerze tfs, gdzie uruchamiasz proces.

Hope this helps

 28
Author: Zinov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-05 18:31:39

Po zainstalowaniu MS Build tools 2015 do %ProgramFiles%\MSBuild\14.0\bin należy nadpisanie wersji MSBuild dla serwera budowania z nową wartością (14.0).

Powinieneś przeczytać artykuł MSDN( lub ta odpowiedź), ale TL;DR Twoje opcje to:

  • Nadpisanie wersji za pomocą przełącznika /ToolsVersion (lub /tv, W skrócie) podczas budowania projektu lub rozwiązania z linii poleceń:

    msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
    
  • Override Wersja poprzez ustawienie parametru ToolsVersion w zadaniu MSBuild:

    <MSBuild Projects="myProject.proj"  
        ToolsVersion="14.0"  
        Targets="go" />
    
  • Nadpisanie wersji przez ustawienie $(Project.ToolsVersion) nieruchomość na projekcie w ramach rozwiązania. Pozwala to zbudować projekt w rozwiązaniu z ToolsetVersion, który różni się od innych projektów:

    <Project ToolsVersion="14.0" ... </Project>  
    
W związku z tym, że nie jest to możliwe, nie jest to możliwe.]}
  1. atrybut ToolsVersion na MSBuild zadanie używane do budowy projekt, jeśli istnieje.
  2. przełącznik /toolsversion (lub /tv) używany w poleceniu msbuild.exe, jeśli istnieje.
  3. jeśli zmienna środowiskowa MSBUILDTREATALLTOOLSVERSIONSASCURRENT jest ustawiona, Użyj bieżącego ToolsVersion.
  4. jeśli zmienna środowiskowa MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT jest ustawiona i ToolsVersion zdefiniowana w pliku projektu jest większa niż bieżąca ToolsVersion, Użyj bieżącej ToolsVersion.
  5. jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION jest ustawiona, lub jeśli ToolsVersion nie jest ustawiona, zostaną użyte następujące kroki:
  6. jeśli zmienna środowiskowa MSBUILDLEGACYDEFAULTTOOLSVERSION nie jest ustawiona, wtedy zostaną użyte następujące kroki:
    • jeśli zmienna środowiskowa MSBUILDDEFAULTTOOLSVERSION jest ustawione na ToolsVersion, który istnieje, użyj go.
    • Jeśli DefaultOverrideToolsVersion jest ustawione w MSBuild.exe.config, użyj go.
    • Jeśli {[31] } jest ustawione w rejestrze, użyj go.
    • W Przeciwnym Razie Użyj bieżącego ToolsVersion.
 14
Author: VMAtm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:20

Jest szansa, że budujesz z niewłaściwym MSbuild.exe; wykonaj kompilację w Visual Studio (gdzie działa) i sprawdź logi w wyjściu. Powinno być coś takiego:

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

Upewnij się, że używasz MSBuild.exe w tym katalogu Bin, w moim przypadku;

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
 8
Author: CharlesS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-30 17:03:39

Kompilatory Microsoft.Net nie działały, ale zainstalowanie DotNetCompilerPlatform z Nuget nie zadziałało.

 4
Author: Mike Flynn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-01 17:22:53

Zgaduję tylko, że masz kod z interpolacjami łańcuchów i nie masz odpowiednich narzędzi do budowania.

 2
Author: Paulo Morgado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 17:00:04

Moje rozwiązanie to 2 część:

1) korzystając z Visual Studio 2015, wybierz swój projekt internetowy, Kliknij menu Project , Wybierz "Enable C# 6"

2) musiałem dodać następujące do końca mojej produkcji web.config, tuż przed znacznikiem zamykającym konfigurację. Pamiętaj, że numery wersji mogą się zmienić w przyszłości, ale kluczem jest szukanie podobnego tekstu w sieci deweloperskiej.config po włączeniu w kroku 1 i upewnij się, że zostanie przeniesiony do produkcji.

  <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>
 2
Author: Tyler Forsythe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 21:04:32

Musisz użyć msbuild w wersji 15.

 2
Author: motodiver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-09 11:26:27