Không thể tìm thấy một phần của đường dẫn bin bin \ roslyn \ csc.exe


813

Tôi đang cố gắng chạy dự án Asp.net MVC được lấy từ kiểm soát nguồn TFS. Tôi đã thêm tất cả các tham chiếu lắp ráp và tôi có thể xây dựng và biên dịch thành công mà không có bất kỳ lỗi hay cảnh báo nào.

Nhưng tôi gặp lỗi sau trong trình duyệt:

Không thể tìm thấy một phần của đường dẫn 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'.

Dưới đây là một ảnh chụp màn hình đầy đủ của trang lỗi.

nhập mô tả hình ảnh ở đây

Sau vài ngày nghiên cứu, tôi hiểu rằng Roslyn là nền tảng trình biên dịch .Net cung cấp các tính năng biên dịch nâng cao. Tuy nhiên, tôi không hiểu tại sao bản dựng của tôi lại cố gắng tìm \ bin \ roslyn \ csc.exe vì tôi không định cấu hình bất kỳ thứ gì liên quan đến Roslyn và tôi không có ý định sử dụng Roslyn trong dự án của mình.


10
Bất cứ ai cũng có thể giải thích tại sao điều này là cần thiết như là một phần của việc chạy một ứng dụng ASP.NET đã biên dịch? Nó sử dụng csc.exe để làm gì?
gregmac

1
Tôi nghĩ rằng điều này giải thích sự tham gia roslyn: blogs.msdn.microsoft.com/webdev/2014/05/12/...
andy250

4
thư mục roslyn không được sao chép trong thư mục bin, tôi đã sửa nó bằng cách cài đặt Microsoft.CodeDom.Providers.DotNetCompilerPl
platform

12
Cài đặt lại Microsoft.CodeDom.Providers.DotNetCompilerPlevelop đã giải quyết vấn đề của tôi.
SurenSaluka

4
Tôi đã có được điều này sau khi mở dự án của mình trong VS 2019. Trước đây, nó đã hoạt động trên VS 2017. Tôi thấy rằng chỉ cần hạ cấp Microsoft.CodeDom.Providers.DotNetCompilerPl platform thành bất kỳ phiên bản trước nào sau đó quay lại phiên bản mới nhất đã giải quyết vấn đề. Nó sửa một số vấn đề trong .csprojtập tin của tôi .
Neo

Câu trả lời:


436

Vấn đề với các mẫu VS2015 mặc định là trình biên dịch không thực sự được sao chép vào thư mục tfr \ bin \ roslyn \, mà là thư mục {outdir} \ roslyn \

Thêm mã này vào tệp .csproj của bạn:

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

9
Điều này không giải quyết vấn đề của tôi. Bây giờ tôi nhận được 'Không thể tìm thấy tệp' C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe ' . Xin lưu ý rằng khi tôi tạo một dự án MVC mới trong VS2015, tôi không thấy cấu hình được đề cập trong .csproj và nó chạy hoàn toàn tốt trong trình duyệt
Eyad

4
Cảm ơn. Bây giờ tôi có thể xây dựng và chạy dự án trong trình duyệt sau khi tôi tải xuống thư mục Roslyn và đặt nó vào thư mục / bin. Tôi đã không đặt PstBuildEvent được đề cập ở trên và nó vẫn hoạt động. Có thể bạn muốn chỉnh sửa câu trả lời của mình ở trên và đề cập đến sự cần thiết phải đặt các tệp Roslyn một cách cẩn thận và để phản ánh tốt hơn giải pháp.
Eyad

2
Vâng, trong một tình huống bình thường; bạn nên có trình biên dịch bên trong thư mục $ (OutDir) roslyn *. *, vì vậy tập lệnh này sẽ sao chép trình biên dịch vào binfolder của dự án của bạn. Rõ ràng cài đặt vs2015 của bạn không bao gồm trình biên dịch.
Mitchell

