v1.0.6 из Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Когда я обновляю свой проект dotNet MVC для использования v1.0.6 из Microsoft.CodeDom.Providers.DotNetCompilerPlatform, я сталкиваюсь с проблемами развертывания в том, что каталог roslyn больше не помещается в каталог bin развертывания.

У меня есть v2.3.1 из Microsoft.Net.Compilers в моем проекте, и в этом проекте ничего не изменилось, кроме обновления Microsoft.CodeDom.Providers.DotNetCompilerPlatform с помощью функции управления пакетами NuGet VS2015.

Если я вернусь к v1.0.5 Microsoft.CodeDom.Providers.DotNetCompilerPlatform все работает нормально.

Похоже, что эта обновленная версия Microsoft.CodeDom.Providers.DotNetCompilerPlatform ломает / удаляет ссылки Microsoft.Net.Compilers из проекта.

Я пытался удалить, а затем переустановить Microsoft.CodeDom.Providers.DotNetCompilerPlatform и Microsoft.Net.Compilers из моего проекта, но это не решает проблему.

Я попробовал предложения в следующей статье Stackru без успеха.

Не удалось найти часть пути... bin\roslyn\csc.exe

Я также попытался вручную скопировать каталог roslyn в выходной каталог, но этот каталог удаляется при каждой сборке проекта.

Буду признателен, если кто-нибудь может помочь пролить свет на то, как решить проблему.

Les

3 ответа

Решение

У меня была такая же проблема, похоже на изменение в Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props файл под пакетами\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.6\build\net45

Я добавил обратно в цель из версии 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" ... />

и публикация снова работает.

Я думаю, что это отслеживается здесь ссылка

1.0.7 был выпущен. Пожалуйста, попробуйте. Если вы обнаружите какую-либо проблему, перейдите в roslyncodedomprovider github repo и зарегистрируйте проблему там.

Как я вижу в моем проекте, удаление двух строк из файла csproj - решает проблему. две строки, расположенные в конце XML-файла csproj, под тегом

внутри тега

<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's 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>
Другие вопросы по тегам