2

阅读这篇文章并遇到同样的问题后(​​尝试构建清单时):

MSB3171: Problem generating manifest. Could not load file or assembly or one of its dependencies. An attempt was made to load a program with an incorrect format.

我想知道是否有人成功使用 .NET Reactor(加密/混淆工具)和 ClickOnce 部署。我整个早上都在网上搜寻不同的技术,有些技术适用于 Dotfuscator 和 Xenocode,所以我阅读了,但我无法从 .NET Reactor 获得任何爱。

我真的认为收到此消息是因为 ClickOnce 正在尝试针对加密文件生成清单(其中甚至无法在 .NET Reflector 中打开)...

我在这里有什么选择?

4

2 回答 2

4

我们在使用 ClickOnce 和 .NET Reactor 时遇到了同样的问题。我们拒绝混淆。

是的,你是对的。ClickOnce 需要从文件中提取程序集版本、它的依赖项、制造商等。ClickOnce 正在尝试加载一个在混淆完成后不再是该程序集的程序集。它现在是一个常规的二进制 .exe 文件。

有一个糟糕的解决方法对我来说效果很好,但项目管理拒绝了这个想法。

构建并混淆所有二进制文件。在 AfterBuild 事件的基础上将它们打包到一个 zip(或其他)文件中。将您的 zip 标记为“数据文件”(项目设置 -> 发布 -> 应用程序文件... -> 发布状态 -> 数据文件)。之后创建单个未混淆的可执行 (.exe) 程序集。它只是解压缩并运行您的混淆可执行文件之一。为该新可执行文件设置 ClickOnce 发布部署。

编辑:请问我是否不够清楚。

于 2009-12-30T12:13:47.940 回答
1

如果出现清单部署问题,您需要禁用默认启用的“注入无效元数据”选项。命令行参数如下:

-invalid_metadata 0

或者,您可以通过以下方式禁用“Anti ILDASM”(因为“Inject Invalid Metadata”是一个子选项):

-抑制 0

当然,如果您定义了 .NET Reactor 项目文件,则无需使用命令行参数。

为了保护 ClickOnce 项目,建议通过以下方式使用 .NET Reactor Visual Studio 插件:

  • 打开 .NET Reactor 并安装 Visual Studio 插件(.NET Reactor 主菜单项帮助 -> 安装 Visual Studio 20xx 插件)。
  • 打开您的 Visual Studio 项目并打开加载项(Visual Studio 主菜单项工具 -> .NET Reactor)。
  • 勾选“启用”
  • 选中“项目输出是部署项目的一部分(设置、ClickOnce)”
  • 您可以通过定义 .NET Reactor 项目文件或通过命令行开关来定义保护设置
  • 添加“-invalid_metadata 0”作为命令行参数
  • 单击确定并允许 .NET Reactor 修改您的 Visual Studio 项目文件

在此处输入图像描述

通过这种方式,Visual Studio 项目文件被修改为在正确的时间访问 .NET Reactor(在您的程序集被编译之后但仍然在它被添加到 ClickOnce 包之前)。

于 2020-11-12T14:28:20.877 回答