9
Tôi thấy việc cập nhật Microsoft.CodeDom.Providers.DotNetCompilerPl platform thành 1.0.8 và Microsoft.Net.Compilers 2.6.1 đã giúp tôi rất nhiều. Tôi không cần thêm mục tiêu bổ sung này. Có vẻ như một cái gì đó tương tự đã được thêm vào trong phiên bản sau của công cụ: github.com/aspnet/RoslynCodeDomProvider/commit/ trộm
Ian Robertson

5
Tôi đã cập nhật phiên bản Microsoft.Net.Compilers lên phiên bản 2.10.0 từ Nuget và nó là giải pháp cho tôi. Tôi đang sử dụng targetFramework = "4.6.2"
juanytuweb 16/11/18

1163

TL; DR

chạy cái này trong Bảng điều khiển quản lý gói:

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

Thêm thông tin

Vấn đề này không liên quan đến chính Visual Studio, vì vậy các câu trả lời đề xuất thêm các bước xây dựng để sao chép tệp hơn là một cách giải quyết. Tương tự với việc thêm các nhị phân trình biên dịch thủ công vào dự án.

Trình biên dịch Roslyn đến từ gói NuGet và đã có / có lỗi trong một số phiên bản của gói đó (tôi không biết chính xác phiên bản nào). Giải pháp là cài đặt lại / nâng cấp gói đó lên phiên bản không có lỗi. Ban đầu trước khi tôi viết câu trả lời vào năm 2015, tôi đã sửa nó bằng cách cài đặt các gói sau ở các phiên bản cụ thể:

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPl Platform 1.0.1

Sau đó, tôi đã xem xét .csproj và đảm bảo rằng các đường dẫn đến các gói là chính xác (trong trường hợp của tôi .. \ .. \ gói \ *. *) Bên trong các thẻ <ImportProject>ở trên và trong <Target>có tên "SureNuGetPackageBuildImports" ở phía dưới. Đây là trên MVC 5 và .NET Framework 4.5.2.


11
Đây là vấn đề của tôi - thư mục bin / roslyn có ở đó khi dự án được tạo, tuy nhiên, nếu bạn xóa nó hoặc, giống như kiểm soát nguồn, nó không được sao chép, thì nó sẽ không được xây dựng lại. Tôi nghĩ rằng có một chút vấn đề "đồng bộ hóa" với các phiên bản, một khi 1.0.1 được cài đặt và cập nhật tệp Nhập trong proj thành phiên bản chính xác, bản dựng sẽ tự động sao chép thư mục Roslyn - không cần bất kỳ bài đăng nào trong số đó xây dựng các lệnh.
Jester

16
Tôi khá chắc chắn đây là giải pháp tốt nhất ... hãy tự mình thử với gói cập nhật -reinstall -projectname myprojectname
cr1pto

5
Sau khi làm tất cả những điều này, không có gì thay đổi cho dự án của tôi. Thư mục bin vẫn bị san phẳng.
brianary

8
Một lưu ý: phiên bản 1.0.3 của gói Microsoft.CodeDom.Providers.DotNetCompilerPl platform Nuget hoạt động với tôi, nhưng phiên bản 1.0.6 gây ra lỗi trong câu hỏi này.
Daniel Neel


176

Bản dựng của bạn đang cố gắng tìm \bin\roslyn\csc.exevì các gói sau đã được thêm vào dự án của bạn. Chỉ cần xem lại packages.configtệp của bạn , bạn có thể có cả hai ở đó

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

Roslyn là gì và Ai đã thêm chúng (gói) trong dự án: Nếu bạn đang sử dụng .net Framework 4.5.2 để tạo dự án bằng VS2015, bạn có thể nhận thấy rằng các mẫu dự án sử dụng Roslyn theo mặc định. Thật ra Roslyn là một trong những trình biên dịch mã nguồn mở cho các ngôn ngữ .NET từ Microsoft.

