8

我想用 StringFormatMethod 属性标记我的一种方法,以便 Resharper 语法突出显示它。

我可以通过引用 JerBrains.Annotations 程序集并添加属性来做到这一点。

但是,我发现这是一种非常具有侵入性的方法。这里不是每个人都使用 JetBrains,它需要将 .dll 提交到 subversion,添加依赖项并用特定于特定 IDE 的东西乱扔代码,这是我讨厌的。

我阅读了有关“外部注释”功能的信息,但我无法做到。我不确定我是否做错了,或者解决方案中的项目是否根本不支持它(即不是编译的程序集引用)。

那么有没有办法以非侵入性的方式为项目中的方法添加代码注释呢?

PS这是方法:

使用系统;

namespace MyLib
{
    public static class Assert
    {
        public static void That(bool condition, string format, params object[] @params)
        {
            if (!condition)
                throw new Exception(string.Format(format, @params));
        }
    }
}

这是内容

C:\Program Files (x86)\JetBrains\ReSharper\v7.1\Bin\ExternalAnnotations\MyLib.xml:

<assembley name="MyLib">
    <member name="MyLib.Assert.That(System.Boolean,System.String,System.Object[])">
        <attribute ctor="M:JetBrains.Annotations.StringFormatMethodAttribute.#ctor">
            <argument>format</argument>
        </attribute>
    </member>
</assembley>
4

3 回答 3

10

总结一下可能性:

  • 您引用 nuget Jetbrains.Annotations,并且不要定义JETBRAINS_ANNOTATIONS 此类注释仅对使用源代码的开发人员有用,它们不会在您的二进制文件中编译(使用条件语句)并且在引用您的 dll 时它们不可见。您甚至可以在 packages.config 中添加developmentOnly="true"属性Jetbrains.Annotations,因此默认情况下它不会被视为依赖项。

  • 您如上所述引用但定义JETBRAINS_ANNOTATIONS 现在您具有真正的二进制依赖项,并且Jetbrains.Annotations.dll必须与您的库一起分发,或者必须作为 nuget 依赖项下载。

  • 您将internal选中的注释(因此客户端代码不会使用它们)复制到“YourLib.Annotations”中:然后将它们嵌入到您的库中,即使其他开发人员仅使用二进制版本也可以使用它们。

  • 您提供外部注释:对于更大的库/更多属性,这也可能消耗 40k,它是单独的文件,通常创建/使用不那么简单。

我个人选择了第三个选项(对于共享库,项目通常只使用 nugets)

于 2015-08-15T11:24:54.547 回答
8

您不必引用程序集来添加注释属性。根据文档,您可以转到ReSharper/Options/Code Annotations,将属性实现复制到剪贴板,然后将它们粘贴到您自己的源中,ReSharper 将在其中使用它们。如果您不想在JetBrains程序集中使用它们,您甚至可以更改它们所在的命名空间。

不过,我不知道您是否会为源代码使用外部(XML)注释。我得到的印象是它们只适用于现有的二进制文件。也就是说,我认为用属性装饰你的源代码对于你自己和其他开发人员来说是非常有价值的文档来源。

于 2013-03-28T11:11:43.717 回答
5

不知道它是否有帮助,但元素名称<assembley>拼写错误(除非他们实际上在架构中使用了它)。应该是<assembly>

于 2014-06-04T09:28:50.820 回答