我这里有一个不与本机 C++ 混合的 C++/CLI 解决方案(尽管我们也有这种类型)。它由三个项目组成,其中两个与我的问题相关。
第一个是静态库 (.lib),处理 Acitve Diretytory 事务。
第二个是依赖于其他项目的可执行主项目(.exe)。
我是 Visual Studio 2012 的新手,想利用代码分析等工具的优势。对解决方案运行代码分析会发现几个 CA2122 警告:
CA2122 不要间接暴露具有链接需求的方法
我了解与此警告相关的安全问题,并且我想我了解如何处理它,尽管我对这个安全问题也很陌生。当检查整个解决方案时,此警告与 Active Directory 代码有关,而仅检查 lib-project 它们不会出现并且一切似乎都正常。
现在到问题的核心:
SecuritySafeCritical
我试图用属性标记我被警告的所有方法
->没有变化,相同的警告- 我在另一个项目中通过将整个程序集标记为
SecurityCritical
并将其添加SecuritySafeCritical
到有问题的方法中解决了这个警告。这将不起作用,因为添加一个AssemblyInfo.cpp
将程序集标记为SecurityCritical
不会影响此问题。(我知道 *.cpp 在托管静态库中似乎已过时,因为代码似乎必须在头文件中完成,从而使此类项目过时......但我们不希望每个小文件都有 .dll部分,我们还希望将这些东西封装在自己的项目中,而不是有一些松散的头文件或将其与其他区域混合) - 之后我尝试将主项目的整个程序集标记为,
SecurityTransparent
因为到目前为止我理解这个SecuritySafeCritical
标记的代码可以由SecurityTransparent
或SecurityCritical
代码调用(对我来说每种安全性都是什么)。--> 我作为SecuritySafeCritical
标记的方法现在被标记为 CA2141 警告,并且许多其他方法会产生新的警告(其中大多数与异常处理有关):CA2141:透明方法不得满足 LinkDemands
CA2140:透明代码不得引用安全关键项 - 所以我决定也尝试标记这个程序集
SecurityCritical
。
--> 我的SecuritySafeCritical
方法最终没有产生警告,但仍然有来自具有异常处理的方法的所有这些其他警告。
我搜索了一个解决方案,但在这种情况下没有找到任何帮助。此外,有关此主题的信息很少见,已过时(因为与 .Net Framework 2.0 相关,而整个安全性似乎随着 .Net Framework 4.0 发生了巨大变化)或对我来说难以理解。所以我希望有人知道我可以尝试什么或应该做什么。