Dotfuscator 在 Xamarin.Android 项目上抛出错误



我按照此处描述的步骤将Dotfuscator 集成到我的 Xamarin.Android 项目中,但是当需要构建项目时,我收到以下错误:

"_DotfuscatorXamarin_DetermineDefaultInputsTask"任务意外失败。 2>\path\to\Preempptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:System.NullReferenceException:对象引用未设置为对象的实例。 2>\path\to\Preempptive.Dotfuscator.Xamarin.targets(570,5): error MSB4018: at InlineCode._DotfuscatorXamarin_DetermineDefaultInputsTask.Execute() in \path\to\AppData\Local\Temp\eruovv3u.0.cs:line 106 2>\path\to\Preempptive.Dotfuscator.Xamarin.targets(570,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 2>\path\to\Preempptive.Dotfuscator.Xamarin.targets(570,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

我在网上看了又看,但似乎没有人遇到这个问题。我认为问题与在第一次构建时生成默认配置文件有关。有什么想法吗?

更新:此问题已在较新版本的 Dotfuscator 中修复。请参阅免费的Dotfuscator Community和商业许可的Dotfuscator Professional的详细说明。原始答案如下。


完全披露:我是PreEmptive Solutions的Dotfuscator开发人员,并且正在以该角色回答这个问题。

你是对的,问题是目标文件(PreEmptive.Dotfuscator.Xamarin.targets)中的默认配置文件生成 - 对此感到抱歉。具体而言,生成集成正在尝试发现项目引用,但需要经典的 MSBuild 项目格式,而不是 .NET Standard 使用的新最小格式。

您可以变通解决此问题,如下所示:

  1. 在目标文件中,找到_DotfuscatorXamarinConfigTemplateLines属性并将其值(在 CDATA 部分内)复制到与项目文件位于同一目录中的名为DotfuscatorConfig.xml的新文件(或为项目文件中的DotfuscatorXamarinConfigFileName属性提供的任何值)。
  2. 在 Visual Studio 中,在要保护的配置中生成项目一次(例如,AnyCPU|发布)。它会出错,因为新的配置文件还没有任何输入程序集,但是通过现在构建,我们可以将这些程序集放在正确的位置来配置 Dotfuscator。
  3. 打开 Dotfuscator 的用户界面。
    • 对于社区版,从 Visual Studio 中打开"工具"菜单并选择"抢占保护 - Dotfuscator"。
    • 对于专业版,请从"开始"菜单运行 Dotfuscator 专业版。
  4. 在用户界面中,"文件"|"打开在步骤 1 中创建的文件。
  5. 在"输入">
  6. 屏幕上,单击"添加输入"按钮(社区版中的绿色加号,专业版中的文件夹打开图标)。
  7. 浏览到
  8. 项目目录,然后浏览到objReleaseDotfuscatorXamarindfin,然后选择要保护的程序集。
    • Release替换为您在步骤 2 中构建的配置的相应目录。
    • 应选择与解决方案中的项目对应的程序集,而不是选择属于框架一部分的第三方程序集和程序集。
  9. 保存配置文件。
  10. 导航到"项目属性"编辑器。
    • 在社区版中,转到">生成设置"屏幕,然后选择"项目属性"选项卡。
    • 在专业版中,转到"设置"选项卡,然后选择">设置>项目属性"屏幕。
  11. 添加以下项目属性(社区版和专业版的说明):
    • 属性名称InDir、值objReleaseDotfuscatorXamarindfin
    • 属性名称OutDir、值objReleaseDotfuscatorXamarindfout
    • 属性名称ReportDir、值DotfuscatorReportsRelease
    • Release替换为您在步骤 2 中构建的配置的相应目录。请注意,磁盘上尚不存在OutDirReportDir指向的目录。
  12. 保存配置文件。
  13. 返回输入屏幕,选择一个输入,然后单击铅笔图标。将程序集的路径从绝对路径编辑为${configdir}${InDir}AssemblyName.dll,用AssemblyName.dll替换程序集的实际名称和扩展名。对每个输入程序集重复此操作。
  14. 保存配置文件(并将其提交到源代码管理)。
  15. 在 Visual Studio 中重新生成项目。构建集成将使用您的配置文件,而不是尝试生成新的配置文件。

在乔的奇妙解决方案之上,我最终根据 https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_xamarin.html#pctoc-setup 指令将一个值从真更改为假 让我的安卓解决方案构建/运行。

<DotfuscatorXamarinGenerateNewConfigFile>false</DotfuscatorXamarinGenerateNewConfigFile>

我一直在根据本用户指南在 Xamarin.Android 项目中配置 Dotfuscator 社区版。我也有以下构建错误(与@AxiomaticNexus几乎相同):

Error       The "_DotfuscatorXamarin_DetermineDefaultInputsTask" task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
at InlineCode._DotfuscatorXamarin_DetermineDefaultInputsTask.Execute() in c:UsersuserAppDataLocalTempwqhfhbsk.0.cs:line 106
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() eKey.Droid  C:VSProjectsdotFuscatorTestPreEmptive.Dotfuscator.Xamarin.targets    570

我已经使用@Joe Sewell的完整披露解决了这个问题。 我希望先发制人的解决方案能够尽快实现固定版本!!

在某些时候,我在项目的根目录中丢失了Preempptive.Dotfuscator.Xamarin.target文件。我已经执行了Joe Sewell描述的上述说明,但后来注意到丢失的文件。

错误是这样的:

Error       The "_DotfuscatorXamarin_DetermineDefaultInputsTask" task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
at InlineCode._DotfuscatorXamarin_DetermineD  efaultInputsTask.Execute() in c:UsershietaAppDataLocalTempk3a5f2bj.0.cs:line 106
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() WorkSafe.Droid      

仅供参考,如果其他人可以避免浪费时间。

相关内容

  • 没有找到相关文章

最新更新