[英]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包的方式 ,这里有一篇博客文章 :
将-tool
命令行开关传递给nuget。 这将不包括DLL作为参考程序集。
nuget pack MyProject.csproj -tool
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.