I have a project that the framework is targeting .NET Framework 4.6.1
, as part of the continuous integration process on the tfs we created a Build Solution task to ensure that the code compiles correctly.
Now the TFS server has the latest version of the .Net Famework 4.6.2
. On the register this is the value for the Release key of the framework
On all other OS versions: 394806 => .NET Framework 4.6.2
But when the build runs it comes with this error:
Error CS1056: Unexpected character '$'
I don’t want to replace the string interpolation with the string.Format
to solve this issue, please provide another workaround to solve it.
Do I need to install something else on the TFS server?
VMAtm
27.7k17 gold badges83 silver badges124 bronze badges
asked Mar 21, 2017 at 16:13
5
The problem can be fixed installing a Nuget package
Microsoft.Net.Compilers. Below is the link of my highlighted answer: Project builds fine with Visual Studio but fails from the command line
That feature is a syntactic sugar for C#6, try to install the latest
version of the framework 4.6.2
https://www.microsoft.com/en-us/download/details.aspx?id=53345Then go to your Project properties and change on the Application
option on Target framework to point to the latest. You don’t need to
change your code to replace the string interpolation with
string.Format method to fix it. If you are still getting this error,
is because, the compiler that is running your build is not the latest
version of C#, try to add the Microsoft.Net.Compilers, from Nuget and
compile again, that should resolve the issue. If you want to avoid to
install this package, try to open your .csproj and take a look on the
ToolsVersion.that should be pointing to the version 12, then change it
to 14, but make sure you have installed the latest version of the
MSBuild from
https://www.microsoft.com/en-us/download/details.aspx?id=48159 or go
to C:Program Files (x86)MSBuild14.0Bin, there you should have this
folder with the csc.exe compiler. If even then that doesn’t resolve
the issue, then try to follow this steps
https://msdn.microsoft.com/en-us/library/bb383985.aspx.
In my experience I solved this problem in 3 different ways:
1- just getting the package from Nuget
2- installing Microsoft Build Tools 2015 on the tfs server
3- The sledgehammer and last options but for me the best because you don’t need to deal with the dependency on nuget, is installing the visual studio version on the tfs server where you run the process.
Hope this helps
answered Mar 24, 2017 at 16:57
ZinovZinov
3,6525 gold badges32 silver badges66 bronze badges
2
After installing the MS Build tools 2015 into %ProgramFiles%MSBuild14.0bin
you need to override the MSBuild version for build server with new value (14.0
).
You should read the MSDN article (or this answer), but TL;DR your options are:
-
Override version by using the
/ToolsVersion
switch (or/tv
, for short) when you build the project or solution from the command line:msbuild.exe someproj.proj /tv:14.0 /p:Configuration=Debug
-
Override version by setting the
ToolsVersion
parameter on theMSBuild
task:<MSBuild Projects="myProject.proj" ToolsVersion="14.0" Targets="go" />
-
Override version by setting the
$(Project.ToolsVersion)
property on a project within a solution. This lets you build a project in a solution with aToolsetVersion
that differs from that of the other projects:<Project ToolsVersion="14.0" ... </Project>
The order of precedence, from highest to lowest, used to determine the
ToolsVersion
is:
- The
ToolsVersion
attribute on theMSBuild
task used to build the project, if any.- The
/toolsversion
(or/tv
) switch that’s used in themsbuild.exe
command, if any.- If the environment variable
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
is set, then use the currentToolsVersion
.- If the environment variable
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
is set and theToolsVersion
defined in the project file is greater than the currentToolsVersion
, use the currentToolsVersion
.- If the environment variable
MSBUILDLEGACYDEFAULTTOOLSVERSION
is set, or ifToolsVersion
is not set, then the following steps are used:
- The
ToolsVersion
attribute of theProject
element of the project file. If this attribute doesn’t exist, it is assumed to be the current version.- The default tools version in the
MSBuild.exe.config
file.- The default tools version in the registry. For more information, see Standard and Custom Toolset Configurations.
- If the environment variable
MSBUILDLEGACYDEFAULTTOOLSVERSION
is not set, then the following steps are used:
- If the environment variable
MSBUILDDEFAULTTOOLSVERSION
is set to aToolsVersion
that exists, use it.- If
DefaultOverrideToolsVersion
is set inMSBuild.exe.config
, use it.- If
DefaultOverrideToolsVersion
is set in the registry, use it.- Otherwise, use the current
ToolsVersion
.
answered Mar 23, 2017 at 21:11
VMAtmVMAtm
27.7k17 gold badges83 silver badges124 bronze badges
3
There is a chance you are building with the wrong MSbuild.exe; do the compile in Visual Studio (where it works) and check the logs in Output. There should be something like:
1>Target "GetReferenceAssemblyPaths" in file "C:Program Files (x86)Microsoft Visual Studio2017CommunityMSBuild15.0BinMicrosoft.Common.CurrentVersion.targets"
Make sure you are using the MSBuild.exe in that Bin directory, in my case;
C:Program Files (x86)Microsoft Visual Studio2017CommunityMSBuild15.0BinMSbuild.exe
answered Oct 30, 2017 at 17:03
CharlesSCharlesS
1,4932 gold badges18 silver badges31 bronze badges
Microsoft.Net.Compilers didnt work, but installing DotNetCompilerPlatform from Nuget did.
answered Jan 1, 2019 at 17:22
Mike FlynnMike Flynn
22.2k52 gold badges180 silver badges333 bronze badges
You must use msbuild version 15.
answered Apr 9, 2019 at 11:26
motodivermotodiver
1911 silver badge4 bronze badges
1
I had this problem because I used the wrong msbuild path. I was using C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe
which corresponds to old versions of Visual Studio and Frameworks, now I use Visual Studio 2019, so the correct path to build is C:Program Files (x86)Microsoft Visual Studio2019CommunityMSBuildCurrentBinMSBuild.exe
or C:Program Files (x86)Microsoft Visual Studio2019CommunityMSBuildCurrentBinamd64MSBuild.exe
depending on the architecture you want to build.
answered Jul 17, 2021 at 15:48
I’m just guessing that you have code with string interpolations and don’t have the proper build tools.
answered Mar 21, 2017 at 17:00
Paulo MorgadoPaulo Morgado
13.6k3 gold badges29 silver badges57 bronze badges
2
My solution was 2 part:
1) Using Visual Studio 2015, select your web project, click the Project menu, select «Enable C# 6»
2) I needed to add the following to the end of my production web.config, just before the configuration closing tag. Note that version numbers may change in the future, but the key is to look for similar text in your development web.config after enabling in step 1 and make sure it gets transferred to 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>
answered May 14, 2018 at 21:04
Содержание
- Ошибка CS1056: неожиданный символ ‘$’, запускающий msbuild в процессе непрерывной интеграции tfs
- 5 ответов
- Ошибка CS1056: непредвиденный символ ‘$’ Xamarin Studio
- 3 ответа
- Пример для проектов платформы
- Пример для проектов PCL (обратите внимание на необходимый переключатель вкладок)
- CS1056 ошибка: неожиданный символ ‘$’ работает в MSBuild с использованием процесса непрерывной интеграции в TFS
- Ошибка CS1056: Неожиданный символ ‘$’ запускает msbuild в процессе непрерывной интеграции tfs
- Ошибка CS1056: неожиданный символ `? ‘
Ошибка CS1056: неожиданный символ ‘$’, запускающий msbuild в процессе непрерывной интеграции tfs
У меня есть проект, в рамках которого .NET Framework 4.6.1 нацелена на .NET Framework 4.6.1 , как часть процесса непрерывной интеграции на tfs, который мы создали для задачи Build Solution, чтобы убедиться, что код компилируется правильно.
Теперь сервер TFS имеет последнюю версию .Net Famework 4.6.2 . В регистре это значение для ключа Release рамки
Во всех других версиях ОС: 394806 =>.NET Framework 4.6.2
Но когда он запускается, он приходит с этой ошибкой:
Я не хочу заменить интерполяцию строк на string.Format для решения этой проблемы, пожалуйста, предоставьте еще один способ обхода решения.
Нужно ли мне устанавливать что-то еще на сервере TFS?
5 ответов
Проблему можно устранить, установив пакет Nuget Microsoft.Net.Compilers. Ниже приведена ссылка моего выделенного ответа: Project строит отлично с помощью Visual Studio, но выходит из командной строки
Эта функция является синтаксическим сахаром для С# 6, попробуйте установить последнюю версию фреймворка 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345
Затем перейдите в свойства проекта и измените параметры приложения на целевой структуре, чтобы указать на последние. Вам не нужно менять свой код, чтобы заменить интерполяцию строк на метод string.Format, чтобы исправить это. Если вы все еще получаете эту ошибку, это потому, что компилятор, который запускает вашу сборку, не является последней версией С#, попробуйте добавить Microsoft.Net.Compilers из Nuget и снова скомпилировать, что должно решить проблему. Если вы хотите избежать установки этого пакета, попробуйте открыть свой.csproj и взглянуть на ToolsVersion.that следует указывать на версию 12, а затем изменить его на 14, но убедитесь, что вы установили последнюю версию MSBuild с https://www.microsoft.com/en-us/download/details.aspx?id=48159 или перейти к C:Program Files (x86)MSBuild14.0Bin, там вы должны иметь эту папку с компилятор csc.exe. Если даже тогда это не решит проблему, попробуйте выполнить следующие шаги: https://msdn.microsoft.com/en-us/library/bb383985.aspx.
По моему опыту я решил эту проблему тремя способами:
1- просто получает пакет от Nuget
2- установка Microsoft Build Tools 2015 на сервере tfs
3- Кувалда и последние варианты, но для меня лучше всего, потому что вам не нужно иметь дело с зависимостью от nuget, устанавливает визуальную студийную версию на сервере tfs, где вы запускаете этот процесс.
Надеюсь это поможет
После установки средств MS Build 2015 в %ProgramFiles%MSBuild14.0bin вам необходимо переопределить версию MSBuild для сервера сборки с новым значением ( 14.0 ).
Вы должны прочитать статью MSDN (или этот ответ), но TL; DR ваши варианты:
Переверните версию с помощью переключателя /ToolsVersion (или /tv , если коротко), когда вы строите проект или решение из командной строки:
Переопределить версию, установив параметр ToolsVersion в задаче MSBuild :
Переопределите версию, установив свойство $(Project.ToolsVersion) в проекте в рамках решения. Это позволяет вам создавать проект в решении с помощью ToolsetVersion который отличается от проекта других проектов:
Порядок приоритета, от самого высокого до самого низкого, используемый для определения ToolsVersion :
Источник
Ошибка CS1056: непредвиденный символ ‘$’ Xamarin Studio
У меня был проект Xamarin на Visual Studio 2015, по какой-то причине я переместил его в последнюю версию Xamarin Studio (на основе MonoDevelop), и я получаю эту ошибку:
Error CS1056: Unexpected character ‘$’ (CS1056)
Здесь, где это происходит:
Я использую новую функцию С# 6.0 под названием «String Interpolation». Мой код отлично работал на Visual Studio 2015, почему я получаю эту ошибку?
3 ответа
Похоже, в свойствах проекта есть параметр, который контролирует возможность использования возможностей С# 6.
Дважды щелкните каждый проект, чтобы открыть параметры проекта, перейдите в «Сборка»> «Общие» [> С# (для проектов PCL]). Затем выберите «Версия 6» в версии С# Language Version.
Пример для проектов платформы
Пример для проектов PCL (обратите внимание на необходимый переключатель вкладок)
Проблема может заключаться в ошибке в некоторых редакторах, которая смешивает Unicode с ascii. Это заставляет все выглядеть правильно в визуальной студии, но при открытии в другом редакторе видно, что файл поврежден.
Текущая версия Xamarin Studio не поддерживает функции С# 6.0, включая String Interpolation.
Существует предварительный выпуск Xamarin Studio, который использует компилятор Microsoft Roslyn и поддерживает строчную интерполяцию (обратите внимание, однако, что с 11 января 2016 года текущая версия не будет фактически кодом BUILD, который использует функции С# 6).
Вы можете получить предварительный выпуск здесь.
Источник
CS1056 ошибка: неожиданный символ ‘$’ работает в MSBuild с использованием процесса непрерывной интеграции в TFS
У меня есть проект, что платформа ориентирована .Чистый рамках 4.6.1 , как часть непрерывного процесса интеграции на ТФС мы создали сборку решения задач, чтобы убедиться, что код компилируется правильно. Теперь сервер TFS имеет последнюю версию.Чистая Famework 4.6.2`. В реестре это значение ключа выпуске платформы
на все остальные версии ОС: 394806 => .Чистый рамках 4.6.2
Но когда построение выполняется он приходит с этой ошибкой:
Я не’т хочу, чтобы заменить строку интерполяции с строку.Формат`, чтобы решить эту проблему, пожалуйста, укажите другой способ, чтобы решить это.
Нужно ли мне устанавливать что-то еще на сервере TFS?
что функция-это синтаксический сахар для C#6, попробуйте установить последний версии платформы 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345
затем перейдите в свойства проекта и изменить по применению параметр целевой платформы до точки до последней. Вы Don’т нужно изменить свой код, чтобы заменить строку интерполяции с строка.Format метод, чтобы исправить это. Если вы все еще получаете эту ошибку, > есть, потому что компилятор, на котором выполняется сборка не последняя версия C#, попробуйте добавить в Microsoft.Чистая.Составители, из NuGet и снова скомпилировать, что должно решить проблему. Если вы хотите избежать установить этот пакет, попробуйте открыть свой .csproj и взглянуть на значение toolsversion.что должен указывать на версию 12, а затем изменить его В 14, но убедитесь, что вы установили последнюю версию MSBuild из https://www.microsoft.com/en-us/download/details.aspx?id=48159 или пойти > в C:Program файлы (х86)MSBuild с14.0bin, то есть вы должны иметь это > в папку с компилятором csc.exe . Если даже то, что не’т решить По этому вопросу, то попробуйте следовать этим шагам https://msdn.microsoft.com/en-us/library/bb383985.aspx.
По моему опыту я решил эту проблему в 3 различными способами:
1 — просто получить пакет из NuGet
2 — установка Microsoft создавать инструменты 2015 на сервере TFS
3 — кувалду и последний варианты, но для меня лучший потому что вы Don’т нужна, чтобы справиться с зависимостью в NuGet, это установки Visual Studio версия на сервере TFS, где вы запустите процесс.
Источник
Ошибка CS1056: Неожиданный символ ‘$’ запускает msbuild в процессе непрерывной интеграции tfs
У меня есть проект, в рамках которого .NET Framework 4.6.1 нацелена на .NET Framework 4.6.1 , как часть процесса непрерывной интеграции на tfs, который мы создали для задачи Build Solution, чтобы убедиться, что код компилируется правильно.
Теперь сервер TFS имеет последнюю версию .Net Famework 4.6.2 . В регистре это значение для ключа Release рамки
Во всех других версиях ОС: 394806 =>.NET Framework 4.6.2
Но когда он запускается, он приходит с этой ошибкой:
Я не хочу заменить интерполяцию строк на string.Format для решения этой проблемы, пожалуйста, предоставьте еще один способ обхода решения.
Нужно ли мне устанавливать что-то еще на сервере TFS?
Проблему можно устранить, установив пакет Nuget Microsoft.Net.Compilers. Ниже приведена ссылка моего выделенного ответа: Project строит отлично с помощью Visual Studio, но выходит из командной строки
Эта функция является синтаксическим сахаром для С# 6, попробуйте установить последнюю версию фреймворка 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345
Затем перейдите в свойства проекта и измените параметры приложения на целевой структуре, чтобы указать на последние. Вам не нужно менять свой код, чтобы заменить интерполяцию строк на метод string.Format, чтобы исправить это. Если вы все еще получаете эту ошибку, это потому, что компилятор, который запускает вашу сборку, не является последней версией С#, попробуйте добавить Microsoft.Net.Compilers из Nuget и снова скомпилировать, что должно решить проблему. Если вы хотите избежать установки этого пакета, попробуйте открыть свой.csproj и взглянуть на ToolsVersion.that следует указывать на версию 12, а затем изменить его на 14, но убедитесь, что вы установили последнюю версию MSBuild с https://www.microsoft.com/en-us/download/details.aspx?id=48159 или перейти к C:Program Files (x86)MSBuild14.0Bin, там вы должны иметь эту папку с компилятор csc.exe. Если даже тогда это не решит проблему, попробуйте выполнить следующие шаги: https://msdn.microsoft.com/en-us/library/bb383985.aspx.
По моему опыту я решил эту проблему тремя способами:
1- просто получает пакет от Nuget
2- установка Microsoft Build Tools 2015 на сервере tfs
3- Кувалда и последние варианты, но для меня лучше всего, потому что вам не нужно иметь дело с зависимостью от nuget, устанавливает визуальную студийную версию на сервере tfs, где вы запускаете этот процесс.
Надеюсь это поможет
После установки средств MS Build 2015 в %ProgramFiles%MSBuild14.0bin вам необходимо переопределить версию MSBuild для сервера сборки с новым значением ( 14.0 ).
Вы должны прочитать статью MSDN (или этот ответ), но TL; DR ваши варианты:
Переверните версию с помощью переключателя /ToolsVersion (или /tv , если коротко), когда вы строите проект или решение из командной строки:
Переопределить версию, установив параметр ToolsVersion в задаче MSBuild :
Переопределите версию, установив свойство $(Project.ToolsVersion) в проекте в рамках решения. Это позволяет вам создавать проект в решении с помощью ToolsetVersion который отличается от проекта других проектов:
Порядок приоритета, от самого высокого до самого низкого, используемый для определения ToolsVersion :
Источник
Ошибка CS1056: неожиданный символ `? ‘
Привет, кто-нибудь знает, почему я получаю эту ошибку.
и это строка, в которой я получаю сообщение об ошибке
Вы даже не включили ? в свой код
существует не так много возможных синтаксических вариантов использования оператора? в C# есть оператор принятия решения condition ? expression1 : expression2 , затем есть безопасный нулевой ?. и объединенный ?? , поэтому я бы рекомендовал поискать? в файле класса. Очевидно, этого нет в опубликованном вами коде.
Ваш обновленный код имеет еще меньше смысла, return false выйдет из метода, ваш последующий ExecuteNonQuery(«INSERT INTO accounts VALUES (@name, @password, 0)») никогда не будет вызван
Конечно, похоже, что пароли хранятся в виде обычного текста, и это . это нехорошо. Вообще-то, это действительно плохо. Ладно, это ужасно.
@davidl, это именно та строка кода, в которой есть ошибка. Имеется пробел нулевой ширины (unicode 200b) встроен в код. Найдите и удалите. Это между 1 и ; . Некоторая часть кода сообщения об ошибке запутывается и отображает пространство нулевой ширины как «?». Как, черт возьми, вы получили пространство нулевой ширины в окне редактора? Что бы вы ни делали, чтобы добиться этого, не делай этого опять. Как вы обнаружили, встраивание недопустимых пробелов в код трудно обнаружить и исправить. Подробнее см. en.wikipedia.org/wiki/Zero-width_space.
Исходный плакат: подумайте о том, чтобы указать проблему на сайте Roslyn github, чтобы предупредить команду компилятора C# о том, что это сообщение об ошибке может быть улучшено. Измените сообщение об ошибке на что-то вроде «Неожиданный символ ‘?’ (Unicode 200B) «значительно упростило бы диагностику этой ошибки.
Источник
- Remove From My Forums
-
Question
-
Hi,
When i am executing MSBuild I am facing issue «error
CS1056: Unexpected character ‘$’ » in the below method. please provide inputs to use string.Format
in the method instead of $ to solve the issue.public static string AdjustHourMinutes(this string sender) { if (!sender.Contains(":")) { return sender.Length == 1 ? $"0{sender}:00" : $"{sender}:00"; } else { var parts = sender.Split(':'); return parts[1].Length == 2 ? $"{Convert.ToInt32(parts[0]):D2}:{parts[1]}" : $"{Convert.ToInt32(parts[0]):D2}:0{parts[1]}"; } }
Thank you.
Vamshi Janagama
Answers
-
An expression like $»0{sender}:00″ can be converted to
string.Format( «0{0}:00», sender).Try this too:
public static string AdjustHourMinutes( this string sender )
{
string [ ] parts = sender.Split( ‘:’ );
return string.Format( «{0:00}:{1:00}», Convert.ToInt32( parts[0] ), parts.Length > 1 ? Convert.ToInt32( parts[1] ) : 0 );
}
-
Edited by
Tuesday, December 17, 2019 6:34 AM
-
Marked as answer by
Vamshi K J
Tuesday, December 17, 2019 9:25 PM
-
Edited by
-
-
Marked as answer by
Vamshi K J
Tuesday, December 17, 2019 9:25 PM
-
Marked as answer by
When you get the message » CS1056: Unexpected character ‘$’ » in runtime asp.net, it means that the
front end file (html/aspx) is using a way of
formatting strings which is called «string interpolation».
But to use string interpolation in your web frontend files you must put the following into your web.config file:
<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>
Source:
http://stackoverflow.com/questions/30832659/string-interpolation-in-a-razor-view
Disclaimer:
The above worked for me, but may not work for all .NET Framework versions and/or ASP.NET versions.