เผยแพร่เว็บไซต์โดยไม่มี roslyn


93

ฉันพยายามสร้างเว็บแอปพลิเคชันโดยใช้ Visual Studio 2015 และ. NET 4.5.1 roslynเมื่อฉันเผยแพร่เว็บไซต์ที่สตูดิโอภาพสร้างชื่อโฟลเดอร์

ป้อนคำอธิบายภาพที่นี่

ฉันรู้ว่ามันใช้เพื่อคอมไพล์โค้ดได้ทันที แต่น่าเสียดายที่ผู้ให้บริการโฮสติ้งของฉันไม่อนุญาตให้ฉันรันคอมไพเลอร์บนเซิร์ฟเวอร์ของพวกเขา

จะเผยแพร่เว็บไซต์โดยไม่roslynเหมือนกับ Visual Studio เวอร์ชันก่อนหน้าได้อย่างไร

แก้ไข: ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเข้าถึงเว็บไซต์ของฉัน

ป้อนคำอธิบายภาพที่นี่

ดูเหมือนว่า IIS พยายามดำเนินการroslyn\csc.exeแต่บัญชีผู้ใช้ของฉันไม่ได้รับอนุญาตให้ทำเช่นนั้น ด้วย Visual Studio เวอร์ชันก่อนหน้าข้อผิดพลาดนี้จะไม่ปรากฏขึ้น


นอกจากนี้ Roslyn เป็นเพียงชุดของ DLL เท่านั้น โฮสต์ไม่สามารถรู้หรือสนใจว่าพวกเขาทำอะไร
SLaks

3
@Slaks IIS พยายามเรียกใช้ csc.exe ดูแก้ไข
Niyoko

หากคุณใช้ Plesk คุณสามารถปิดการใช้งาน 'Dedicated IIS Application Pool สำหรับเว็บไซต์ของคุณ' จากนั้นคุณไม่จำเป็นต้องลบแพ็คเกจเหล่านั้นออก!
Vahid Amiri

คำตอบ:


184

ฉันเพิ่งประสบปัญหาเดียวกัน เมื่อคุณสร้างโปรเจ็กต์เว็บใหม่แพ็คเกจนักเก็ตสองแพ็กเกจจะถูกเพิ่มลงในโปรเจ็กต์ของคุณโดยอัตโนมัติ หากคุณลบออกปัญหาของคุณควรได้รับการแก้ไข ชื่อแพ็กเกจคือ " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " และ " Microsoft.Net.Compilers "


สิ่งนี้ใช้ได้ผลและเหมาะกับผู้ให้บริการเว็บโฮสติ้งบุคคลที่สาม มีคำถามสองข้อเกี่ยวกับเรื่องนี้ - 1) การลบแพ็คเกจ Nuget เหล่านี้จะส่งผลกระทบต่อผลิตภัณฑ์ในทางใดหรือไม่? 2) สามารถลบแพ็คเกจเหล่านี้ออกจากเทมเพลตโครงการเพื่อหลีกเลี่ยงการออกกำลังกายนี้ทุกครั้งได้หรือไม่?
นูระ

1) ไม่มีผลกระทบใด ๆ กับขั้นตอนการทำงานหรือตรรกะของผลิตภัณฑ์ แต่ url ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ) ซึ่งให้บริการโดย @ Ajay2707 กล่าวว่าแพ็คเกจนี้มีผลต่อเวลาในการโหลดหน้าเว็บ 2) ฉันไม่รู้ว่าคุณจะทำสิ่งนี้ได้อย่างไร แต่ถ้าคุณสามารถทำได้ก็จะไม่มีปัญหาใด ๆ
Kemal Kefeli

3
ลบทั้งแพ็คเกจ NuGet ลบการประกาศการกำหนดค่า ยังคงมีการสร้างโฟลเดอร์นี้ในขณะที่รวบรวมหรือเผยแพร่ .. เฉพาะแพ็คเกจ NuGet ที่แอปพลิเคชันของฉันใช้คือ "Newtonsoft.Json" ฉันจำเป็นต้องถอนการติดตั้งด้วยหรือไม่?
Ranjan Kumar