Tại sao chúng tôi nên xóa Roslyn: Nếu dự án của bạn có tài liệu tham khảo Roslyn và bạn muốn triển khai nó không có máy chủ, bạn sẽ gặp lỗi không mong muốn trên trang web vì nhiều nhà cung cấp dịch vụ lưu trữ vẫn chưa nâng cấp máy chủ của họ và do đó không hỗ trợ Roslyn. Để giải quyết vấn đề này, bạn sẽ cần xóa trình biên dịch Roslyn khỏi mẫu dự án.

nếu bạn không thích sử dụng Roslyn, hãy làm theo các bước dưới đây để xóa nó

1. Xóa các gói NuGet, sử dụng các lệnh sau khỏi Bảng điều khiển gói Nuget

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

2. Sau khi bạn thực hiện việc này, tệp web.config sẽ được tự động cập nhật. Trong trường hợp không phải, hãy tìm mã dưới đây trong web.configtệp và nếu tìm thấy, hãy xóa đoạn mã này.

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"></compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"></compiler>
    </compilers>
</system.codedom>

28
Đây thực sự không phải là một giải pháp nếu bạn thực sự muốn sử dụng trình biên dịch mới và các tính năng mới.
Matti Virkkunen

14
Bạn đang ủng hộ tương lai.
cchamberlain

2
@cchamberlain tại sao nó là tương lai? Tôi chỉ nghĩ rằng nó nên được sử dụng, nhưng có vẻ nhiều người đang gặp rắc rối với nó.
Alisson

1
@Alisson - Roslyn là hướng mọi thứ đang diễn ra. Nó chứa các tính năng ngôn ngữ mới hơn, hiệu suất cao hơn, đa nền tảng và nguồn mở. Nó xuất hiện sau các công cụ khác - do đó tương lai. Không có gì nói bạn cần sử dụng nó, hầu hết các nâng cấp phải chịu một số chi phí. Xem phần "Tại sao biên dịch Roslyn trong ASP.NET?" phần: blogs.msdn.microsoft.com/webdev/2014/05/12/...
cchamberlain

1
Nếu bạn muốn xuất bản dự án MVC lên lưu trữ chia sẻ windows của GoDaddy, đây là câu trả lời. GoDaddy không chạy các tệp thực thi như csc.exe
Jeson Martajaya

141

Một sạch sẽ và xây dựng lại làm việc cho tôi!


4
Tôi không nghĩ rằng cần phải sạch sẽ. Theo cuộc thảo luận về vấn đề này, việc xây dựng lại không phải là bản dựng thông thường sẽ luôn đặt tệp roslyn trở lại. github.com/dotnet/roslyn/issues/15556
leemicw 28/03/2017

Tôi cũng chỉ đơn giản chạy Build> Rebuild Solution và lỗi đã biến mất.
Matt Merrill

Rebuild giải quyết cho tôi, tôi nhận thấy điều này trong đầu raCopying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson

12
Chỉ cần xây dựng lại đã không làm việc cho tôi .. Sau khi Clean + Rebuild, lỗi đã biến mất.
Bruno Miquelin

2
DotNetCompilerPl Platform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 tại đây. Việc dọn dẹp / xây dựng lại không hiệu quả với tôi, ngay cả trước và sau khi khởi động lại Visual Studio. Cuối cùng, một bản Build> Batch Build ...> Rebuild All đã thực hiện thủ thuật này. Nó chắc hẳn đã thì thầm đúng mức - không có gì để VS thấy nó bị thiếu thư mục bin / roslyn trong đầu ra.
Johann

59

Đây là một cách MSBuild hơn để làm điều này.

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

Nhưng tôi nhận thấy rằng các tập tin roslyn cũng nằm trong thư mục bin của tôi (không phải trong một thư mục). Các ứng dụng dường như làm việc, mặc dù.


