특정 MSBuild 경고를 억제하는 방법


97

명령 줄에서 MSBuild를 실행할 때 특정 MSBuild 경고 (예 : MSB3253)를 비활성화하는 방법이 있습니까? 내 빌드 스크립트는 msbuild.exe를 다음과 같은 방식으로 호출합니다.

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

msbuild.exe에 대한 다른 매개 변수를 사용하여 C # 경고 (예 : CS0618)를 억제 할 수 있음을 발견했습니다.

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

그러나이 접근 방식은 MSBuild 경고에 대해 작동하지 않습니다. 다른 마법 속성을 설정할 수 있습니까?

.NET 3.5 및 VS2008을 사용하고 있습니다.

답변:


61

나는 경고 수준을 억제했습니다. /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

2
솔루션의 각 프로젝트에 대한 경고 수준을 0보다 크게 구성한 경우에는 이것이 작동하지 않는다고 생각합니다.
si618

6
그래 맞아. 즉 :-) 대시 보드에 테이프를 사용하여 차에 모터 문제의 회전처럼
카카우

MSBuild 15.4.8.50001로 시도해 보았고 / p : WarningLevel = 0은 MSBuild 경고 MSB3227을 억제하지 않습니다.
생각

2
나는 그것을 시도하고 이것은 컴파일러 경고 (CS ..)를 억제하지만 MSBuild 경고 (MSB ...) 는 억제 하지 않습니다
marsze

이것은 정말로 필요한 경우 해킹이지만이 경고를 억제하려는 csproj 옆에 Directory.Build.rsp를 만들고 "/ WarnAsMessage : MSBXXXX"내용을 추가 할 수 있습니다.
mjsabby

37

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

이것을 necro하기 위해 ... 솔루션 탐색기에서 * .csproj 파일을 마우스 오른쪽 단추로 클릭하고 "프로젝트 언로드"를 클릭하고 "편집"을 마우스 오른쪽 단추로 클릭했습니다. 그런 다음 (보통 TargetFrameworkProfile 태그 후) 끝에 첫 번째 속성 그룹에이 "ResolveAssembly"섹션을 복사하여이 경고를 중지
스티븐 우드

31

MSDN Forum 의이 스레드에 따르면 MSBuild 경고는 억제 할 수 없습니다.


21
참고 :이 답변은 OP가 요청한대로 MSBuild ( "MSB"접두사)의 오류에 대해 정확합니다. Google이 여기로 왔고 컴파일러 오류 (예 : "CS2008")를 억제하려면 OP가 수행 한 작업을 수행 할 수 있습니다. /p:nowarn=2008(숫자에서 "CS"를 제거)
Michael Haren

1
이것이 여전히 사실인지 알고 있습니까?
Martin Ba

/ nowarn의 MSDN 문서는 여기 . Msbuild는 CoreCompile 대상의 일부에서이 변수를 csc.exe로 전달합니다.
Dav Evans

roslyn 컴파일러 경고를 억제하고 MS-Build에서 억제하는 방법은없는 것 같습니다. '#pragma warning disable RCS1110 // 네임 스페이스 내부에 유형을 선언합니다.' RCS가 삭제되면 컴파일러 경고가 다시 표시됩니다.
user1431356

11

지금 인터넷 검색을하는 사람들을 위해 (나와 같은) 다가오는 MSBuild 15.0 (Visual Studio 2017과 함께 출시 될 예정)이 마침내 특정 경고를 억제 하는 /NoWarn옵션구현할 것입니다 ( /WarnAsError특정 경고 또는 모든 경고를 오류로 처리). .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.