引用已编译的dll时,Resharper代码注释不起作用

And*_*ker 1 c# resharper

假设我有以下课程

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?

cit*_*att 5

如果您正在使用最新版本的注释 - 例如从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中,并且您没有任何额外的二进制引用.