2015-06-22 20 views
0

我想構建一個nuget包只用於設計時間包。該軟件包包含使用自定義代碼分析規則集的資源(規則集文件,構建道具文件和程序集)。我如何創建僅在設計時間的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添加此引用。

我查看了nuspec文件的<references>部分,但是這並不能讓我知道如何防止引用。

如何構建nuspec文件,以便在安裝nuget包時nuget不添加項目引用?

回答

0

查看System.Diagnostics命名空間中的ConditionalAttribute類。有了這個,您可以指定一個條件編譯符號,如果未定義,則[Conditional]屬性的目標未編譯到生成的程序集中。

通過這種方式,您可以定義一個CODE_ANALYSIS符號(或您選擇的任何名稱)並使用[Conditional("CODE_ANALYSIS")]屬性修飾項目中的所有類型,方法,屬性等。如果使用你的軟件包的人還沒有定義這個符號,那麼他們生成的編譯後的程序集將不包含對你的項目的引用,但是他們可以在設計時從中受益。

這是JetBrains使用他們Annotations NuGet package,有一個blog post約在這裏:

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

1

傳遞-tool命令行開關的NuGet。這將不包括作爲引用程序集的DLL。

nuget pack MyProject.csproj -tool 
+0

是否可以在nuspec文件中指定它? (我直接從Visual Studio構建) –

+0

使用Visual Studio擴展? –

相關問題