5

我很想通过我拥有的不同的混淆选项,为了做到这一点,我首先尝试了 Crypto。

这是我遵循的步骤:

  1. 打开 Cypto 向导并选择一些选项。
  2. 选择我的解决方案文件。

完成了向导,我看到的是有一些 Dll 被很好地混淆了,但是我的项目现在没有构建。我注意到的两件事是,我的文件夹中有一个奇怪的 .OBPROJ 文件,它负责删除我所有的旧程序集,然后再对它们进行混淆。

我的 18 个项目中有 4 个未能构建,我看到以下错误:

System.IO.FileNotFoundException: File 'C:\Dropbox\CPTFramework_old\CommonLib\obj\Debug\CommonLib.dll' not found.

所有 4 个失败的项目都非常相似。现在,我不确定它对 OBj/Debug 文件夹中的 dll 文件做了什么,但文件绝对不存在。

我注意到的另一件事是,所有项目在单独构建时都可以正常构建。所以我的解决方案文件肯定有问题。但我无法找出到底发生了什么变化。

4

4 回答 4

4

有类似的问题。经过一番挣扎,找到了解决办法。

在多核处理器中,VS 将并行运行构建,这使得 Cyrpto 混淆器在最后一个项目构建完成之前运行。

在 VS 2013 中将最大并行项目构建数设为 1将解决此问题。

工具 - 选项.. - 构建和运行

在此处输入图像描述

于 2015-12-10T10:57:13.597 回答
3

我最近遇到了同样的问题,所以虽然已经过时,但这是其他人的答案。

它与您的构建顺序有关。我发现 VS 中的构建顺序并不总是与实际的构建顺序相对应。我建议在构建失败后查看输出窗口,查看首先构建和最后构建的项目(您需要这些项目来配置 Crypto)。显然,不要忘记忽略任何设置项目或未在发布模式下构建的项目。

所需要做的就是使用正确的第一个和最后一个项目重新配置加密,重新加载您的解决方案,它就会构建。

于 2013-10-15T09:34:52.857 回答
2

基本上,错误发生在

1:您曾经指定一个项目是第一个或最后一个,而在您的解决方案中,这不是或不再是这种情况。2:你也有像 Newtonsoft.Json 这样的依赖

案例 1: 我在添加对“如先前启动指定的”项目的依赖项时碰巧遇到了同样的问题。我再次运行向导,然后将 2 个项目标记为第一个...

还会发生的情况是,您在多个项目中使用相同的共享 dll,其中一个是第一个,另一个是第一个,然后您开始必须根据编译的内容手动更新项目。

理想情况下,不需要设置第一个或最后一个,因为构建顺序已经在解决方案中,但我不在 LogicNP 工作......

要解决此问题,请查看文件在 VS 输出中的抱怨,因为它可能具有错误的“第一个”标志。

然后右键单击该项目并从弹出窗口中选择“卸载项目”。现在再次右键单击卸载的项目并选择 Edit ;或在文本编辑器中打开 .csproj 文件。

滚动到文件底部并查找如下所示的文本... False False Release|AnyCPU ..\CATS.Settings_Release_AnyCPU.obproj

查看 CO_FirstProject 和 CO_LastProject 标签并确保它们具有正确的 True 和 False 选项,因为“向导”不会更新当前配置。

还要注意的是,它还创建了一个全新的加密文件,所有旧设置都消失了....

案例 2: 您依赖于 Newtonsoft.Json.dll 之类的东西,您所做的是 1. 将该 dll 复制到与构建无关的安全位置。2. 通过 a. 将输出设置选项卡中的 dll 链接到正确的主程序集。从“以下主程序集中的嵌入式依赖程序集”列表中选择它 b。现在单击 Additional dependencies/files 并添加文件 现在你应该有这样的东西 如果发现更多我无法编译的情况,我将更新帖子,或者联系我,因为找到这样的错误可能会非常令人沮丧......

于 2017-11-25T09:11:35.800 回答
0

我只是遇到了同样的问题,这是我基于 Crypto 帮助文档的答案,它通过抑制其 MSBuild 集成完全消除了您对 Crypto 的解决方案的依赖。

  • 编辑运行加密向导时选择的第一个和最后一个项目的 csproj/vbproj 文件:删除 项目文件末尾的<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '....'"> 和 (包括)之间的所有内容。<Import Project="..." />

因此,就我而言,我在第一个项目中删除了:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_FirstProject>True</CO_FirstProject>
    <CO_LastProject>False</CO_LastProject>
    <CO_Config>Release|AnyCPU</CO_Config>
    <CO_ProjectFilePath>..\.."ALL MY DLL/EXE HERE"
  </PropertyGroup>
  <Import Project="C:\Program Files (x86)\LogicNP Software\Crypto Obfuscator For .Net 2015\CryptoObfuscator.targets" />
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '....' "> 

在我的最后:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_FirstProject>False</CO_FirstProject>
    <CO_LastProject>True</CO_LastProject>
    <CO_Config>Release|AnyCPU</CO_Config>
    <CO_ProjectFilePath>..\MySln_Release_AnyCPU.obproj</CO_ProjectFilePath>
  </PropertyGroup>
  <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <CO_ObjFiles Include="ALL MY DLL/EXE HERE">
      <InProject>false</InProject>
    </CO_ObjFiles>
    <CO_BinFiles Include="..ALL MY DLL/EXE HERE">
      <InProject>false</InProject>
    </CO_BinFiles>
  </ItemGroup>
  <Import Project="C:\Program Files (x86)\LogicNP Software\Crypto Obfuscator For .Net 2015\CryptoObfuscator.targets" />

构建并瞧!

于 2017-07-21T00:57:57.130 回答