4
Bạn có thể đặt nó ở bất cứ đâu trong tệp .csproj của mình, ở cùng cấp độ với thẻ <Target> khác. Tôi thường đặt nó về phía dưới.
Rob Cannon

Đây thực sự nên là câu trả lời được chấp nhận. Bạn có thể kiểm tra điều này vào nguồn và schmuck nghèo tiếp theo kéo repo của bạn sẽ không phải trải qua vấn đề tương tự.
Andrew Clear

37

Như đã lưu ý trong một vấn đề trong dự án Roslyn trên GitHub , một giải pháp (có hiệu quả với tôi) là chỉ cần dỡ và tải lại dự án trong Visual Studio.

Thư mục "bin \ roslyn" không được tạo khi xây dựng hoặc xây dựng lại cho đến khi tôi tải lại dự án.


Cảm ơn bạn, nó đã làm việc cho tôi. Sự cố trên kho lưu trữ dotnet đã mở vào năm 2016 và chúng tôi vẫn gặp sự cố này trên Visual Studio 2019. Tôi không thể tin đó là sự thật!
Felipe Oriani

26

Tôi đã làm theo các bước này và nó hoạt động hoàn hảo

  • Xóa tất cả các thư mục bin và obj
  • Làm sạch giải pháp và xây dựng lại
  • Chạy lệnh này trong powershell

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


22

Sau khi thử tất cả các bản sửa lỗi không có xì gà, tôi đã sửa nó bằng cách cập nhật Gói Nuget này trong Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPl platform

Của tôi là từ 1.0.0 đến 2.0.0 để tham khảo (Lỗi không còn hiển thị)


3
Đây là nó cho tôi như chào đón. Ngay cả 2.0.0 là quá thấp cho dự án của tôi, nó yêu cầu 2.0.1.
yesman

3
Điều này đã giải quyết nó cho tôi. Tôi đã hạ cấp mà phải khắc phục sự cố và sau đó tôi cập nhật lại mới nhất.
Daniel Jackson

1
Tôi cũng đã làm điều này. Bây giờ roslynthư mục được tạo trong đường dẫn đầu ra của tôi. Tôi cũng không thấy tài liệu tham khảo "roslyn" trong csproj của mình. Nó có thể là rằng Target Name="CopyRoslyn...là một điều VS2015 và không cần thiết (phiên bản) 2017 tôi có. Đáng lưu ý: Vì tôi đã cập nhật DotnetCompilerPl Platform trước khi tôi chơi xung quanh với việc thêm mục tiêu sao chép (mục tiêu tôi đã đề cập), tôi có một csproj sạch hơn.
LosManos

1
Điều này chỉ xảy ra với tôi. Bài này là một cứu cánh. Tôi liên tục có thông báo lỗi này và nó dường như luôn là một lý do hoàn toàn khác!
Brian Knoblauch

19
  1. Giải pháp sạch
  2. Rebuild Solution, hai bước này làm việc cho tôi.

Cảm ơn bạn, điều này làm việc cho tôi là tốt.
Joey Phillips

1
Làm. Tôi vô tình ấn Ctrl Ckhi tôi đang kiểm tra một chi nhánh gitvà nó làm hỏng repo của tôi. git reset --hardkhông hoạt động, vì vậy tôi git clean -xdfvà phải xây dựng lại dự án. Tuy nhiên tôi gặp phải lỗi này vì vậy tôi chỉ cần làm sạch và xây dựng lại dự án một lần nữa và nó đã làm việc cho tôi.
Paul Carlton

15

Quản lý gói NuGet

Bạn cần cài đặt Microsoft.CodeDom.Providers.DotNetCompilerPl Platform.BinFix, được tạo đặc biệt cho lỗi đó


Điều này không hiệu quả - Tôi nghi ngờ rằng gói đó không thực sự cho mục đích chính xác này.
Drew Miller

Tôi đã thử nghiệm với VS 2017 và nó hoạt động tốt, nó có thể là một vấn đề với các phiên bản khác.
Juan Acosta

