2017-09-25 40 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

相关问题