2017-12-19 21 views
0

私たちのナゲットパッケージからカスタムルールセットファイルを使用しようとしています。私はパッケージ.propsファイルのビルドフォルダに追加した:コード解析は、(.propsの)nugetパッケージのルールセットでは機能しません

<Project> 
    <PropertyGroup> 
    <CodeAnalysisRuleSet> 
     $(MSBuildThisFileDirectory)..\My.Shared.ruleset 
    </CodeAnalysisRuleSet> 
    <RunCodeAnalysis>true</RunCodeAnalysis> 
    </PropertyGroup> 
</Project> 

ルール設定ファイルは、パッケージのルートフォルダにある、パスは.propsのインポートがcsprojファイルにファイルを追加することだ、正しいです。

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="..\packages\My.Shared.Rulesets.1.0.0.7118\build\My.Shared.Rulesets.props" Condition="Exists('..\packages\My.Shared.Rulesets.1.0.0.7118\build\My.Shared.Rulesets.props')" /> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    ... 

しかし、Visual Studioでは正しいルールセットが表示されません。参照 - >アナライザからアクティブなルールセットを開くと、別のファイルを指しています:MinimumRecommendedRules.rulesetこれは私のカスタムではなくこのファイルのルールを使用しています。

  • Visual Studioの地域コミュニティ2017バージョン15.5.0
  • 4.6.1

答えて

1

コード分析は、(.propsから)nugetパッケージからルールセットで作業していないプロジェクトのターゲットフレームワーク

パッケージフォルダのcontentフォルダにルールセットファイルを設定して、VS/MSBuildがこのファイルをプロジェクトに追加してからVS \ MSBu ildがデフォルトのMinimumRecommendedRules.rulesetMy.Shared.ruleset.rulesetファイルに変更する可能性があります。

たとえば、あなたのNuGetソースフォルダ構造は、この( "My.Shared.ruleset" あなたのパッケージのIDがある)のようになります。

  • ビルド

    • My.Shared.ruleset。小道具
  • コンテンツ

    • My.Shared.ruleset.ruleset My.Shared.ruleset.propsの内容は、次のようなものです

:nugetパッケージを作成するための

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <RunCodeAnalysis>true</RunCodeAnalysis> 
     <CodeAnalysisRuleSet>My.Shared.Rulesets.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
</Project> 

ステップ:

  • オープンNuGet Package Explorer、パッケージを新規に選択、編集 - >編集 メタデータ、IDをに変更- >保存してください。

  • たContent>追加 - >コンテンツフォルダ - >追加、既存の[ファイル] - > [あなたのMy.Shared.Rulesets.ruleset

  • たContent>追加 - >フォルダ - を構築する>を選択>既存のファイル - を追加するには、My.Shared.ruleset.props選択 - > [保存]を。

enter image description here

そして、テストプロジェクトにこのパッケージを追加します。

enter image description here

次にあなたがアクティブなルールセットがnugetパッケージから1に変更されましたでしょう。コメントを

アップデート:私たちは、それぞれのプロジェクトにルールセットファイルのコピーを避けるためにしようとしていた

。開発者は、各プロジェクトにルールセットファイルをコピーしたくない場合は、それを変更し、リポジトリに

をプッシュする傾向があり、あなたはちょうどあなたが必ずパスが正しい確認する必要があり.propsファイルにパスを変更する必要がありますが、 .propsファイルのなどです。 .rulesetファイルをローカルパスに設定します:D:\ShareFolder\My.Shared.Rulesets.ruleset、次に.rulesetをnugetパッケージから移動し、.propsのパスをD:\ShareFolder\My.Shared.Rulesets.rulesetに変更します。

enter image description here

は、この情報がお役に立てば幸いです。

+0

私たちは、ルールセットファイルを各プロジェクトにコピーすることを避けようとしていました。開発者はそれを変更してリポジトリにプッシュする傾向があります)ビルドでは適切なルールセットが見つかっているため、Visual Studioのバグは適切な場所では見えません。 –

+0

@MateuszMoska、ルールセットファイルを各プロジェクトにコピーしたくない場合は、.propsファイルのパスを変更するだけですが、パスが.propsファイルで正しいことを確認する必要があります。サンプルテストでは、私の側でうまく動作します。私の更新された答えを詳細にチェックすることができます。 –

+0

@MateuszMoska、この問題のアップデートはありますか?あなたの問題を解決しましたか?そうでない場合は、この問題の最新の状況を教えてください。 –

関連する問題