Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的 v1.0.6

v1.0.6 of Microsoft.CodeDom.Providers.DotNetCompilerPlatform

当我更新我的 dotNet MVC 项目以使用 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的 v1.0.6 时,我遇到了部署问题,因为 roslyn 目录不再位于部署的 bin 目录下。

我的项目中有 Microsoft.Net.Compilers 的 v2.3.1,除了通过 VS2015 的“管理 NuGet 包”功能更新 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 之外,项目中没有其他任何更改。

如果我恢复到 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的 v1.0.5,一切正常。

似乎 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的更新版本正在破坏/删除项目中的 Microsoft.Net.Compilers 引用。

我尝试从我的项目中卸载然后重新安装 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 和 Microsoft.Net.Compilers,但这并没有解决问题。

我尝试了以下 Whosebug 文章中的建议,但没有成功。

我也尝试手动将 roslyn 目录复制到输出目录,但该目录在每次构建项目时都会被删除。

如果有人能帮助阐明如何解决问题,我将不胜感激。

莱斯

我遇到了同样的问题,看来是 packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.6\build\net45

下的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props 文件发生了变化

我通过添加回

从 1.0.5 版本添加回目标
<Target Name="IncludeRoslynCompilerFilesToItemGroup" AfterTargets="ResolveAssemblyReferences" >
<ItemGroup>
  <None Include="@(RoslyCompilerFiles)" Condition="">
    <Link>%(RoslyCompilerFiles.Link)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

之前

<Target Name="CopyRoslynCompilerFilesToOutputDirectory" ... />

发布又开始了。

我认为它被跟踪到这里link

1.0.7 已发布。请试一试。如果您发现任何问题,请转到 roslyncodedomprovider github repo 并在那里提交问题。

正如我在我的项目中看到的那样,从 csproj 文件中删除两行 - 解决了问题。 这两行放在 csproj XML 文件的末尾,在标签

<目标名称="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

标签内

<PropertyGroup>

这两行是:

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.3.2\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />

删除它们 - 发布恢复正常。

Github 的 Issue 中有错字,缺少 n (RoslyCompilerFiles) 而不是RoslynCompilerFiles,修复后如下所示:

  <Target Name="CopyRoslynCompilerFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory">
    <Copy SourceFiles="@(RoslynCompilerFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" Retries="0" />
  </Target>

顺便说一句,我的 SampleWebApp.csproj 来自 https://github.com/JonPSmith/SampleMvcWebApp 取而代之(放置 Roslyn next2):

  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>