C# VSTS生成失败/发布在bin文件夹中找不到roslyn\csc.exe

C# VSTS生成失败/发布在bin文件夹中找不到roslyn\csc.exe,c#,build,web,azure-devops,roslyn,C#,Build,Web,Azure Devops,Roslyn,我们有一个网站项目,其中安装了以下nuget软件包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform - 1.0.8 Microsoft.Net.Compilers - 2.4.0 web.config具有以下功能 <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Micr

我们有一个网站项目,其中安装了以下nuget软件包

Microsoft.CodeDom.Providers.DotNetCompilerPlatform - 1.0.8

Microsoft.Net.Compilers - 2.4.0
web.config
具有以下功能

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

在本地构建工作正常。安装了
DotNetCompilerPlatform
后,install.ps1脚本将在bin中创建Roslyn文件夹,并将csc.exe等复制到该文件夹中

代码由第三方编写,并提交给我们的VSTS回购协议。我想使用VST通过我们的测试/阶段和产品环境来构建和部署网站

VSTS构建管道将获取源代码,然后恢复包并在解决方案上运行Visual Studio构建任务。这是一个网站项目,所以没有项目的网站。生成失败,出现以下错误

ASPNETCOMPILER(0,0):错误ASPRUNTIME:找不到 路径“XXXXXXXXX\bin\roslyn\csc.exe”

由于构建只是对包进行恢复,因此Roslyn二进制文件不会复制到bin

我还尝试从项目中删除包,并从
web.config
中删除编译器,但随后出现错误

错误CS1056:意外字符“$”

我正在使用一些较新的语言功能

我真的很想自动化预编译和发布,因为目前有太多的手动步骤容易出错或滥用


我的一个想法是在包还原之后在构建管道中添加一个步骤,从
DotNetCompilerPlatform
包文件夹运行install.ps1,这将有望将编译器工具复制到bin。i、 e.模拟安装软件包时的操作。但是在我走这条路之前,我想看看是否有更好的解决方案。

一个建议是更新您的'.csproj'以更改您的构建定义(在代码本身中),如下所示,将roslyn直接复制到
bin
文件夹,而不是
默认输出目录

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>


这样,您就无法更改VSTS生成定义

解决方案包括一个网站项目,而不是一个web应用程序项目,因此不包括一个可编辑的csproj文件。对于我们调查此问题,您能否将system.debug设置为true并将新生成排队,然后在此处共享调试日志?您获得了解决方案吗?我们在azure devops上构建的网站项目中遇到了同样的问题。