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

时间:2015-02-07 10:00:42

标签: c# resharper

假设我有以下课程

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?

1 个答案:

答案 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中,并且您没有任何额外的二进制引用。