- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
以下代码生成 CA2000 ("Dispose objects before losing scope") Main 的第一行违规,但不是第二行。我真的很喜欢第二行的 CA2000 违规,因为这是一个(明显简化的)模式,经常在我处理的大型代码库中找到。
有谁知道为什么不为第二行产生违规?
public static void Main()
{
new Disposable();
MakeDisposable();
}
private static Disposable MakeDisposable() { return new Disposable(); }
private sealed class Disposable : IDisposable
{
public void Dispose()
{
}
}
最佳答案
简短的回答是,CA2000 坏了,不太可能很快修好。参见 this bug report这几乎正是你的问题:
The warning CA2000 in particular is a rule that has known issues and that we won’t be able to fix it up in its current form.
较长的答案是,使 CA2000 正确是困难。在过去的 Visual Studio 版本中,尤其是 2010 版,错误的 CA2000 警告无处不在,您无法采取任何措施让它们消失。在 Stack Overflow 上搜索有关它的数十个问题中的任何一个。
即使在您可以消除警告的情况下,解决方法也比只保留它更糟糕。问题是,在您遇到的这种情况下,您不希望对象在离开工厂方法的范围之前被处理掉。除非,你这样做 - 如果它抛出异常。在这种情况下,方法的返回值丢失,调用者无法自行处置对象。
不幸的是,试图弄清楚这一点意味着对已编译的 IL 进行程序流分析,以确定是否有任何代码路径(包括异常代码路径)允许对象泄漏。最终结果是,几乎所有您尝试从方法返回 IDisposable
的情况都会产生错误。
Microsoft 通过做两件事对此做出回应:
随着 Roslyn 编译器的重写,FxCop 等工具能够进行一些源代码级分析,在这种情况下可能更容易正确。同时,普遍的共识是,只需关闭 CA2000。
如果您好奇的话,一些测试似乎可以确认当前 (2013) CA 规则仅在本地包含、本地构造的 IDisposable
实例时触发> 超出范围。 IOW,该对象不能离开您新建
它的方法,否则 CA 会忽略它。这让我相信 CA 根本没有深入研究方法调用来进行分析。除了试图消除误报之外,它还可能是通过取消一些昂贵的检查来加快 CA 流程的整体尝试的一部分,我认为这发生在 2010 年到 2012 年之间?
如果我在您的示例中添加一点,您可以看到明显的模式,其中哪些收到警告:
class Program
{
public static void Main()
{
new Disposable(); // CA2000
IDisposable x;
MakeDisposable(out x);
Test();
}
public static Disposable Test()
{
IDisposable z;
var x = MakeDisposable(out z);
var y = new Disposable(); // CA2000
return x;
}
private static Disposable MakeDisposable(out IDisposable result)
{
result = new Disposable();
new Disposable(); // CA2000
return new Disposable();
}
}
关于c# - 为什么 FxCop 不为这种未处置类实例的微不足道的情况报告 CA2000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594148/
我正在尝试在 Java 中执行此操作,但我认为这是一个一般证书问题。我有一个根CA,一个由根CA颁发的中间CA1,一个由中间CA1颁发的中间CA2,以及一个由中间CA2颁发的证书。 rootCA ->
编辑 1:https://security.stackexchange.com/questions/83972/trust-ca-and-parent-ca-but-not-other-derivat
我正在使用“任何?” block 中的方法。该片段正在字符串中查找字符串“CA”(拆分)检查: region="CA" check="AU,US,UK,CA,ZA" if check.split(',
我有一个SpringBoot应用程序,它使用以下配置与PostgreSQL通信,通过AWS Beanstrik部署:。在我将AWS Aurora证书更新为rds-ca-ecc384-g1之前,一切都很
我们正在使用我们现有的 CA 进行 freeipa 安装。在安装过程中,会生成 CSR,并且必须由 CA 签名才能创建证书。这个证书必须有 X509v3 Basic Constraints: CA:T
我正在尝试导出客户端证书以供网络浏览器使用。 目标是使用 指令限制对管理区域的访问。我看过很多关于使用自签名 CA 的教程。你会如何使用第三方来做到这一点? 1) 如果它是受信任的根 CA,我是否需要
我已经设法弄清楚 x509Certificate2Collection 中的证书是否是证书颁发机构证书,但我如何才能安全地确定它是根证书还是中间证书?以下是否足够安全? var collection
我使用 fabric-ca-sdk(fabric-sdk-java/fabric-sdk-java/src/test/fixture/sdkintegration) 中的测试代码启动 ca 服务器。并
环境: Red Hat Enterprise Linux Server release 7.7 (Maipo) # openssl version OpenSSL 1.0.2g 1 Mar 2016
导出 K8s 集群 CA 证书和 CA 私钥 团队,我有一个 Kubernetes 集群正在运行。我将一次又一次地删除和创建它,所以我想一直重复使用相同的 CA 证书,我需要保存 CA 证书和 key
我正在编写一个自定义客户端和服务器,我想通过公共(public) Internet 安全地进行通信,因此我想使用 OpenSSL 并让两端进行对等验证以确保我的客户端不会被 MITM 误导,同样,未经
问题: 我想构建一个 docker 容器 FROM:ubuntu:20.04但我无法访问外部互联网 我在内部网络上有一个 apt 镜像,可以使用 apt 镜像位于 https 后面,带有自定义证书 我
Linux 的新手,正在尝试了解更多,我遇到了这种情况。 我已经尝试使用 ps 命令并使用 grep 来捕获“ca”,但它会返回每次出现的“ca”,无论它来自什么,它实际上对我没有帮助。 我已经尝试过
我正在尝试在我的 .NET 应用程序和我安装了第三方根 CA 证书和中间 CA 证书的网站之间建立 TLS 连接: ServicePointManager.SecurityProtocol = Sec
SSL 证书永远不会让我眼花缭乱。我有一个网络应用程序,它从合作伙伴那里对另一项服务进行休息调用以获取某些数据。他们使用为公司生成的自签名或内部 CA。问题是每当另一端更新 SSL 证书时,我的应用程
我正在开发一个带有证书固定的移动应用程序。我将在 DMZ 中有一个盒子来代理我的请求。该服务器是否应该拥有来自可信 CA 的证书,还是我可以使用我自己的 CA 生成的证书? 从移动客户端使用受信任的
有没有人设法将 CA 证书安装到 activemq 实例中?我一直在进行谷歌搜索并阅读 activemq 文档,但我没有找到任何关于如何在 activemq 中使用预先存在的 CA 证书的信息。 我假
openssl ca 和 openssl x509 命令有什么区别?我正在使用它来创建和签署我的 root-ca、intermed-ca 和客户端证书,但是 openssl ca 命令不会在证书上注册
在 keystore 中创建私钥和自签名证书 keytool -genkey -alias mydomain -keystore mydomain.ks -dname cn=mydomain.com
我的 Raspberry Pi 3 出了点问题。我不得不运行 fsck.ext3,但是很多包都损坏了,例如 python 等。现在,ca-certificates 不会重新安装。每当它运行 updat
我是一名优秀的程序员,十分优秀!