2017-09-08 14 views
3

.NET 4.6 프로젝트를 .NET Core 2.0으로 업그레이드 할 때 문제가 발생했습니다. 우리의 모든 프로젝트는 NuGet 패키지가 제공하는 사용자 정의 StyleCop 룰 세트를 사용합니다. ruleset은 custom.ruleset이라는 파일에 있으며 패키지 내부의 content 폴더에 있습니다. 모든 프로젝트에서이 패키지를 사용하므로 custom.ruleset의 사본을 얻습니다.NuGet을 통해 .net 핵심 프로젝트에 코드 분석 룰 세트 제공

그러나 Core 2.0 및 Standard 2.0 프로젝트에서는이 기능이 작동하지 않습니다. 파일은 더 이상 패키지의 내용 폴더에서 복사되지 않으며 대신 contentFiles 폴더를 사용해야합니다.

<?xml version="1.0" encoding="utf-8" ?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <version>1.0.11</version>  
    <metadata> 
    ... 
    <contentFiles> 
     <files include="content\*.ruleset" buildAction="None" copyToOutput="false" flatten="true"/> 
    </contentFiles> 
    </metadata> 
    <files> 
    <file src="content\**" target="contentFiles/any/any" /> 
    </files> 
</package> 
규칙 집합이 프로젝트에서 Visual Studio에서 나타나는 이러한 구조에서

하지만 <CodeAnalysisRuleSet>custom.ruleset</CodeAnalysisRuleSet>가 자동으로 실패와 프로젝트의 .csproj 파일에서 그것을 참조하려고하고 :

는 지금과 같이 보이는 nuspec이 기본 룰 세트 사용으로 복귀합니다. 난 <CodeAnalysisRuleSet>$(NuGetPackageRoot)CustomRuleset\1.0.11\contentFiles\any\any\custom.ruleset</CodeAnalysisRuleSet>을 추가하여 작동하도록 할 수 있지만 이것은 csproj가 룰셋이 바뀔 때마다 업데이트해야 함을 의미하므로 수동 프로세스 일 수도 있습니다. 어떤 아이디어가 이것을 고치는 방법?

답변

1

아이디어는 파일을 내용으로 전개하지 않고 빌드 논리를 NuGet 패키지에 추가하는 것입니다.

패키지는 다음과 같은 방식으로 구성되어 있는지 확인합니다 :

  • 빌드 \
  • 빌드 \의 custom.ruleset
  • 빌드 \ {YourPackageName} .targets (예 : CustomRuleset.targets)

이 구조는 규칙에 따라 .targets 파일을 자동으로 소비 프로젝트로 가져옵니다.

.targets 파일에는 다음이 포함되어 있어야합니다

<Project> 
    <PropertyGroup> 
    <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)custom.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
</Project> 

이 프로젝트의 규칙 집합 속성은 .targets 파일에 상대적인 위치에 덮어 쓰기하게됩니다.

이 또한 새로운 PackageReference 스타일의 NuGet 패키지 (packages.config 대체)를 사용하여 VS 2017 (15.2+)에서 옵트 인 .net 프레임 워크 프로젝트에 적용됩니다.

+0

고마워요! 완벽하게 작동했습니다. – Meeji