在使用C#6的TFS中构建WebSite

时间:2016-12-01 17:08:37

标签: asp.net tfs web c#-6.0

我已在我的 Visual Studio 2015 解决方案中将Microsoft.CodeDom.Providers.DotNetCompilerPlatform添加到我的网站,以使用Nuget提供一些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\ 

这些都是在visual studio online上托管的。

有没有得到这个版本?

更新

我默认注意到Bin文件夹没有自动签入。这有本地的Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll以及roslyn文件夹。我已经将它添加到源代码控制中(不太确定是否需要添加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 Steps

这只是一个针对解决方案的沼泽标准构建,我没有做任何特殊的构建。

更新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文件夹。这没有签入。

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 个答案:

答案 0 :(得分:1)

最好的解决方案正如 MrHinsh 提到的那样,你应该使用NuGet包来管理dll。

在构建任务之前使用Nuget Install task进行构建定义。

  

相关Nuget包

     

CodeDOM Providers for .NET Compiler... 1.0.2