2016-12-01 2 views
2

Nigetを使用してC#6の機能をいくつか提供するために、Visual Studio 2015ソリューションでMicrosoft.CodeDom.Providers.DotNetCompilerPlatformをマイウェブサイトに追加しました。すべてが実行され、ローカルで細かく構築されます。C#6を使用するTFSの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\ 

これは、すべてのオンラインのVisual Studioでホストされています。

このビルドを取得するにはどうしますか?

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日

私はバージョン管理にビンの\ 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という名前の別のパッケージがナゲットにあります。私はこれをインストールし、クラウド構築を試みました。これはうまくいかなかった - それは同じエラー(cscを見つけることができなかった)を思い付いた。

WORKING SOLUTION

パッケージMicrosoft.CodeDom.Providers.DotNetCompilerPlatformが追加されると、それが依存Microsoft.Net.Compilersパッケージに沿ってもたらします。これにより、ファイルMicrosoft.CodeDom.Providers.DotNetCompilerPlatform.dllがWebサイトのBinフォルダに追加されます。ソリューションに追加されていないBin \ Roslynフォルダもあります。これにはさまざまなコンパイラバイナリが含まれています。 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dllがバージョンコントロールとBin \ Roslynファイルのすべてにチェックインされると、クラウドサーバービルドは正常にコンパイルされます。

+1

NuGetパッケージとして聞こえるようにして、ソースコントロールに直接チェックしないでください。 –

+0

少なくとも私の会社では、ウェブアプリケーションではなくWebアプリケーションであるため、ウェブアプリケーションをWebアプリケーションにするプロセスを1つの解決策とすることで、それが起こった。 Microsoftがチェックするのを忘れた別のシナリオ。 –

+0

私はいくつかのオンラインガイドラインに従って、モノリシックなWebサイトを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

関連する問題