Asp.net 在TFS中使用C#6构建网站

Asp.net 在TFS中使用C#6构建网站,asp.net,tfs,web,c#-6.0,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 "Microso

我已经在我的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>
现在,bin\Roslyn文件夹确实存在于本地计算机上。未签入此文件夹

nuget上还有另一个名为Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix的包。我安装了这个包并尝试了云构建。这个包不起作用-它出现了相同的错误(找不到csc)

工作解决方案


添加包Microsoft.CodeDom.Providers.DotNetCompilerPlatform时,它会带来相关的Microsoft.Net.Compilers包。这会将文件Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll添加到网站Bin文件夹。还有一个Bin\Roslyn文件夹未添加到解决方案中。其中包含各种compiler二进制文件。一旦将Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll以及所有Bin\Roslyn文件签入版本控制,云服务器构建将成功编译。

正如MrHinsh所述,这是适合您的最佳解决方案,您应该使用NuGet包来管理dll

在生成定义中,在生成任务之前使用

相关Nuget包


你应该将hear things作为NuGet软件包添加,而不是直接将其检查到源代码管理中。至少在我的公司,发生这种情况是因为它是网站而不是web应用程序,这意味着一种解决方案是将网站转换为web应用程序。另一种情况是Microsoft忘记检查。我尝试转换我们的mo根据一些在线指导原则,将nolithic网站添加到web应用程序。由于错误太多,我放弃了!我确实使用Nuget添加了Microsoft.CodeDom.Providers.DotNetCompilerPlatform。这无法在服务器上构建。直到我从Bin文件夹检入DLL,它才开始工作。我已更新了问题。如果您已添加在您的生成定义中删除了Nuget restore任务,但仍然找不到相关的dll。Nuget似乎没有在生成时还原包。有很多可能性。另外,请仔细检查packages.config文件。我想说,如果检查源代码管理中的bin文件夹可以解决此问题,那么Nuget package restore也会做同样的事情。Cu很明显,我在另一台计算机上得到了解决方案,并且得到了与构建服务器相同的错误:CodeDom提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version=1.0.2.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”找不到。这是空的Bin文件夹。Nuget package restore似乎对编译器没有任何作用。您似乎使用的是VST而不是TFS。否则,您可以直接将文件夹复制到生成服务器进行测试。无论如何,您提供的解决方案工作得很好,已经足够了。感谢共享。
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'.