只有累積,沒有奇蹟

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 ?!

Related Posts:

  • [.NETCore] Quartz.NET 初體驗前言 在 ASP.NET 中常見的排程框架不外乎 Quartz.NET 與 Hangfire 兩種,過去自己在開發上比較常用到 Hangfire 搭配其後台管理介面,在使用上可以說是相當方便與容易上手,最近在新專案也有遇到 schedule 的需求,同事大推 Quartz.Net 來擔任工作排程器的工作,Quartz.Net 是一套功能齊全的工作排程框架,由 Java 熱門的排程框架 Quartz 移植到 .NET 上,ope… Read More
  • [NETCore] 使用 BenchmarkDotNet 測試程式碼效能前言 在開發或是 POC 時為了記錄代碼程式執行的時間,都會採用在代碼上加上  stopWatch  紀錄花費時間,使用方式不外乎就是 new Stopwatch、Start、Stop、Reset、ElapsedMilliseconds,以詳細記錄代碼所花費的時間,接下來為了要顯示在 console 上可能還要針對 log 在輸出內容做簡單排版方便記錄,最近發現上述惱人的事情都可以使用  Benc… Read More
  • [C#] 設定方法 (Method) 已過時 - Obsolete前言 最近又再重操舊業開始撰寫共用 Library,共用 Library主要用意是希望可以加速同事開發上的速度,像是與 DB 溝通或是撰寫 CRUD 每個專案都會用到的 function 或是 API,或者是每個專案都會用到的檢查邏輯抽出來讓大家使用,讓大家不用在重複造輪子以加速其他同仁在專案上的開發速度,在此專案開發時由於迭代的速度與變化較快,因此也常遇到第一版提供的 API V1 版本經過兩天後就調整為 V2 版本提供新版,此時方案或專案中勢… Read More
  • [NETCore] ASP.NET Core 靜態檔案設定 - UseStaticFiles前言 在過去開發 .NET Framework 時代在專案使用靜態檔案是一塊小蛋糕,只需要在專案指定 Folder 加入需要的靜態檔案內容即可,像是圖片就放在 image、javascript 內容就放在 js 資料底下...等等,但同樣事情在 ASP.NET Core 專案可就完全不同,在 .NET Core 專案中是無法直接瀏覽靜態檔案的,需要透過一些設定方式才可以在專案看到像是 HTML、CSS、Image 或是 javascript 靜態… Read More
  • [NETCore] 初探 ASP.NET Core 3.0 新朋友 - System.Text.Json前言 相信大家都發現 JSON 格式已經取代過去的 XML 成為資料交換的首選,在 ASP.NET Core 3.0 專案範本設定檔也是使用 JSON 作為設定檔的格式,並內建廣受好評的 Json.NET 做為處理 JSON 格式的函式庫,依存放在 Microsoft.AspNetCore.App 無須在透過 Nuget 另外下載,但老牌的 Json.NET 雖然好用但也相對的存在過去一些沉重的包袱,為了提高性能&n… Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com