SGEN、InternalsVisibleTo 和程序集签名

2023-11-29

我正在尝试做一些不寻常的事情......

我有这个类 Foo :

public class Foo
{
    public Foo(string name)
    {
        this.Name = name;
    }

    internal Foo()
    {
    }

    public string Name { get; internal set; }
    public int Age { get; set; }
}

请注意 Name 的内部 setter 和内部默认构造函数。这通常会阻止 XML 序列化,但我还使用 InternalsVisibleTo 将 XML 序列化程序集标记为“朋友”:

[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers")]

我添加了一个 MSBuild 任务来预生成序列化程序集:

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
  <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
    <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
  </SGen>
</Target>

这工作正常:Name 属性已正确序列化和反序列化。

现在,我想签署我的程序集...所以我为我的程序集定义一个密钥文件,并修改 InternalsVisibleTo 声明以匹配该密钥:

[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers, PublicKey=c5cd51bf2cc4ed49")]

但现在 SGEN 失败了:

无法生成临时类(结果=1)。
无法分配属性或索引器“TestXML2008.Foo.Name”——它是只读的

SGEN 任务应该通过宏选择密钥文件,但显然这还不够......我还尝试在 SGEN 任务中显式指定密钥文件,但没有成功。当我在命令行上使用 sgen.exe 时,我得到了相同的结果......

我错过了什么吗?我不明白为什么当我签署程序集时它不起作用......


在InternalsVisibleTo 属性中,您需要指定完整的公钥,而不仅仅是公钥令牌。

See 这个类似问题的答案 and 这篇 MSDN 文章有关如何获取公钥的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SGEN、InternalsVisibleTo 和程序集签名 的相关文章

  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如果 async-await 不创建任何额外的线程,那么它如何使应用程序响应?

    一次又一次 我看到它说使用async await不创建任何额外的线程 这是没有意义的 因为计算机看起来一次做不止一件事的唯一方式是 实际上一次做不止一件事 并行执行 利用多个处理器 通过调度任务并在它们之间切换来模拟它 做一点A 一点B 一
  • 如何将 Razor 视图转换为字符串?

    我想使用我的 Razor 视图作为某种发送电子邮件的模板 所以我想将我的模板 保存 在视图中 将其作为字符串读入控制器 进行一些必要的替换 然后发送它 我有有效的解决方案 我的模板作为 HTML 页面托管在某处 但我想将其放入我的应用程序中
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • WPF 如何从 DataTemplate 访问控件

    我有一个包含网格的数据模板 网格内有一个组合框
  • 如何在VS2017中从.net项目引用netstandard项目?

    我有一个 netstandard2 0 项目 用于与第三方 Web 服务交互 我需要在同一解决方案中引用旧的 net 4 6 2 项目中的该项目 但是当我这样做时 我会收到一堆关于需要引用我定义的类型的错误 例如 我将调用 netstand
  • 如何判断应用程序是否是Web应用程序

    在 Windows 服务和 Web 应用程序中运行的核心程序集中 我需要存储每个用户会话的信息 该服务将具有单个用户会话 并且 Web 应用程序使用 HttpContext Current 我想配置在核心程序集中使用哪种方法 约定优于配置
  • 合并两个(或更多)PDF

    背景 我需要为我的销售人员提供每周报告包 该包包含几个 5 10 个水晶报告 Problem 我想允许用户运行所有报告并且只运行单个报告 我想我可以通过创建报告然后执行以下操作来做到这一点 List
  • 如何使用 PowerShell 中的凭据从本地复制到远程位置?

    我是 PowerShell 的新手 我有用户名和密码来访问远程位置的共享文件夹 I need 复制文件foo txt从当前位置到 Bar foo myCOmpany com logs在为以下内容编写的 PS1 脚本中Powershell v
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • WPF 还是 WinForms 作为内部工具?

    在我的公司 我们开发了许多内部工具 从简单的实用程序到成熟的编辑器 这些工具的首要任务是稳定性 可用性和周转时间 意味着添加新功能的速度 到目前为止 我们一直在使用 WinForms 但有几个新工具正在酝酿中 我正在权衡是否应该继续使用 W
  • 如何对私有方法进行单元测试?

    我正在构建一个类库 它将有一些公共和私有方法 我希望能够对私有方法进行单元测试 主要是在开发时 但它也可能对未来的重构有用 这样做的正确方法是什么 如果您想对私有方法进行单元测试 则可能会出现问题 单元测试 一般来说 旨在测试类的接口 即其
  • 将对象列表添加到 ef 中的上下文

    是否可以在不使用 foreach addObject 的情况下将对象列表添加到实体框架中的 Context 感谢帮助 从 EntityFramework 6 开始 您可以使用DbSet AddRange 方法 IEnumerable htt
  • PhotoChooserTask 抛出未处理的异常

    我已经有了这段代码 我使用它来显示一个按钮 该按钮允许用户从他的库中选择图像并将其用作我的应用程序的背景 所以我创建了一个PhotoChooserTask 将其设置为显示相机并将其绑定到任务完成时必须执行的方法 该按钮将通过显示PhotoC
  • 我是唯一一个收到“当前目标框架中不可用的程序集”的人吗?

    在添加测试项目后 我在使用 Visual Studio 2010 和任何报告此错误的框架版本时遇到了一个持续存在的问题 当前目标框架中不提供程序集 到目前为止 我只在两个程序集上发生过这种情况 并且始终一致 系统服务流程 系统 配置 安装
  • 在 Windows CE 6.0 与 Windows Mobile 6.1 下进行开发的权衡是什么

    我有一个 Windows NET 应用程序 我计划将其 移植 并定制为移动设备 该应用程序由一个独立的 NET 程序组成 该程序与条形码扫描仪配合使用 具有简单的 UI 并将扫描结果记录到文件中 还有一个 Windows 服务 可以使用 W
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适

随机推荐

  • 从 SqlDataReader 转换为 JSON

    public string toJSON SqlDataReader o StringBuilder s new StringBuilder s Append if o HasRows while o Read s Append Id o
  • PHP CURL 和 SSL 证书(或证书链)

    再会 我有 REST API 可以通过 SSL https 访问 我想将正确的证书 或证书链 与我编写的 PHP 和 CURL 脚本一起发出请求 以下是我的目标的证书方式 http api vkontakte ru 在 Firefox 中看
  • [Shiny]:在另一个tabPanel中添加到另一个tabPanel的链接

    我试图在我的 主页 选项卡面板上放置一个链接到我的应用程序的所有其他选项卡面板 想法如下 ui navbarPage tabPanel home fluidPage fluidRow box this 1st box should lead
  • 将 Oracle SQL Select 转换为 PostgreSQL select

    我有这样的SQL语句 SELECT ABX ABX APO NUMBER COUNT A1 PROCESS MODE AS NUM PLANNING COUNT A2 PROCESS MODE AS NUM SETUP COUNT A3 P
  • cmake 链接错误

    我试图理解为什么在编译使用 CMake 生成的项目时出现链接错误 CMakeFiles txt 为项目的每个文件夹构建一个静态库 然后通过以下方式将所有它们链接在一起 root CMakeLists txt add subdirectory
  • 如何在 ASP.NET MVC 中读取 PPT 文件?

    我的桌面上有一个名为 slide ppt 的 PPT 文件 我想在我的文件夹中阅读该 PPT 文件的所有幻灯片ReadSlide功能如下 public void ReadSlide 如何使用 C 代码读取 PPT 文件中的所有幻灯片 使用如
  • 如何以编程方式在 MoinMoin 中创建新页面?

    我想编写一个 python 脚本来调用一些外部 REST 服务 然后根据我拉回的数据创建 MoinMoin 页面 我在 wiki 农场配置中的 CentOS 5 3 和 MoinMoin 1 9 3 上使用 Python 2 4 3 请注意
  • 如何通过 TextBlock 文本值设置 TextBlock 的 Foreground 属性?

    可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗 例如 文本值为Mike 前景属性为Black 值为Tim 属性值为green等 我用google搜索 但没有找到任何解决方案 如果您希望灵活地做一些聪明的事情 例如
  • 为什么 Rails UJS ajax:success bind 被调用两次?

    我有一个简单的表格 form for posts path id gt new post remote gt true do text field tag post input submit tag Post 我已将回调绑定到ajax su
  • rundll32 url.dll,FileProtocolHandler

    我在用着rundll32 url dll FileProtocolHandler my file dotx在 Windows 下打开文件 它适用于 docx 文档 但当我尝试使用 dotx 文档 模板文档 时 它会根据模板创建一个新的 do
  • 如何使用react-google-maps包通过放大反应来聚焦于标记位置

    如何通过缩放对焦到标记位置 一旦标记位置更改为不同位置 我需要手动放大和缩小并转到市场位置 从字面上看 我需要手动滚动并放大到标记的位置 这很困难 我在用https github com tomchentw react google map
  • 查找数组中的最大值

    将一千 1000 个元素输入到数组中 无内存限制 众所周知 在输入元素时 每当我们输入一个值时 我们都可以通过检查来更新输入值的最大值 但想象一下 如果最大值的位置在 900 左右 如果我从位置 800 到 1000 删除 200 个元素
  • 在什么情况下需要关闭 HTTP 连接?

    在什么情况下需要关闭 HTTP 连接 HTTP 不是一种具有 连接 的协议类型 它是一种具有 连接 的协议 这就是他们所说的 无状态 这意味着每个请求都与其他请求分开 这就是为什么我们有会话 cookie 之类的东西 人们必须设法允许信息在
  • Android 翻转图像动画

    我想通过翻译动画在android中翻转图像 例如 假设我有一张卡 当翻译动画开始时 它会将卡片显示到新位置 现在这里的卡应该翻转吗 从背面到正面 我怎样才能做到这一点 APIdemos 中的示例名称是 旋转3d动画 java 也只需检查下面
  • 宏的逆柯里化?

    假设我们有一个 define FOO x y something 我想构建这样的宏 define BAR that BAR x y 会打电话FOO x y 如果可能的话 我该怎么做 我尝试了以下操作 define BAR x FOO x B
  • Highcharts 删除 x 轴上的空间

    我正在尝试使用 Highcharts 库构建面积图 突然我发现在我的实际数据开始之前 x 轴上有一些间距 我想用适当的数据从 0 0 轴开始绘制图表
  • BeancreationException+NosuchBeandefinition异常

    我正在使用 Spring Boot 开发 Spring 4 应用程序 在 com test tm 包中 应用类 SpringBootApplication EnableJpaRepositories repositoryFactoryBea
  • flash AS3 如何删除舞台事件侦听器

    我正在 flash 和 as3 中构建动画 我有一个添加舞台的功能 eventListener stage addEventListener Event ENTER FRAME setScrollPercent false 0 true 由
  • Swift Array contains 函数使构建时间变长

    我不确定这是否属于 Stack Overflow 如果不属于 请告诉我 我有这段代码将联系人添加到数组中 如果数组中已存在具有该电话 姓名组合的联系人 则不会再次添加它 意味着没有重复项 它按预期工作 但它大大增加了构建时间 我正在寻找更好
  • SGEN、InternalsVisibleTo 和程序集签名

    我正在尝试做一些不寻常的事情 我有这个类 Foo public class Foo public Foo string name this Name name internal Foo public string Name get inte