我将代码检入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>
构建定义
构建定义如下所示:
这只是一个普通的解决方案构建,我没有做任何特殊处理。
更新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包。这将向网站Bin文件夹中添加Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll文件。还有一个未添加到解决方案中的Bin\Roslyn文件夹,其中包含各种编译器二进制文件。一旦Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll与所有Bin\Roslyn文件一起检入版本控制,云服务器构建就可以成功编译。