11
Tôi không cài đặt các gói ngẫu nhiên từ người ngẫu nhiên với 'DSx' làm biệt danh. Đó là bảo mật lớn không ...
Mateusz

1
@Mateusz hoặc một cái sẽ sửa cấu trúc thư mục non-APS.NET [sic] của tôi
Eliasar

14
  • Nhấp chuột phải vào dự án của bạn và chọn Quản lý gói Nuget
  • Tìm "Microsoft.CodeDom.Providers.DotNetCompilerPl platform"
  • Chỉ cần Cập nhật lên phiên bản cũ hơn hoặc mới hơn (không quan trọng), sau đó cập nhật lại về phiên bản gốc.

Điều này cài đặt lại tất cả các phụ thuộc và tệp của gói (như csc.exe)

Nuget - DotNetCompilerPl Platform


CÁi này đã sửa nó giúp tôi! Cảm ơn!
Mason

11

Vì vậy, câu trả lời của Rob Cannon về cơ bản đã có hiệu quả với tôi, nhưng tôi phải điều chỉnh một số tùy chọn. Cụ thể, tôi đã phải xóa điều kiện trên mục tiêu, cũng như thay đổi thuộc tính Bao gồm, vì $ CscToolPath trống khi dự án đang được xây dựng trên máy chủ xây dựng của chúng tôi. Thật kỳ lạ, $ CscToolPath KHÔNG trống khi chạy cục bộ.

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

1
Hành vi thậm chí còn tồi tệ hơn. Tại địa phương, nếu bạn truy cập thư mục gói của mình và xóa hai thư mục Microsoft.CodeDom.Providers.DotNetCompilerPl platform.1.nn và xây dựng mã cho bạn, thì $ CscToolPath sẽ trống. Nếu bạn xây dựng lần thứ hai, thì nó sẽ không trống. Vấn đề xảy ra mọi lúc trên máy chủ bản dựng của bạn, bởi vì nó luôn được coi là "bản dựng đầu tiên". Mã của bạn hoạt động hoàn hảo, nhưng nếu bạn cập nhật gói Microsoft.Net.Compilers , thì bạn sẽ phải cập nhật .csproj . Cảm ơn bạn.
Julien D.

3
Lưu ý rằng giải pháp này sẽ thất bại (hoặc phải điều chỉnh) nếu phiên bản của Microsoft.Net.Compilers thay đổi.
JanDotNet

Tôi đã nâng cấp Microsoft.CodeDom.Providers.DotNetCompilerPl platform và sau đó có thể tiến hành.
iowatiger08

10

Cập nhật các gói nuget làm việc cho tôi Nhấp chuột phải vào giải pháp> Quản lý các gói NuGet cho giải pháp và cập nhật tất cả các gói và đặc biệt: Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPl platform


Điều này làm việc cho tôi thời gian này. Lỗi Roslyn / csc.exe bị thiếu liên tục xuất hiện và giải pháp khác thường xuyên xảy ra ...
Brian Knoblauch

10

Đây là sự cố đã biết với Microsoft.CodeDom.Providers.DotNetCompilerPl platform 1.0.6. Hạ cấp xuống 1.0.5 đã sửa lỗi này cho tôi.


Đúng rồi đó. Tôi gặp vấn đề này với phiên bản 1.0.6 chỉ khi xuất bản lên Azure. Hạ cấp xuống 1.0,5 tác phẩm
Augusto Barreto

Hạ cấp từ 2.0.0 xuống 1.0.5 và nó đã hoạt động. Tuy nhiên, tôi đã ăn một chiếc bánh sandwich gà tây vào thời điểm đó có lẽ là một phần chịu trách nhiệm cho giải pháp. Đi hình.
barneymc

10

Đối với VS 2019, loại bỏ hoàn toàn nút sau:

<system.codedom>
</system.codedom>

9

Theo nhận xét của Daniel Neel ở trên:

