抢占式Dotfuscator不适用于Xamarin

抢占式Dotfuscator不适用于Xamarin,xamarin,obfuscation,dotfuscator,Xamarin,Obfuscation,Dotfuscator,我正在使用抢占式模糊处理程序(Dotfuscator)对Xamarin应用程序进行模糊处理。 我的问题是混淆器不会混淆我的项目DLL。当我在混淆后打开dll时,仍然可以看到可读的信息。当我单击build/rebuild按钮时,模糊处理工具会自动打开-这证明我正确链接/配置了它 有什么问题吗?请参见下面的屏幕截图: 我的项目文件代码: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" Def

我正在使用抢占式模糊处理程序(Dotfuscator)对Xamarin应用程序进行模糊处理。 我的问题是混淆器不会混淆我的项目DLL。当我在混淆后打开dll时,仍然可以看到可读的信息。当我单击build/rebuild按钮时,模糊处理工具会自动打开-这证明我正确链接/配置了它

有什么问题吗?请参见下面的屏幕截图:

我的项目文件代码:

  <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   <DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
    <DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
    <DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile> 

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{88F1AA1B-4608-40F7-B14D-C7E28099A26E}</ProjectGuid>
    <ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>TestDotObfuscator</RootNamespace>
    <AssemblyName>TestDotObfuscator</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <AndroidApplication>True</AndroidApplication>
    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v6.0</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>True</DebugSymbols>
    <DebugType>Full</DebugType>
    <Optimize>False</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
    <AndroidLinkMode>None</AndroidLinkMode>
    <EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
    <AotAssemblies>false</AotAssemblies>
    <EnableLLVM>false</EnableLLVM>
    <BundleAssemblies>false</BundleAssemblies>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled> 
    <DebugSymbols>True</DebugSymbols>
    <DebugType>PdbOnly</DebugType>
    <Optimize>True</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <AndroidManagedSymbols>true</AndroidManagedSymbols>
    <AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
    <AndroidLinkMode>SdkOnly</AndroidLinkMode>
    <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
    <AotAssemblies>false</AotAssemblies>
    <EnableLLVM>false</EnableLLVM>
    <BundleAssemblies>false</BundleAssemblies>
    <AndroidCreatePackagePerAbi>true</AndroidCreatePackagePerAbi>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="Mono.Android" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="DB.cs" />
    <Compile Include="MainActivity.cs" />
    <Compile Include="Resources\Resource.Designer.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="GettingStarted.Xamarin" />
    <None Include="Resources\AboutResources.txt" />
    <None Include="Properties\AndroidManifest.xml" />
    <None Include="Assets\AboutAssets.txt" />
  </ItemGroup>
  <ItemGroup>
    <AndroidResource Include="Resources\layout\Main.axml">
      <SubType>Designer</SubType>
    </AndroidResource>
    <AndroidResource Include="Resources\values\Strings.xml" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Resources\drawable\" />
    <Folder Include="Resources\mipmap-hdpi\" />
    <Folder Include="Resources\mipmap-mdpi\" />
    <Folder Include="Resources\mipmap-xhdpi\" />
    <Folder Include="Resources\mipmap-xxhdpi\" />
    <Folder Include="Resources\mipmap-xxxhdpi\" />
  </ItemGroup>
  <ItemGroup>
    <None Include="DotfuscatorConfig.xml" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
        <Target Name="BeforeBuild">
        </Target>
        <Target Name="AfterBuild">
        </Target>
    -->
  <Import Project="..\..\PreEmptive.Dotfuscator.Xamarin.targets" />
</Project>

