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?
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
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 zadaniuMSBuild
:<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 zToolsetVersion
, 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.]}
- atrybut
ToolsVersion
naMSBuild
zadanie używane do budowy projekt, jeśli istnieje.- przełącznik
/toolsversion
(lub/tv
) używany w poleceniumsbuild.exe
, jeśli istnieje.- jeśli zmienna środowiskowa
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
jest ustawiona, Użyj bieżącegoToolsVersion
.- jeśli zmienna środowiskowa
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
jest ustawiona iToolsVersion
zdefiniowana w pliku projektu jest większa niż bieżącaToolsVersion
, Użyj bieżącejToolsVersion
.- jeśli zmienna środowiskowa
MSBUILDLEGACYDEFAULTTOOLSVERSION
jest ustawiona, lub jeśliToolsVersion
nie jest ustawiona, zostaną użyte następujące kroki:
- The
ToolsVersion
atrybutProject
element pliku projektu. Jeśli ten atrybut nie istnieje, przyjmuje się, że jest to bieżąca wersja.- domyślna wersja narzędzi w pliku
MSBuild.exe.config
.- domyślna wersja narzędzi w rejestrze. Aby uzyskać więcej informacji, zobacz konfiguracje standardowych i niestandardowych zestawów narzędzi .
- jeśli zmienna środowiskowa
MSBUILDLEGACYDEFAULTTOOLSVERSION
nie jest ustawiona, wtedy zostaną użyte następujące kroki:
- jeśli zmienna środowiskowa
MSBUILDDEFAULTTOOLSVERSION
jest ustawione naToolsVersion
, który istnieje, użyj go.- Jeśli
DefaultOverrideToolsVersion
jest ustawione wMSBuild.exe.config
, użyj go.- Jeśli {[31] } jest ustawione w rejestrze, użyj go.
- W Przeciwnym Razie Użyj bieżącego
ToolsVersion
.
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
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.
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.
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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
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.
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