phiên bản 1.0.3 của gói Microsoft NodeDom.Providers.DotNetCompilerPl Platform Nuget hoạt động với tôi, nhưng phiên bản 1.0.6 gây ra lỗi trong câu hỏi này

Hạ cấp xuống 1.0.3 đã giải quyết vấn đề này cho tôi.



@akatakritos này giúp. Tôi đã tìm kiếm trong nhiều giờ. cảm ơn cả hai người.
erincerol

2
1.0.7 vẫn bị ảnh hưởng trong một số trường hợp nhất định github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5 là phiên bản gần đây nhất hoạt động với tôi (1.0.6 và 1.0.7 đang phát sinh lỗi)
Patrick

Tương tự, tôi là 1.0.7 và nó sẽ không hoạt động. 1.0.3 công trình. Tôi đã không thử bất cứ điều gì cao hơn vì tôi vừa lãng phí giờ cuối cùng của cuộc đời mình với vấn đề này và tôi không còn lo lắng về vấn đề này nữa.
Philip Stratford

9

Trong trường hợp của tôi, tôi đã gặp sự cố ở Jenkins khi nó cố gắng triển khai nó trong Octopus với lỗi sau:

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

Nguyên nhân

Sau một thời gian, tôi đã sử dụng một thành phần được phát triển nội bộ đang sử dụng Microsoft.Net.Compilers. Lý do thành phần bên trong đang sử dụng Microsoft.Net.Compilerslà để khắc phục vấn đề này ( C #: throw biên dịch biểu thức không hợp lệ ) và đã được giải quyết theo cách này ( Cách sử dụng C # 7 với Visual Studio 2015? ). Kết quả này, khi tôi cài đặt thành phần trên chương trình chính, việc Microsoft.Net.Compilersthêm nó sẽ tự động.

Giải pháp

Công việc của tôi là, gỡ cài đặt theo thành phần nội bộ của chúng tôi bằng cách (theo câu trả lời @malikKhalil)

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

Và chọn trình biên dịch C # 7 trong Jenkins thay vì C # 6 và xây dựng lại, điều này là để đảm bảo mọi thứ đều hoạt động và xây dựng chính xác.

Cuối cùng trong chương trình chính của tôi, tôi đã cố gắng cập nhật thành phần nội bộ của mình. Và mọi thứ hơn là xây dựng lại. Nó đã được xây dựng mà không có bất kỳ vấn đề hoặc vấn đề.


8

Trong trường hợp của tôi, tôi chỉ cần vào thư mục bin trong Visual Studio Solution Explorer (dự án ứng dụng web) và bao gồm trực tiếp dự án roslyn. Bằng cách nhấp chuột phải vào thư mục và chọn Bao gồm trong dự án. Và kiểm tra lại giải pháp để kích hoạt quá trình xây dựng.

Thư mục roslyn không được bao gồm theo mặc định.


7

Tôi cũng gặp vấn đề tương tự khi chạy dự án. Dưới đây là các bước mà tôi đã làm theo.

  1. Nhấp chuột phải vào giải pháp
  2. chọn giải pháp sạch
  3. Sau khi sạch thành công, một lần nữa xây dựng dự án của bạn
  4. Chạy lại dự án

Lần này tôi không thấy lỗi tương tự. Điều này hoạt động như mong đợi.


Các đồng nghiệp đã báo cáo rằng việc cập nhật gói NuGet từ bảng điều khiển hoạt động, nhưng điều này cũng hoạt động mà không cần chạy bất kỳ lệnh nào. Câu trả lời tôi chọn.
tsemer

7

Nâng cấp Microsoft.CodeDom.Providers.DotNetCompilerPlatformtừ 1.0.0 lên 1.0.1 đã sửa lỗi này cho tôi.


6

Mở tệp dự án và loại bỏ tất cả các tham chiếu với Nhập dự án = ".. \ gói \ Microsoft.CodeDom.Providers.DotNetCompilerPl platform.1.0.0 ....

Mở web.config và xóa tất cả các thuộc tính trình biên dịch system.codedom


6

Như đã ghi nhận của /programming/32780315#34391473 , sửa chữa nhanh chóng là sử dụng trình quản lý gói, Tools> Nuget Package Manager> Package Manager Console, để chạy

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

Bảng điều khiển quản lý gói - cách mở

Nhưng một giải pháp thay thế (tự động và âm thầm tạo lại các gói của bạn nếu chúng bị thiếu) là xóa một thuộc tính của Web.configtệp dự án của bạn .
( Web.confignằm trong cùng thư mục với.csproj tệp .)

Mở Web.configtệp trong trình soạn thảo văn bản (hoặc bên trong Visual Studio).
- Trong thẻ configuration> system.codedom> compilers> compiler language="c#;cs;csharp", hoàn toàn loại bỏ các typethuộc tính.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

Trong ngắn hạn, loại bỏ các dòng bắt đầu với type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Có lẽ, bản sửa lỗi tương tự hoạt động cho Visual Basic cũng như cho Csharp, nhưng tôi chưa thử.)

