วิธีระงับคำเตือน MSBuild ที่เฉพาะเจาะจง


100

มีวิธีใดในการปิดใช้งานคำเตือน MSBuild เฉพาะ (เช่น MSB3253) เมื่อเรียกใช้ MSBuild จากบรรทัดคำสั่ง สคริปต์การสร้างของฉันเรียก msbuild.exe ด้วยวิธีต่อไปนี้:

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release

ฉันพบว่าฉันสามารถระงับคำเตือน C # (เช่น CS0618) โดยใช้พารามิเตอร์อื่นสำหรับ msbuild.exe:

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release /p:NoWarn=0618

อย่างไรก็ตามวิธีนี้ใช้ไม่ได้กับคำเตือน MSBuild อาจมีคุณสมบัติวิเศษอื่นให้ตั้งค่า?

ฉันใช้. NET 3.5 และ VS2008

คำตอบ:


64

ฉันสามารถลดระดับการเตือนด้วย /p:WarningLevel=X

msbuild.exe MySolution.sln /t:Rebuild /p:WarningLevel=0 /p:Configuration=Release
                                      ^^^^^^^^^^^^^^^^^
Warning  
Level    Meaning
-------- -------------------------------------------
      0  Turns off emission of all warning messages.

      1  Displays severe warning messages

      2  Displays level 1 warnings plus certain, less-severe warnings, such
         as warnings about hiding class members

      3  Displays level 2 warnings plus certain, less-severe warnings, such 
         as warnings about expressions that always evaluate to true or false

      4  (the default) Displays all level 3 warnings plus informational warnings

3
ฉันไม่คิดว่าจะได้ผลถ้าคุณกำหนดค่าระดับการเตือนสำหรับแต่ละโครงการในโซลูชันให้มากกว่า 0
si618

6
ช่ายยย. นั่นเหมือนกับการเปลี่ยนปัญหามอเตอร์ในรถของคุณโดยใช้เทปบนแผงหน้าปัด :-)
cacau

เพิ่งลองใช้กับ MSBuild 15.4.8.50001 และ / p: WarningLevel = 0 ไม่ระงับคำเตือน MSBuild MSB3227
ความคิด

2
ฉันลองแล้วและสิ่งนี้จะระงับคำเตือนของคอมไพเลอร์ (CS .. ) แต่ไม่ใช่คำเตือน MSBuild (MSB ... )
marsze

นี่เป็นการแฮ็กหากคุณต้องการจริงๆ แต่คุณสามารถสร้าง Directory.Build.rsp ที่อยู่ติดกับ csproj ที่คุณต้องการระงับคำเตือนนี้และเพิ่มเนื้อหา "/ WarnAsMessage: MSBXXXX"
mjsab โดย

38

สำหรับ MSB3253 คุณสามารถตั้งค่าในไฟล์โครงการ (* .csproj) ที่ทำให้เกิดคำเตือนดังกล่าว

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <!-- some code goes here -->
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
    <!-- some code goes here -->
  </PropertyGroup>

5
คำตอบนี้ครอบคลุม MSB3270 ด้วย มีประโยชน์มากเมื่อคุณใช้ตัวแก้ไขแอสเซมบลีแบบกำหนดเองเพื่อจัดการโหลดแอสเซมบลีเฉพาะแพลตฟอร์ม
MOverlund

16
มีรายการการตั้งค่าเวทมนตร์เหล่านี้ที่ MS .. หรือไม่?
ATV

โปรดเขียนรายละเอียดเพิ่มเติมว่าควรทำอย่างไร ไฟล์ไหน? ควรแก้ไข? สิ่งนี้ใช้ได้กับ MSB8012 หรือไม่
Gayane

ฉันคลิกขวาที่ไฟล์ * .csproj ใน Solution Explorer คลิก "Unload Project" คลิกขวา "Edit" จากนั้นคัดลอกส่วน "ResolveAssembly" ลงในกลุ่มคุณสมบัติแรกในตอนท้าย (โดยปกติจะอยู่หลังแท็ก TargetFrameworkProfile) และจะหยุดคำเตือนนี้
Steven Wood

31

ตามหัวข้อนี้ในคำเตือน MSDN Forum MSBuild ไม่สามารถระงับได้


22
หมายเหตุ: คำตอบนี้ถูกต้องสำหรับข้อผิดพลาดจาก MSBuild (ขึ้นต้นด้วย "MSB") ตามที่ OP ถาม หาก Google นำคุณมาที่นี่และคุณต้องการระงับข้อผิดพลาดของคอมไพเลอร์ (เช่น "CS2008") คุณสามารถทำสิ่งที่ OP ทำ: /p:nowarn=2008(ตัด "CS" ออกจากตัวเลข)
Michael Haren

1
คุณรู้หรือไม่ว่ายังคงเป็นเช่นนี้อยู่?
Martin Ba

เอกสาร MSDN เปิด / nowarn ที่นี่ Msbuild ส่งผ่านตัวแปรนี้ไปยัง csc.exe ที่ส่วนหนึ่งของเป้าหมาย CoreCompile
Dav Evans

ดูเหมือนจะไม่มีวิธีใดในการระงับคำเตือนคอมไพเลอร์ roslyn และปราบปรามใน MS-Build '#pragma คำเตือนปิดใช้งาน RCS1110 // ประกาศประเภทภายในเนมสเปซ' ด้วย RCS drop นำคำเตือนคอมไพเลอร์กลับมา
user1431356

11

สำหรับ Googling ตอนนี้ (เช่นฉัน): MSBuild 15.0 ที่กำลังจะมาถึง (จะออกพร้อม Visual Studio 2017 ฉันคิดว่า) จะใช้/NoWarnตัวเลือกในการระงับคำเตือนเฉพาะในที่สุด (เช่นเดียวกับ/WarnAsErrorการปฏิบัติต่อคำเตือนเฉพาะหรือคำเตือนทั้งหมดเป็นข้อผิดพลาด) .


0

MSBuild เวอร์ชันล่าสุดสนับสนุนสิ่งนี้ผ่านทางบรรทัดคำสั่ง ( ตามที่กล่าวถึงโดย EM0 ) หรือด้วยคุณสมบัติ

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3253</MSBuildWarningsAsMessages>
</PropertyGroup>

สำหรับรายละเอียดโปรดดูความคิดเห็นนี้

ฉันไม่พบเอกสารอย่างเป็นทางการเกี่ยวกับเรื่องนี้ แต่เป็นที่กล่าวถึงในVerifyFileHashเอกสารงาน

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