Xuất bản trang web mà không có roslyn


91

Tôi đang cố gắng tạo ứng dụng web bằng Visual Studio 2015 và .NET 4.5.1. Khi tôi xuất bản trang web, visual studio tạo thư mục có tên roslyn.

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

Tôi biết nó được sử dụng để biên dịch mã nhanh chóng, nhưng rất tiếc nhà cung cấp dịch vụ lưu trữ của tôi không cho phép tôi thực thi trình biên dịch trên máy chủ của họ.

Làm thế nào để xuất bản trang web mà không có roslyn giống như phiên bản trước của Visual Studio?

CHỈNH SỬA: Tôi gặp lỗi này khi cố gắng truy cập trang web của mình.

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

Có vẻ như IIS đang cố gắng thực thi roslyn\csc.exenhưng tài khoản người dùng của tôi không có quyền làm điều đó. Với phiên bản trước của Visual Studio, lỗi này không hiển thị.


Ngoài ra, Roslyn chỉ là một tập hợp các DLL. Chủ nhà không thể biết hoặc quan tâm đến những gì họ làm.
SLaks,

3
@Slaks IIS đang cố gắng thực thi csc.exe. Xem chỉnh sửa.
Niyoko Yuliawan

Nếu đang sử dụng Plesk, bạn có thể vô hiệu hóa 'Nhóm ứng dụng IIS chuyên dụng cho trang web của bạn', sau đó bạn thậm chí không cần phải xóa các gói đó!
Vahid Amiri

Câu trả lời:


183

Tôi vừa phải đối mặt với cùng một vấn đề. Khi bạn tạo một dự án web mới, hai gói nuget tự động được thêm vào dự án của bạn. Nếu bạn loại bỏ chúng, vấn đề của bạn sẽ được giải quyết. Tên gói là: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " và " Microsoft.Net.Compilers ".


Điều này đã hoạt động và phù hợp với các nhà cung cấp dịch vụ lưu trữ web bên thứ ba. Có hai câu hỏi về điều này- 1) Việc loại bỏ các gói Nuget này có thể ảnh hưởng đến sản phẩm theo bất kỳ cách nào không? 2) Có thể xóa các gói này khỏi chính dự án mẫu để tránh bài tập này mọi lúc không?
nura

1) Không có bất kỳ ảnh hưởng nào đến quy trình làm việc hoặc logic của sản phẩm; nhưng url ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), được cung cấp bởi @ Ajay2707, cho biết gói này ảnh hưởng đến thời gian tải trang. 2) Tôi không biết làm thế nào bạn có thể làm điều này, nhưng nếu bạn có thể thì sẽ không có vấn đề gì.
Kemal Kefeli

3
Đã xóa cả hai gói NuGet. Đã xóa khai báo cấu hình. Vẫn còn thư mục này đang được tạo trong khi biên dịch hoặc xuất bản .. Chỉ gói NuGet mà ứng dụng của tôi đang sử dụng là "Newtonsoft.Json". Tôi có cần gỡ cài đặt nó không?
Ranjan Kumar

8
Hãy nhớ rằng việc loại bỏ các gói này sẽ phá vỡ việc sử dụng các tính năng của C # 6. Điều này có thể được giải quyết bằng cách bỏ chọn "" Cho phép trang web biên dịch sẵn có thể cập nhật" mà trước biên dịch các quan điểm vv.
Rutix

9
@RanjanKumar: Mở tệp csproj của bạn trong trình soạn thảo văn bản và xóa các nút tương ứng với các gói NuGet được mô tả trong câu trả lời của Kemal. Điều này có thể bao gồm Importcác nút, Targetcác nút (EnsureNugetPackageBuildImports) và Referencecác nút. Cũng xóa <system.codedom>nút của web.config của bạn.
Brian

16

Tôi gặp vấn đề tương tự. Đã làm theo các bước từ đây . Về cơ bản:

  1. Gỡ cài đặt gói

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Trong cài đặt hồ sơ xuất bản của bạn, hãy bỏ chọn "Cho phép có thể cập nhật trang web được biên dịch trước". Bạn có thể tìm thấy điều này trong Cài đặt> Biên dịch trước khi xuất bản> cấu hình


7
Bằng cách này, bạn không thể sử dụng các tính năng C # 6 trong các khung nhìn.
RokX

2

Sau khi tìm kiếm cùng một vấn đề mà tôi phải đối mặt, tôi mới đến đây. Tôi đọc câu trả lời ở trên là đúng.

Tôi đưa ra câu trả lời, vì Đây là bài viết tốt để giải thích:

  1. Tại sao mã xuất bản có exe này cũng như môi trường phát triển?
  2. Lợi ích là gì và làm thế nào để loại bỏ?

Đây cũng là bài viết rất hay, về lịch sử của exe này


2

Sau vô số nỗ lực .... và theo trang web này . Tôi thấy rằng bạn có thể sử dụng /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falsetrong MSBuild để chuyển đổi web.config, điều này cũng bao gồm trình biên dịch roslyn trong bản dựng. Đầu ra giống như những gì bạn nhận được bằng cách xuất bản trong Visual Studio vào hệ thống tệp


Không thể hiểu bài viết trên liên kết trang web, nhưng theo lời khuyên của bạn để thêm thông số xây dựng trong MSBuild hoạt động .. Như bạn đã nói, đầu ra giống như khi chúng tôi xuất bản thành hệ thống tệp. Cảm ơn
Bruce

2

Có một lỗi mở trên kho lưu trữ roslyn về vấn đề này.

Trong trường hợp của tôi, tất cả những gì tôi phải làm là hạ cấp dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformtừ phiên bản 1.0.6xuống 1.0.5.


0

Tôi đã gặp vấn đề tương tự vào tháng 9 năm 2016 khi tôi tiếp quản một chương trình ASP.NET hiện có. Tôi thấy rằng có nhiều phiên bản của hai gói trình biên dịch được Kemal đề cập được cài đặt trong các dự án khác nhau của giải pháp.

Vì vậy, trước tiên tôi đã cập nhật để chúng giống nhau. VS không cho bạn biết rằng các bản cập nhật có sẵn trong trường hợp này (hoặc có thể tôi đã bỏ lỡ chúng?)

Sau đó, tôi phải khởi động lại VS2015 để các gói dọn dẹp đúng cách.

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.