gpt4 book ai didi

.net - 如何在依赖于可移植类库的库上成功运行 secannotate.exe?

转载 作者:行者123 更新时间:2023-12-04 20:15:56 26 4
gpt4 key购买 nike

我正在处理 the Autofac project试图将我们所有的常见逻辑转换为 Portable Class Libraries并为特定功能添加特定于平台的库。

我的开发机器是 Windows 8 Enterprise(64 位),我安装了 VS 2012 Ultimate 和所有的装饰。我没有安装任何以前的 .NET 框架、任何其他工具或任何额外的 PCL 特定工具。 这是一个干净的新虚拟机,只有基本的东西。 在此配置中,所有构建和测试都运行良好。

当我尝试运行 secannotate.exe在依赖于可移植类库之一的 .NET 4.5(完整配置文件)库上,我收到一条错误消息,表明我需要 mscorlib 2.0.5.0 .

这是一个示例错误。 PCL 是 Autofac.dll; .NET 4.5 完整的配置文件库是 Autofac.Configuration.dll。

Error running annotator: Could not find referenced assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'. Ensure that the reference paths and assemblies are setup correctly.
Microsoft (R) .NET Framework Security Transparency Annotator 4.0.30319.17929
Copyright (C) Microsoft Corporation. All rights reserved.

Loaded assembly 'Autofac.Configuration' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.Configuration.dll'.
Resolving assembly 'Assembly(Name=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
Loaded assembly 'mscorlib' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Loaded referenced assembly from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Using core assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Assembly 'Autofac.Configuration' is using transparency model 'Level 2'.
Assembly 'mscorlib' is using transparency model 'Level 2'.
Loaded assembly 'Autofac' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.dll'.
Resolving assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'.
at Microsoft.Security.Tools.CciHostEnvironment.ResolvingAssemblyReference(IUnit referringUnit, AssemblyIdentity referencedAssembly)
at Microsoft.Security.Tools.CciHostEnvironment.LoadCoreAssembly()
at Microsoft.Security.Tools.CciHostEnvironment..ctor(ISecAnnotateHost host, String rootAssemblyPath)
at Microsoft.Security.Tools.SecAnnotate.LoadInputAssemblies()
at Microsoft.Security.Tools.SecAnnotate.AnnotateAssemblies()
at Microsoft.Security.Tools.SecAnnotate.Main(String[] args)

Autofac 可移植类库的目标是:
  • .NET 4.0
  • 银光 5
  • 适用于 Windows 应用商店应用程序的 .NET

  • 您可以通过创建针对这些事物的新/空 PCL 并构建它来复制问题。您会看到它引用了 mscorlib 2.0.5.0。

    一些搜索让我相信这是对旧 Silverlight 程序集版本的引用,但 PCL 项目没有特定的版本引用,所以我只能想象这是由 VS 2012 PCL 工具提供的。其他人似乎通过安装在 VS 2012 之前发布的 .NET 框架更新解决了类似的问题。 我实际上在我的机器上的任何地方都找不到 mscorlib 2.0.5.0。

    在 dotPeek 中查看我构建的 Autofac.dll 程序集,我看到它引用:
  • mscorlib 2.0.5.0
  • 系统 2.0.5.0
  • System.ComponentModel.Composition 2.0.5.0
  • System.Core 2.0.5.0

  • 而且,它只是一个 PCL 项目,没有直接引用任何东西。从字面上看-有 没有一条引用线在 .csproj 文件中。

    如何解决这个 secannotate 问题? 我需要安装什么额外的东西吗?是否有我应该添加到 secannotate 命令行的参数?

    最佳答案

    您需要传递/d 开关,指向可移植库引用程序集,例如:

    secannotate /v "Autofac.Configuration.dll" /d:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0"

    请注意,您将收到有关混合桌面和 CoreCLR mscorlib 的警告,这可以忽略,因为虽然“可移植”看起来像 CoreCLR (Silverlight) 进行 secannotate,但它不是在 .NET Framework 的上下文中运行时。

    关于.net - 如何在依赖于可移植类库的库上成功运行 secannotate.exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360534/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com