阅读this post并遇到同样的问题(尝试构建清单时):
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.
我想知道任何人是否已成功使用带有ClickOnce部署的.NET Reactor(加密/混淆工具)。我整个上午都在尝试使用不同的技术进行网络搜索,有些技术可以使用Dotfuscator和Xenocode,所以我读了,但我无法从.NET Reactor那里得到任何爱。
我真的认为收到此邮件是因为ClickOnce正在尝试针对加密文件生成清单(其中甚至无法在.NET Reflector中打开)...
我有什么选择?
答案 0 :(得分:4)
我们遇到了与ClickOnce和.NET Reactor相同的问题。我们拒绝混淆。
是的,你是对的。 ClickOnce需要从文件中提取程序集版本,其依赖项,制造商等。在完成模糊处理后,ClickOnce正在尝试加载不再是程序集的程序集。它现在是一个常规的二进制.exe文件。
有一个糟糕的解决方法对我来说很好,但项目管理层拒绝了这个想法。
构建并混淆所有二进制文件。在AfterBuild事件的基础上将它们打包到zip(或其他)文件中。将您的zip标记为“数据文件”(项目设置 - >发布 - >应用程序文件... - >发布状态 - >数据文件)。之后创建单个未混淆的可执行(.exe)程序集。这只是解压缩并运行一个混淆的可执行文件。设置ClickOnce发布该新可执行文件的部署。
编辑:请问我是否不够清楚。答案 1 :(得分:0)
如果发生清单部署问题,则需要禁用默认情况下启用的“注入无效的元数据”选项。命令行参数如下:
-invalid_metadata 0
您也可以通过以下方式禁用“反ILDASM”(因为“注入无效的元数据”是一个子选项)
-suppressildasm 0
当然,如果您定义了.NET Reactor项目文件,则无需使用命令行参数。
为保护ClickOnce项目,建议通过以下方式使用.NET Reactor Visual Studio加载项:
通过这种方式,Visual Studio项目文件被修改为在正确的时间访问.NET Reactor的方式(在编译程序集之后但仍在将其添加到ClickOnce程序包之前)。