只有累積,沒有奇蹟

2018年11月29日 星期四

[.NET] Web API找不到 bin 底下的 roslyn csc.exe ?

發生情境
從版控 Git 上抓下新專案要進行建置時,發生建置失敗的事件錯誤訊息如下
Could not find a part of the path 'D:\git\projectName\bin\roslyn\csc.exe'.
從建置失敗的錯誤訊息中可以很清楚看到失敗是因為 bin 底下少 roslyn\csc.exe 檔案,之前也遇過類似的案例在此簡單記錄一下遇到這問題時該如何處理

甚麼是 Roslyn ? 
Roslyn 是 C# 之父在 //Build/ 2014 公布的 .NET Compiler Platform (Open Source)可以協助分析程式碼的語法(syntax)、語意(semantics)等等今天不是在介紹新一代編譯平台詳細可以參考 Roslyn 平台介紹,重點是為什麼 Roslyn 跟這有關係呢 ? 在 .Net Framework 4.5.2 使用 Visual Studio 2015 建立專案,預設會使用 Roslyn 進行編譯的動作,稍微整理一下有以下幾種方式可以解決

刪除 Roslyn
如果確認專案中不需要使用到 Roslyn,可以透過 Nuget 刪除它
- 開啟Nuget Console,輸入以下指令
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

在 MSBuild 設定
專案檔設定 AfterBuild 事件
<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>

Rebuild
在專案建置 > 按下重新建置,即可解決此問題

後記
自己解法都是很直覺無腦的去其他專案 copy roslyn 資料夾後再建置一次就成功了,但方法太爛就不列在上面丟臉了 XDD

參考
could-not-find-a-part-of-the-path-bin-roslyn-csc-exe
找不到 roslyn\csc.exe ?!

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com