【问题标题】:I can`t enable dotfuscator in Xamarin.Android porject我无法在 Xamarin.Android 项目中启用 dotfuscator
【发布时间】:2020-09-15 11:53:56
【问题描述】:

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

  • Windows 10 专业版
  • Visual Studio Professional 2017(版本 15.9.22)
  • Dotfuscator 社区 5.44

Android 项目:

  • 应用:
    • 使用 Android 版本编译:Android 9.0 (Pie)
  • Android 清单:
    • 最低 Android 版本:Android 5.0(API 级别 21 - Lollipop)
    • 目标 Android 版本:Android 9.0(API 级别 28 - Pie)
  • Xamarin.Forms 4.6

我正在关注本指南: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 Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets。我没有更改这个标签,因为我认为这是一个正确的配置。

设置 MSBuild 属性

Set MSBuild Properties 步骤中,我添加了一个&lt;PropertyGroup&gt; 标记。我将它添加为&lt;Project&gt;根节点的第一个节点。

<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 Studio\2017\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 步骤中,我在最后一个&lt;ItemGroup&gt; 之后添加了这个&lt;ItemGroup&gt; 标签:

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

在这 3 个步骤之后,我保存了项目文件,在编辑器中将其关闭并重新加载了项目。然后,我选择了Android项目作为启动项目,并在配置组合框中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 文件未创建。

我做错了什么?

【问题讨论】:

  • 尝试清空bin和obj文件夹,重复第5步的操作。该指南意味着选择解决方案构建配置而不是发布项目。您可以查看本教程:devblogs.microsoft.com/xamarin/…

标签: visual-studio xamarin.forms xamarin.android msbuild dotfuscator


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 感谢您的回答!只有最后一个问题,PreEmptive.Dotfuscator.Internal.Tasks.dll 应该和PreEmptive.Dotfuscator.Xamarin.targets 在同一个文件夹中还是我可以删除它?
  • 是的,应该在同一个文件夹中。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多