Visual Studio sẽ chăm sóc phần còn lại. Không còn nữa Server Error in '/' Application.

Trong mã ví dụ tôi đã cung cấp trong tệp zip ở trên, bây giờ bạn sẽ nhận được HTTP Error 403 khi bạn nhấn Ctrl+ F5.

Lỗi HTTP 403,14 - Bị cấm

Hãy thử thay thế http://localhost:64195trong trình duyệt web của bạn với http://localhost:64195/api/products.
API web hiện hiển thị như mong muốn:

API web chứa các sản phẩm

Như một sự khiêu khích, tôi đã thử xóa toàn bộ packagethư mục của giải pháp Visual Studio.
Nó được tự động và âm thầm tái tạo ngay sau khi tôi (tái) xây dựng nó.


Cuối cùng nhưng không kém phần quan trọng, đây là mã tái tạo lỗi: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Nguyên văn từ https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / tổng quan / nâng cao / gọi-a-web-api-từ-a-net-client / sample / server / ProductsApp )

Lỗi máy chủ


6

Trong trường hợp của tôi, chỉ cần xóa mọi thứ trong thư mục bin và biên dịch lại đã làm tất cả công việc cho tôi.


2
Tôi nghĩ rằng điều này là đơn giản và hiệu quả hơn. Thông thường tôi gặp lỗi này sau khi sao chép một dự án từ kho lưu trữ vào một máy tính mới.
Jonathan Ortega

Sau khi thử điều này, tôi đã nhận được 403 Cấm từ IIS Express khi chạy trong trình gỡ lỗi. Khởi động lại Visual Studio cũng không giúp được gì, nhưng khởi động lại Windows thì có.
Mùa đông

5

Nếu bạn đã thêm ASPNETCOMPILER để biên dịch các khung nhìn Dao cạo của bạn trong MVC, như trong câu hỏi StackOverflow này , thì hãy thay đổi PhysPath để đặt gói Roslyn nuget (thường được trỏ qua biến $ CscToolPath ):

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


5

Vấn đề với các mẫu VS2015 mặc định là trình biên dịch không thực sự được sao chép vào {outdir}_PublishedWebsites\tfr\bin\roslyn\thư mục, mà là {outdir}\roslyn\thư mục. Điều này có thể khác với môi trường cục bộ của bạn vì AppHarborxây dựng ứng dụng bằng thư mục đầu ra thay vì xây dựng giải pháp "tại chỗ".

Để khắc phục, hãy thêm phần sau vào cuối .csprojtệp ngay sau khối xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

Tham khảo: https://support.appharbor.com/discussions/probols/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise


1
Tùy chọn / d chỉ sao chép các tệp mới hơn (viết tắt của "ngày"). Hãy ghi nhớ việc triển khai vào đám mây / thiên hà nơi thời gian có thể ở phía sau / trước giờ địa phương.
Tối đa