8
โปรดทราบว่าการลบแพ็คเกจเหล่านี้จะทำให้การใช้งานคุณสมบัติ C # 6 เสียหาย ซึ่งสามารถแก้ไขได้โดยยกเลิกการเลือก "" อนุญาตให้อัปเดตไซต์ที่คอมไพล์ไว้ล่วงหน้า "ซึ่งรวบรวมมุมมองไว้ล่วงหน้าเป็นต้น
Rutix

9
@RanjanKumar: เปิดไฟล์ csproj ของคุณในโปรแกรมแก้ไขข้อความและลบโหนดที่เกี่ยวข้องกับแพ็คเกจ NuGet ที่อธิบายไว้ในคำตอบของ Kemal ซึ่งอาจรวมถึงImportโหนด Targetโหนด (SureNugetPackageBuildImports) และReferenceโหนด ลบ<system.codedom>โหนดของ web.config ของคุณด้วย
Brian

16

ฉันมีปัญหาเดียวกัน ทำตามขั้นตอนจากที่นี่ โดยทั่วไป:

  1. ถอนการติดตั้งแพ็คเกจ

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. ในการตั้งค่าโปรไฟล์การเผยแพร่ของคุณให้ยกเลิกการเลือก "อนุญาตให้อัปเดตไซต์ที่คอมไพล์ล่วงหน้าได้" คุณสามารถค้นหาสิ่งนี้ได้ในการตั้งค่า> คอมไพล์ล่วงหน้าระหว่างการเผยแพร่> กำหนดค่า


7
ด้วยวิธีนี้คุณไม่สามารถใช้คุณสมบัติ C # 6 ในมุมมองได้
RokX

2

หลังจากค้นหาสิ่งเดียวกันที่ฉันเผชิญฉันเพิ่งมาที่นี่ ฉันอ่านคำตอบด้านบนซึ่งถูกต้อง

ฉันให้คำตอบเพราะนี่คือบทความที่ดีที่จะอธิบาย:

  1. เหตุใดรหัสเผยแพร่จึงมี exe นี้เช่นเดียวกับสภาพแวดล้อมการพัฒนา
  2. มีประโยชน์อย่างไรและจะเอาออกอย่างไร?

นี่เป็นบทความที่ดีมากเกี่ยวกับประวัติของ exe นี้


2

หลังจากความพยายามนับไม่ถ้วน .... และตามเว็บไซต์นี้. ฉันพบว่าคุณสามารถใช้/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falseใน MSBuild เพื่อแปลง web.config ซึ่งรวมถึงคอมไพเลอร์ roslyn ในบิลด์ด้วย ผลลัพธ์จะเหมือนกับสิ่งที่คุณได้รับจากการเผยแพร่ใน Visual Studio ลงในระบบไฟล์


ไม่เข้าใจบทความในลิงค์ของเว็บไซต์ แต่ทำตามคำแนะนำของคุณเพื่อเพิ่มพารามิเตอร์การสร้างนั้นใน MSBuild ได้ผล .. อย่างที่คุณบอกผลลัพธ์จะเหมือนกับเมื่อเราเผยแพร่ในระบบไฟล์ ขอบคุณ
Bruce


0

ฉันมีปัญหาเดียวกันในเดือนกันยายน 2559 เมื่อฉันเข้ารับโปรแกรม ASP.NET ที่มีอยู่ ฉันพบว่ามีแพ็กเกจคอมไพเลอร์สองเวอร์ชันที่ Kemal กล่าวถึงหลายเวอร์ชันติดตั้งในโครงการต่างๆของโซลูชัน

ประการแรกฉันจึงอัปเดตเพื่อให้เหมือนเดิม VS ไม่ได้บอกคุณว่ามีการอัปเดตในสถานการณ์นี้ (หรือฉันอาจพลาดไป?)

จากนั้นฉันต้องรีสตาร์ท VS2015 เพื่อให้แพ็คเกจทำความสะอาดอย่างถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.