1. 程式人生 > >VS2015、VS2017自動生成roslyn的資料夾以及csc.exe

VS2015、VS2017自動生成roslyn的資料夾以及csc.exe

csc.exe代表C# 編譯器,所以在需要專案nuget包引用”Microsoft.CodeDom.Providers.DotNetCompilerPlatform“以及”Microsoft.Net.Compilers“,然後在編譯的時候,自動會在bin資料夾裡生成roslyn資料夾,無需從別的專案拷貝,如果專案引用了那2個dll,而bin資料夾裡又沒有生成roslyn相關的檔案,那執行專案會報錯:未能找到路徑“........\bin\roslyn\csc.exe”的一部分。

解決方案:

nuget包引用以上兩個檔案dll,生成一下專案,檢視是否在bin資料夾裡生成了roslyn資料夾,如果沒有,則需要從別的專案裡拷貝過來,放進去即可。

解決如何自動生成roslyn資料夾?

問題過程:由於配置TFS的自動化釋出,一直不成功,然後就搗鼓專案,刪除一些nuget裡的無關的dll以及配置,不知道怎麼的,就導致了無法咋bin資料夾生成roslyn,只能複製別的專案,鬱悶?還原到歷史版本,是可以生成此檔案,那隻能一步步查詢問題了。

原因:原來我在專案類庫 WebSite.csproj 裡刪除了相關配置,導致無法自動生成csc.exe。

解決方案:

用notepad++開啟WebSite.csproj檔案(記得簽出檔案並去掉只讀屬性),在Project屬性裡新增引用程式碼即可,如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">


 <Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 


 <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{A82547C1-503D-4D7E-9148-E8D44DF1461F}</ProjectGuid>
    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
.......

Project頭部加入:

<Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 

儲存,重新編譯一下專案看看,應該是可以自動化生成roslyn的資料夾以及csc.exe。