假设我有以下课程
public class MyClass
{
[NotifyPropertyChangedInvocator("propertyName")]
public void RespondToProperty(string propertyName)
{
//Some code here...
}
}
当解决方案中的另一个项目使用此类时,注释会起作用。 Resharper会自动完成调用者类属性(应该如此)。 但是当我引用编译后的dll时,resharper不会自动完成属性名称。
我也尝试过定义以下外部注释,但没有运气:
<assembly name=”MyAssembly">
<member name=”M:MyAssembly.MyClass.RespondToProperty(System.String,System.String)”>
<attribute ctor=”M:JetBrains.Annotations.NotifyPropertyChangedInvocatorAttribute.#ctor” />
</member>
</assembly>
注释是否可以在不引用项目代码的情况下工作,但只使用已编译的dll?
答案 0 :(得分:5)
如果您正在使用最新版本的注释 - 例如从ReSharper 9设置复制的默认源代码实现,或引用official nuget package - 那么它们不会被编译到生成的dll中,默认值。
使用[Conditional("JETBRAINS_ANNOTATIONS")]
定义属性。这意味着除非定义了JETBRAINS_ANNOTATIONS
符号,否则不会编译属性,但ReSharper仍然可以使用这些属性进行分析。如果定义JETBRAINS_ANNOTATIONS
,则会将属性编译到生成的dll中,并且当生成的dll用作参考时,ReSharper现在可以使用这些属性。
要注意的一件事 - 如果您通过nuget包引用dll并定义JETBRAINS_ANNOTATIONS
,那么生成的dll现在将直接引用JetBrains.Annotations.dll,并且您需要使用生成的dll发送JetBrains.Annotations.dll。如果您通过来源添加注释,它们会被编译到您生成的dll中,并且您没有任何额外的二进制引用。