我无法在 Xamarin.Android 项目中启用 dotfuscator

I can`t enable dotfuscator in Xamarin.Android porject

我正在使用 Xamarin.Forms 开发跨平台应用程序,但在我的 Xamarin.Android 项目中使用 dotfuscator 时遇到问题。这是我的开发环境:

Android 项目:

我正在遵循此指南:Integrating Dotfuscator's Protection into Your Xamarin Apps in Visual Studio

导入目标文件

Import the Targets File 步骤中,我必须添加一个带有目标文件相对路径的 <Import> 标记。当我打开项目文件时,我可以看到标签已经存在:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

我检查过此路径中是否存在该文件:C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets。我没有更改这个标签,因为我认为这是一个正确的配置。

设置 MSBuild 属性

Set MSBuild Properties 步骤中我添加了一个 <PropertyGroup> 标签。我将它添加为 <Project> 根节点的第一个节点。

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
    <DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
    <DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
    <!-- Enable Dotfuscator for Release -->
    <DotfuscatorXamarinEnabled Condition="'$(Configuration)' == 'Release'">true</DotfuscatorXamarinEnabled>
  </PropertyGroup>
  ...

将 Dotfuscator 配置文件添加到项目

Add Dotfuscator Config File to Project 步骤中,我添加了这个 <ItemGroup> 标签,在最后一个 <ItemGroup> 标签之后:

  ...
  </ItemGroup>
  <ItemGroup>
    <None Include="DotfuscatorConfig.xml" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>

在这 3 个步骤之后,我保存了项目文件,在编辑器中将其关闭并重新加载了项目。然后,我选择 Android 项目作为 StartUp 项目,并在配置组合框中选择 Release。之后我构建了项目,这是输出:

2>  MyApp.Android -> C:\..\MyApp\MyApp.Android\bin\Release\MyApp.Android.dll
2>  No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.

关于 Build the Project with Dotfuscator's Protection 第 5 步中描述的行:

2>  Running Dotfuscator with a new config file based on project references...
2>  Finished running Dotfuscator with a new config file.
2>C:\code\protected-bugsweeper\BugSweeper\BugSweeper.Android\BugSweeper.Android.csproj : warning : A new Dotfuscator config file was generated because it did not exist: 'DotfuscatorConfig.xml'.

并且 DotfuscatorConfig.xml 文件未创建。

我做错了什么?

您在 导入目标文件 中提到的 <Import> 标签与说明告诉您添加的标签不同。换句话说,当您完成编辑时,您的项目文件中应该有 多个 <Import> 标签。

您提到的标签是普通 Xamarin 项目文件的一部分,与 Dotfuscator 无关。它指的是 .targets 文件,该文件已经是 Visual Studio 安装的一部分。请不要删除或修改此标签。

说明中告诉您添加的标记是将 Dotfuscator 导入您的项目的标记。它指的是您在 an earlier step 中下载的 PreEmptive.Dotfuscator.Xamarin.targets 文件。例如,如果您将 ZIP 文件的内容解压缩到与 .csproj 相同的目录中,则添加:

<Import Project="PreEmptive.Dotfuscator.Xamarin.targets" />

紧接在结束 </Project> 标记之前。如果您将 ZIP 内容解压缩到其他目录,则将 " 标记之间的部分更改为从 .csproj 目录到文件的相对路径。

(注意:我是 Dotfuscator 的开发人员,我以该身份回答这个问题。)