2

我这里有一个不与本机 C++ 混合的 C++/CLI 解决方案(尽管我们也有这种类型)。它由三个项目组成,其中两个与我的问题相关。

第一个是静态库 (.lib),处理 Acitve Diretytory 事务。
第二个是依赖于其他项目的可执行主项目(.exe)。

我是 Visual Studio 2012 的新手,想利用代码分析等工具的优势。对解决方案运行代码分析会发现几个 CA2122 警告:

CA2122 不要间接暴露具有链接需求的方法

我了解与此警告相关的安全问题,并且我想我了解如何处理它,尽管我对这个安全问题也很陌生。当检查整个解决方案时,此警告与 Active Directory 代码有关,而仅检查 lib-project 它们不会出现并且一切似乎都正常。

现在到问题的核心:

  1. SecuritySafeCritical我试图用属性标记我被警告的所有方法
    ->没有变化,相同的警告
  2. 我在另一个项目中通过将整个程序集标记为SecurityCritical并将其添加SecuritySafeCritical到有问题的方法中解决了这个警告。这将不起作用,因为添加一个AssemblyInfo.cpp将程序集标记为SecurityCritical不会影响此问题。(我知道 *.cpp 在托管静态库中似乎已过时,因为代码似乎必须在头文件中完成,从而使此类项目过时......但我们不希望每个小文件都有 .dll部分,我们还希望将这些东西封装在自己的项目中,而不是有一些松散的头文件或将其与其他区域混合)
  3. 之后我尝试将主项目的整个程序集标记为,SecurityTransparent因为到目前为止我理解这个SecuritySafeCritical标记的代码可以由SecurityTransparentSecurityCritical代码调用(对我来说每种安全性都是什么)。--> 我作为SecuritySafeCritical标记的方法现在被标记为 CA2141 警告,并且许多其他方法会产生新的警告(其中大多数与异常处理有关):

    CA2141:透明方法不得满足 LinkDemands
    CA2140:透明代码不得引用安全关键项

  4. 所以我决定也尝试标记这个程序集SecurityCritical
    --> 我的SecuritySafeCritical方法最终没有产生警告,但仍然有来自具有异常处理的方法的所有这些其他警告。
所以我不知道如何解决这个问题。我认为拥有一个托管静态库是问题所在,当只有一个 dll 项目时,也许我可以像 2. 中提到的那样解决这个问题,但我想避免与我们的程序共享另一个 *.dll 项目。
我搜索了一个解决方案,但在这种情况下没有找到任何帮助。此外,有关此主题的信息很少见,已过时(因为与 .Net Framework 2.0 相关,而整个安全性似乎随着 .Net Framework 4.0 发生了巨大变化)或对我来说难以理解。所以我希望有人知道我可以尝试什么或应该做什么。

4

0 回答 0