roslyn编译器没有使用msbuild复制到AspnetCompileMerge文件夹

我有一个.NET MVC项目,我正在尝试使用Jenkins进行部署。

我一直让Jenkins运行msbuild,然后使用RoboCopy复制生成的文件。 我想切换到只使用发布配置文件。 发布配置文件在我的本地计算机上使用Visual Studio正常工作,但在Jenkins主机上它使用msbuild失败。

它给出的错误是

ASPNETCOMPILER:错误ASPRUNTIME:找不到路径’C:\ Program Files(x86)\ Jenkins \ jobs \ myProject \ workspace \ myProject \ _ obj \ Debug \ AspnetCompileMerge \ Source \ bin \ roslyn \ csc.exe’的一部分。 [C:\ Program Files(x86)\ Jenkins \ jobs \ myProject \ workspace \ myProject \ calendar.csproj]

我正在使用Microsoft.Net.Compilers nuget包来引入C#编译器,因为项目中的一些协作者仍然在Visual Studio 2013上,但我们在项目中使用C#6语言function。

事实上,在添加发布标志之前,使用MSBuild在jenkins上构建的项目很好。 它只是在添加/p:DeployOnBuild=true;PublishProfile=MyProfile设置/p:DeployOnBuild=true;PublishProfile=MyProfile开始失败…但是发布步骤可以正常使用Visual Studio,而roslyn编译器甚至被复制到obj \ Debug \ AspnetCompileMerge \ Source我本地计算机上的\ bin \文件夹。 是什么赋予了?

老实说,既然msbuild14在Jenkins服务器上可用,它甚至可能不需要 roslyn csc.exe文件。 有没有办法让msbuild忽略它?

我的发布档案

    FileSystem Debug Any CPU  True False \\myserver\someshare\mysite True True True False DonotMerge   

我到目前为止所做的一切

我试过更新编译器包。

手动复制编译器

我在.csproj文件中添加了步骤,将丢失的编译器文件强制复制到AspnetCompileMerge目录(我已经将它们复制到bin \ roslyn目录以解决 另一个问题 )

          

关闭发布配置文件中的可更新性

基于Wesley Rathburn对类似问题的回答,我尝试制作预编译的网站,因此无法在发布配置文件中更新:

 False 

虽然这揭示了我的视图中需要删除的一些死代码,但它并没有在jenkins构建期间修复错误。

在本地运行MsBuild

可以在本地计算机上成功运行msbuild命令。 它部署到服务器和一切。 这是我在powershell中运行的命令:

 &"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Debug "/p:DeployOnBuild=true;PublishProfile=MyProfile" myproject\myproject.csproj 

删除完全复制编译器的语句

在我看来,我可能不再需要语句将roslyn编译器复制到bin文件夹,因为msbuild14现在可以在Jenkins上使用(我不确定它是在我第一次构建项目时)。 可悲的是,发生了同样的错误。 它正在寻找roslyn \ csc.exe文件,即使它没有明显的需要它!

只是把它放在这里,因为我花了两天时间试图解决同样的问题(roslyn csc.exe没有复制),但这些答案都没有解决我的问题。

事实certificate, Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6(和1.0.7)已被破坏下调至1.0.5

我得到的错误与其他人一样,但我使用的是VS 2017,本地WebDeploy和AzureDeploy都被破坏了(没有找到csc.exe)。 我尝试了我可以在互联网上找到的所有建议(大部分都重定向到这个SOpost),但在我降级到1.0.5之前没有任何效果。

所以我希望这对任何正在努力并且刚刚升级到1.0.6的人都有帮助!

请参阅: https : //github.com/aspnet/RoslynCodeDomProvider/issues/13和https://github.com/dotnet/roslyn/issues/21340

所以,我现在使用的解决方法(我并不完全喜欢)只是删除了编译器和CodeDOM编译器包的依赖关系。 我还必须清除.csproj和web.config文件中的引用。 这涉及从共享程序集中删除这些包。

这将打破仍然使用Visual Studio 2013的人的项目,我不喜欢它,但它现在建立在我的Jenkins主机上,我喜欢。 如果有人有更好的解决方案,我会很高兴听到它。