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,但这并没有给我一个线索,如何防止被引用。

如何构建 nuspec 文件,以便 nuget 在安装 nuget 包时不添加项目引用?

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 回答
1

-tool命令行开关传递给 nuget。这不会将 DLL 作为引用程序集包括在内。

nuget pack MyProject.csproj -tool
于 2017-02-08T06:22:05.300 回答