2016-12-01 18 views
2

我已將Microsoft.CodeDom.Providers.DotNetCompilerPlatform添加到我的網站中我的Visual Studio 2015解決方案中,以使用Nuget提供一些C#6功能。一切都在本地運行並建立良好。在TFS中使用C#6構建Web站點

我已將代碼檢入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 12月8日

我添加的bin \ 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文件夾在本地機器上存在。這沒有簽入。

還有一個名爲Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix的nuget包。我安裝了它並嘗試了雲構建。這沒有奏效 - 它出現了相同的錯誤(無法找到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

至少在我的公司中,它發生的原因是因爲它是網站而不是Web應用程序,這意味着一種解決方案將是將網站轉換爲Web應用程序。另一種情況是微軟忘記檢查。 –

+0

我嘗試將我們的單片網站轉換爲以下幾個在線指南的Web應用程序。由於錯誤的數量,我放棄了! – Andez

回答

1

最好的解決方案就像MrHinsh提到你應該使用NuGet包來管理dll。

而在構建定義中使用Nuget Install task之前您的構建任務。

Related Nuget Package

CodeDOM Providers for .NET Compiler... 1.0.2

+0

我沒有使用Nuget添加Microsoft.CodeDom.Providers.DotNetCompilerPlatform。這無法建立在服務器上。直到我從Bin文件夾中檢查到它開始工作的DLL。我已經更新了這個問題。 – 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.CSharpCodeProvider,Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version = 1.0.2.0,Culture =中立,PublicKeyToken = 31bf3856ad364e35「找不到。 即與空Bin文件夾。對於編譯器來說,Nuget包恢復似乎沒有任何作用。 – Andez