2017-09-25 42 views
1

我最近安裝了Resharper,我正在重構一些C#解決方案。作爲此過程的一部分,我在我的項目中添加了對JetBrains.Annotations的引用。但是,我不確定是否應該將此依賴項標記爲私有(以防止它作爲依賴項傳遞給更高級別的項目),還是這樣做會潛在地破壞事情。JetBrains.Annotations應該在我的csproj文件中聲明爲私人資產嗎?

換句話說,我不知道我是否應該這樣做:

<ItemGroup> 
    <PackageReference Include="JetBrains.Annotations" Version="11.0.0" PrivateAssets="All" /> 
</ItemGroup> 

或者簡單:

<ItemGroup> 
    <PackageReference Include="JetBrains.Annotations" Version="11.0.0" /> 
</ItemGroup> 

NuGet package documentation

所有用途的ReSharper Annotations屬性默認從元數據中刪除,這意味着沒有對'JetBrains.Annotations.dll'的實際二進制引用裝配生產。

如果我正確理解這一點,它表明將包標記爲私有應該是安全的。不過,我只想確認一下。

+0

我發現一個[非常有用的參考](https://blog.jetbrains.com/dotnet/2015/08/12/how-to-use- jetbrains-annotations-to-improve-resharper-inspections /)爲此 - 現在嘗試使用建議的方法。 – Tagc

回答

2

如果我正確理解這一點,它表明將包標記爲私有應該是安全的。不過,我只想確認一下。

這是正確的。這裏有兩件事情。元數據引用(在程序集中)和NuGet包引用。

由於JetBrains註釋是有條件編譯的(使用[Conditional("JETBRAINS_ANNOTATIONS")]),只要您沒有定義JETBRAINS_ANNOTATIONS,註釋的所有痕跡都將從程序集本身中刪除。這也意味着刪除NuGet包參考是安全的。

但是,如果你定義JETBRAINS_ANNOTATIONS,你還應該包括NuGet包參考。

the docs更多信息...

+0

謝謝。我打算在圖書館項目中使用這些註釋,這些註釋只會在我的公司內使用,可能只是我自己。我希望我編寫的更高級別的項目能夠從這些註釋中受益。根據你寫的和[本博客文章](https://blog.jetbrains.com/dotnet/2015/08/12/how-to-use-jetbrains-annotations-to-improve-resharper-inspections/),看來我*應該*用'JETBRAINS_ANNOTATIONS'進行編譯,因此*應該*將JetBrains.Annotations暴露爲依賴。目前正在尋找在csproj中追加編譯符號的最佳方式。 – Tagc

+0

如果您通過NuGet使用組件,那麼是的。如果所有項目都採用相同的解決方案,我認爲不需要。 – khellang

+0

我發佈我的項目並通過NuGet使用它們。他們將採用不同的解決方案。 – Tagc

相關問題