2016-12-01 4 views
2

Я добавил Microsoft.CodeDom.Providers.DotNetCompilerPlatform на мой сайт в моем Решение Visual Studio 2015 для предоставления некоторых функций C# 6 с использованием Nuget. Все работает и прекрасно строится локально.Создайте WebSite в TFS, который использует C# 6

Я проверил код в TFS и создал для него задачу сборки. Однако я получаю следующее сообщение об ошибке, когда этот построен с помощью TFS:

ShowcasePortal\web.config(20,0): Error ASPCONFIG: The CodeDom provider type "Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" could not be located. 

При выполнении строки:

Build: 
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /localhost_15584 -p ShowcasePortal\ -u -f PrecompiledWeb\localhost_15584\ 

Это все организовано на визуальной студии онлайн.

Есть ли способ получить эту сборку?

UPDATE:

Я заметил, по умолчанию, что папка Bin не проверяется автоматически. У этого есть локальная папка Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll, а также папка roslyn. Я добавил это в систему управления (не слишком уверен, что если папка Рослин должна быть добавлена. После добавления этой работы.

packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.2" targetFramework="net461" /> 
    <package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net461" developmentDependency="true" /> 
</packages> 

BUILD Definiton

построение определения выглядит следующим образом:

Build Steps

Это просто стандартная сборка ботов для решения, где я не сделал ничего особенного, чтобы сделать эту сборку.

UPDATE 8 декабря

Я добавил бен \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll.refresh файл контроля версий и стартовало сборки, который дал мне следующую ошибку:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /localhost_15584 -p ShowcasePortal\ -u -f PrecompiledWeb\localhost_15584\ 
ASPNETCOMPILER(0,0): Error ASPRUNTIME: Could not find a part of the path 'C:\a\1\s\ShowcasePortal\bin\roslyn\csc.exe'. 

Теперь папка bin \ Roslyn существует на моей машине локально. Это не проверено.

Существует еще один пакет на nuget с именем Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix. Я установил это и попробовал сборку облаков. Это не сработало - оно получило ту же ошибку (не удалось найти csc).

РАБОЧИЙ РАСТВОР

При добавлении пакета Microsoft.CodeDom.Providers.DotNetCompilerPlatform, он приносит с собой пакет зависимого Microsoft.Net.Compilers. Это добавляет файл Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll на веб-сайт Bin. Существует также папка Bin \ Roslyn, которая не добавляется в решение. Это содержит различные исполняемые файлы компилятора. Как только Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll будет проверен на управление версиями, а также ВСЕ файлы Bin \ Roslyn, сборка облачного сервера будет успешно скомпилирована.

+1

Вы должны добавлять слухи как пакет NuGet и не проверять их непосредственно в исходном элементе управления. –

+0

, по крайней мере, в моей фирме это произошло потому, что это был веб-сайт, а не веб-приложение, а это означает, что одним из решений было бы пройти процесс превращения веб-сайта в webapp. другой сценарий Microsoft забыл проверить. –

+0

Я попытался преобразовать наш монолитный веб-сайт в веб-приложение, следуя нескольким онлайн-рекомендациям. Я сдался из-за количества ошибок! – Andez

ответ

1

Лучшее решение для вас как MrHinsh упоминается, что вы должны использовать пакет NuGet для управления DLL.

И в определении построения с использованием Nuget Install task перед вашей задачей построения.

Related Nuget Package

CodeDOM Providers for .NET Compiler... 1.0.2

+0

Я добавил Microsoft.CodeDom.Providers.DotNetCompilerPlatform, используя Nuget. Это не удалось построить на сервере. Это было только после того, как я проверил DLL из папки Bin, в которой он начал работать. Я обновил вопрос. – Andez

+0

Если вы добавили задачу восстановления Nuget в определение сборки и до сих пор не можете найти соответствующую DLL. Кажется, NuGet не восстанавливает пакеты при сборке. Там много возможностей. http://stackoverflow.com/questions/20761322/nuget-not-restoring-packages-on-build Также дважды проверьте файл packages.config. Я хотел бы сказать, что если проверка папки bin в исходном элементе управления решит проблему, тогда восстановление пакета nuget сделает то же самое. –

+0

Любопытно, что я получил решение на другом компьютере, и я получаю ту же ошибку, что и сервер сборки. Тип провайдера CodeDom «Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSarpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version = 1.0.2.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 "не удалось найти. То есть с пустой папкой Bin. Восстановление пакета Nuget, похоже, ничего не делало с компиляторами. – Andez