假设我有以下课程
public class MyClass
{
[NotifyPropertyChangedInvocator("propertyName")]
public void RespondToProperty(string propertyName)
{
//Some code here...
}
}
Run Code Online (Sandbox Code Playgroud)
当解决方案中的另一个项目使用此类时,注释可以正常工作.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>
Run Code Online (Sandbox Code Playgroud)
注释是否可以在不引用项目代码的情况下工作,但只使用已编译的dll?
如果您正在使用最新版本的注释 - 例如从ReSharper 9设置复制的默认源实现,或引用官方nuget包 - 那么默认情况下它们不会编译到生成的dll中.
使用[Conditional("JETBRAINS_ANNOTATIONS")]applied 定义属性.这意味着除非JETBRAINS_ANNOTATIONS定义了符号,否则不会编译属性,但ReSharper仍然可以使用属性进行分析.如果定义JETBRAINS_ANNOTATIONS,则将属性编译到生成的dll中,并且当生成的dll用作引用时,ReSharper现在可以使用这些属性.
有一点需要注意 - 如果你通过nuget包引用dll并定义JETBRAINS_ANNOTATIONS,那么生成的dll现在将直接引用JetBrains.Annotations.dll,你需要运送JetBrains.Annotations.用你的dll做dll.如果您通过源包含注释,它们将被编译到您生成的dll中,并且您没有任何额外的二进制引用.