C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe
DotfuscatorConfig.xml
真的
调试
任意CPU
8.0.30703
2
{88F1AA1B-4608-40F7-B14D-C7E28099A26E}
{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
图书馆
性质
测试点模糊器
测试点模糊器
512
真的
Resources\Resource.Designer.cs
资源
关
真的
v6.0
属性\AndroidManifest.xml
资源
资产
真的
满满的
假的
bin\Debug\
调试;痕迹
促使
4.
真的
没有一个
假的
假的
假的
假的
真的
真的
PdbOnly
真的
bin\Release\
痕迹
促使
4.
真的
假的
斯德科尼
真的
假的
假的
假的
真的
设计师

听起来您可能将集成配置为使用GUI可执行文件,而不是CLI(构建)可执行文件。如果每次构建Xamarin应用程序时都会看到Dotfuscator GUI,那么这可能就是问题所在

根据您使用的是Dotfuscator Community Edition还是Dotfuscator Professional,可执行文件名称可能会有所不同。对于CE,请使用
dotfuscatorCLI.exe
。对于Pro,请使用
dotfuscator.exe


完全披露:我为PreEmptive Solutions工作,这是一家生产Dotfuscator的公司。

当安装Dotfuscator Community Edition时(对于您的情况,安装到
C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE
),
dotfuscator.exe
是图形用户界面(GUI),而
dotfuscatorCLI.exe
是命令行界面(CLI)。(专业版的名称和路径不同。)

根据您编辑的问题和对评论的回复,您似乎以某种方式将
dotfuscatorCLI.exe
替换为
dotfuscator.exe
。当VisualStudio生成集成调用
dotfuscatorCLI.exe
时,它希望运行的是命令行,而不是GUI

请卸载,然后重新安装Dotfuscator社区版:

  • 关闭Visual Studio 2017的所有实例
  • 从“开始”菜单中,打开Visual Studio安装程序
  • 在“Visual Studio Community 2017”下,选择修改(可能在“更多”下拉列表下)
  • 选择单个组件选项卡
  • 向下滚动到“代码工具”部分,取消选中抢占式保护-Dotfuscator框
  • 单击“修改”
  • 卸载完成后,再次打开“修改”
  • 选择单个组件选项卡
  • 向下滚动到“代码工具”部分,选中抢占保护-Dotfuscator框
  • 单击“修改”
  • 安装完成后,打开命令提示符
  • 运行:
    cd“C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE”
  • 运行:
    dotfuscator.exe
  • 验证图形用户界面(GUI)是否打开
  • 返回命令提示符并运行:
    dotfuscatorCLI.exe
  • 确认帮助文本显示在命令提示中,并且图形用户界面(GUI)未打开
  • 然后,假设您已经注册了Community Edition,您应该能够在Visual Studio中运行Dotfuscator集成的Xamarin构建,这样做时GUI应该不会打开


    免责声明:如评论中所述,我也在Dotfuscator团队工作,并以该身份回答此问题。

    这就是我所使用的。我正在引用以下两个exe:C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE。我遵循这些指示:@chosenOneThabs请参考。特别是,在使用Community Edition时,请确保在项目文件中将
    dotfuscatorxarincipath
    的值设置为以
    dotfuscatorCLI.exe
    结尾的路径。(我也为PreEmptive工作。)@JoeSewell我尝试了这个链接的说明:,但我仍然遇到同样的问题。您是否有我可以下载并复制其配置设置的项目?如果我引用的是正确的exe文件,为什么我的应用程序会打开GUI?@chosenOneThabs,您可以参考它,注意CLI可执行文件的路径和名称与Community Edition不同。您也可以尝试临时重命名GUI可执行文件(
    dotfuscator.exe
    文件)和生成,以验证您在生成配置中没有引用该文件。@JoeSewell我以与此应用配置相同的方式配置了我的应用:。唯一的区别是我指向的是CLI exe。问题可能是我在电脑上安装的点模糊器版本。我是通过Visual Studio 2017在“工具”选项下安装的。如何确认安装了正确的版本?或者这个版本中有bug吗?您在问题中提到“当我单击build/rebuild按钮时,模糊处理工具会自动打开”-您的意思是Dotfuscator用户界面(在您的屏幕截图中)