4

Trong trường hợp của tôi, tương tự như Basim, có một gói NuGet đang báo cho trình biên dịch chúng tôi cần C # 6, điều mà chúng tôi không có.

Chúng tôi đã phải xóa gói NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatformsau đó xóa:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> từ tập tin tests.config
  2. <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>

Trong system.codedomnút, bạn có thể thấy lý do tại sao nó mang lại roslyn:compilerOptions="/langversion:6


1
Tất cả những gì tôi phải làm là gỡ cài đặt gói NuGet "Microsoft.CodeDom.Providers.DotNetCompilerPl platform" và điều đó đã giải quyết nó cho tôi (dự án của tôi nhắm vào .NET 4.5.2).
BlueSky

1
Điều này làm việc cho tôi. Bạn cũng sẽ muốn xóa Microsoft.Net.Compilers vì không có lý do gì để giữ sự phụ thuộc bổ sung này xung quanh.
Luôn học

4

Xóa thư mục Bin trong trình khám phá giải pháp của bạn và Xây dựng lại giải pháp. Điều đó sẽ giải quyết vấn đề


Cảm ơn! Điều đó cũng làm việc cho tôi. Ngoài ra, tôi đã cập nhật tất cả các gói nuget của mình
Andre Kraemer

4

Tôi gặp vấn đề tương tự khi cài đặt ứng dụng của mình trên máy chủ khi mọi thứ hoạt động hoàn hảo trên localhost.

Không có giải pháp nào trong số này được giải quyết, tôi luôn có cùng một lỗi:

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

Tôi đã kết thúc việc này:

  • trong dự án thiết lập của tôi, phải clic, xem> hệ thống tập tin
  • tạo một bin/roslyn thư mục
  • chọn thêm> tệp và thêm tất cả các tệp từ packages\Microsoft.Net.Compilers.1.3.2\tools

Điều này đã giải quyết vấn đề của tôi.


4

Khởi động lại Windows.

Đây là giải pháp duy nhất hiệu quả với tôi sau khi thử xây dựng lại, xóa nội dung binvà xây dựng lại, khởi động lại Visual Studio.

Đây là một ví dụ khác về mức độ khủng khiếp của các công cụ xây dựng C # /. NET.

Tôi nghĩ (sau khi đọc nhiều câu trả lời), kết luận chung là nguyên nhân và giải pháp của vấn đề này phụ thuộc rất nhiều vào thiết lập và dự án, vì vậy nếu một câu trả lời không hoạt động, hãy thử một câu trả lời khác. Hãy thử các giải pháp không xâm phạm / phá hoại, như khởi động lại Visual Studio, khởi động lại, xây dựng lại, v.v., ĐẦU TIÊN, trước khi làm rối các gói NuGet hoặc cài đặt lại các công cụ phát triển. Chúc may mắn!

(LƯU Ý: Sử dụng Visual Studio 2019 và tệp dự án ban đầu được tạo trong Visual Studio 2015. Có thể điều này giúp ai đó điều tra vấn đề)

(EDIT: Điều này có thể xảy ra do không khởi động lại sau khi cài đặt / sửa đổi cài đặt Visual Studio hoặc cập nhật Visual Studio khi trình cài đặt nhắc khởi động lại?)


3

Tôi có dự án web mà không có tệp csproj và các giải pháp được đề cập ở đây không hoạt động với tôi.

Thay đổi khung .NET đích, cài đặt lại các gói ( Update-Package -reinstall) và sau đó xây dựng dự án làm việc cho tôi. Bạn thậm chí có thể thay đổi khung mục tiêu trở lại sau thao tác này (làm cho bạn cài đặt lại các gói nuget sau).


Đây là một "dự án trang web". Tôi đã sử dụng lệnh này để chỉ cài đặt lại một gói:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.