繁体   English   中英

我如何创建一个(仅设计时)nuget程序包,该程序包在安装时不添加程序集引用?

[英]How can i create a (design time only) nuget package that doesn't add an assembly reference when installed?

我想为仅设计时间的程序包构建一个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>

在构建此程序包时, \\lib\\net40\\CodeAnalysis.dll存在CodeAnalysis.dll程序集,并且在\\tools\\CodeAnalysis.dll添加了一个副本。

当我在另一个项目中使用此程序包时,默认行为是对该程序集的引用被添加到该项目中。 由于这是仅设计/构建时的程序集(仅在对项目执行代码分析时使用),因此我不想nuget添加此引用。

我已经查看了nuspec文件的<references>部分,但这并没有为我提供如何防止创建引用的线索。

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

看一下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/

-tool命令行开关传递给nuget。 这将不包括DLL作为参考程序集。

nuget pack MyProject.csproj -tool

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM