0

nuget設計時のみのパッケージのパッケージをビルドしたいと考えています。このパッケージには、カスタム コード分析ルール セットを使用するためのリソース (ルールセット ファイル、ビルド プロパティ ファイル、およびアセンブリ) が含まれています。

私の nuspec ファイル (CodeAnalysisアセンブリ プロジェクト内) は次のようになります。

<package>
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <description>$description$</description>
        <references>
        </references>
        <developmentDependency>true</developmentDependency>
    </metadata>
    <files>
        <!-- copy rules assembly to tools folder -->
        <file src="bin\Release\CodeAnalysis.dll" target="tools\CodeAnalysis.dll" />
        <file src="tools\CodeAnalysis.ruleset" target="tools\CodeAnalysis.ruleset" />
        <file src="build\CodeAnalysis.props" target="build\CodeAnalysis.props" />
    </files>
</package>

このパッケージをビルドすると、CodeAnalysis.dllアセンブリが に存在し\lib\net40\CodeAnalysis.dll、コピーが に追加され\tools\CodeAnalysis.dllます。

このパッケージを別のプロジェクトで使用すると、既定の動作では、アセンブリへの参照がプロジェクトに追加されます。nugetこれは設計/ビルド時のみのアセンブリ (プロジェクトでコード分析を実行するときにのみ使用) であるため、この参照を追加したくありません。

<references>ファイルのセクションを調べましたnuspecが、参照が行われないようにする方法の手がかりが得られません。

nuget パッケージのインストール時に nuget がプロジェクト参照を追加しないように、nuspec ファイルを作成するにはどうすればよいですか?

4

2 に答える 2

1

System.Diagnostics名前空間のConditionalAttributeクラスを見てください。これにより、属性のターゲットが定義されていない場合、結果のアセンブリにコンパイルされない条件付きコンパイル シンボルを指定できます。[Conditional]

このようにして、CODE_ANALYSISシンボル (または選択した任意の名前) を定義し、プロジェクト内のすべての型、メソッド、プロパティなどを[Conditional("CODE_ANALYSIS")]属性で装飾できます。パッケージを使用しているユーザーがこのシンボルを定義していない場合、結果としてコンパイルされたアセンブリにはプロジェクトへの参照が含まれませんが、設計時にそれを利用できます。

これは、JetBrainsがAnnotations NuGet パッケージに使用するものです。これに関するブログ投稿がここにあります。

http://blog.jetbrains.com/dotnet/2015/08/12/how-to-use-jetbrains-annotations-to-improve-resharper-inspections/

于 2015-10-14T17:30:37.927 に答える